在WSL2中,可以避免DNS错误并启动GUI应用程序
目的
以前の記事 でWSL2のdocker環境からGUIアプリを起動する方法について解説しました。
只是在解決WSL2正式版中apt更新時出現的DNS錯誤問題後,發現每次在WSL2上啟動GUI應用程式前都需要進行DISPLAY設定,否則無法啟動。因此,本次將介紹如何處理這個問題(同時也會提供避免DNS錯誤的解決方案)。
※雖然在WSL2正式版之前可能已經存在這個問題,但我沒有進行相關調查。
顺便提一下之前的文章是关于Windows HOME,而这次则是关于Pro版本,但我认为即使在HOME版本上也可以做到同样的事情。
另外,这次是在WSL2上启动GUI应用程序,并没有在docker环境中进行确认。不过,我相信可能也可以类似地实现。
参考にさせて頂いた記事
https://github.com/microsoft/WSL/issues/4285
https://stackoverflow.com/questions/61110603/how-to-set-up-working-x11-forwarding-on-wsl2
https://github.com/microsoft/WSL/issues/4106
以下是各种链接的中文表达:
https://github.com/microsoft/WSL/issues/4285
https://cartman0.hatenablog.com/entry/2020/07/16/WSL2%E5%A6%82%E6%9E%9C%E6%97%A0%E6%B3%95%E8%A7%A3%E5%86%B3%E7%BD%91%E7%BB%9C%E5%9F%9F%E5%90%8D%E7%9A%84%E9%97%AE%E9%A2%98
https://stackoverflow.com/questions/61110603/how-to-set-up-working-x11-forwarding-on-wsl2
https://github.com/microsoft/WSL/issues/4106
工作环境
-
- Windows10 Pro
バージョン:2004
OSビルドバージョン:19041
WSL2 Ubuntu18.04
解决方案 (jiě jué àn)
WSL2无法解决网络域名解析问题。
从什么时候开始使用WSL2执行apt update时,出现以下错误。(从正式版开始?不太清楚)
Err:1 http://archive.ubuntu.com/ubuntu bionic InRelease
Temporary failure resolving 'archive.ubuntu.com'
Err:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
Temporary failure resolving 'security.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Temporary failure resolving 'archive.ubuntu.com'
Err:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
Temporary failure resolving 'archive.ubuntu.com'
~以下略~
为了解决这个问题,可以按照以下页面介绍的方法进行操作:
以下是简单的步骤。
- wslを起動して/etc/wsl.confファイルを作成します。ファイルの中身は以下です。
[network]
generateResolvConf = false
これでresolv.confが自動生成されなくなります。
- 作成されているresolv.conf(恐らくシンボリックリンクとして作成されている)を削除し、新たにresolv.confを作成します。ファイルの中身は以下です。
nameserver 8.8.8.8
请将您的DNS设置更改为Google的公共DNS。
更改设置后,请重新启动WSL(可以关闭并重新打开窗口)。
*如果无法正常工作,请尝试重新启动电脑。
通过这个设置,DNS服务器将能够解析域名。
由于显示设置错误,GUI应用程序无法启动。
在之前的文章中,我们将HOST IP设置为显示。
LOCAL_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
export DISPLAY=$LOCAL_IP:0
正如前面解释的那样,由于resolv.conf被设置为8.8.8.8,所以DISPLAY设置为8.8.8.8:0。这样无法打开主机的Display,会导致错误发生。
因此,我们将使用以下方式使用ip route命令来获取主机的IP。
export DISPLAY=$(ip route | awk '/default via / {print $3}'):0
可能会有一些事情无法顺利进行。
请参考以下页面:
https://github.com/microsoft/WSL/issues/4106
https://stackoverflow.com/questions/61110603/how-to-set-up-working-x11-forwarding-on-wsl2
如果将这个设置放在.bashrc中,您就不需要每次都进行DISPLAY设置,就可以在WSL2中使用GUI应用程序。(在解决这个问题之前,每次都需要在主机上检查IP并进行DISPLAY配置…)