Post

Windows 10及组织网络下WSL2启动图形界面

环境与症状

  1. 完全由组织管理IP的Windows 10下WSL2
  2. Gtktcltkinter等无法启动,称无DISPLAY环境变量
  3. DISPLAY环境变量默认为空,设为:0:0.0后,报错变为无法链接至DISPLAY 0.0
  4. export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0等设置无效,仍显示无法连接到显示

解决方法

  1. 安装Xming(或VcXsrv,X410等,以下以Xming为例),配置完毕后台运行。

设置中的window number实际指的是服务器端口号,此处如果修改需要同时修改后续操作中的端口号。并且需要勾选no access control

  1. 运行wf.msc(即控制面板>系统和安全>Windows Defender 防火墙>高级设置),在Inbound rules中检查Xming X Server是否允许了DomainPrivate
  2. (可选)通过任务管理器查看GPU型号并在这里更新驱动。
  3. Powershell运行ipconfig,查看Windows 10主机的IP地址,如x.x.x.x
  4. WSL2中运行export DISPLAY=x.x.x.x:0.0并将其添加至.?shrc中,即可在Windows 10中唤起WSL2的GUI。

少走点弯路

翻阅了无数个Issue和Stack Overflow页面,抛开rz的没有设置$DISPLAY不谈,大部分人都能通过简单的X Server和修改DISPLAY至/etc/resolv.conf中的地址解决这一问题。

然而,1.1提到,/etc/resolv.conf已被手动替换为了组织DNS解析站并禁用了自动生成。因此,文件中的nameserver已经不是可用的地址(?)。

经过测试,此情况下将nameserver替换为Windows 10 IP地址仍会带来DNS解析问题。

考虑到,要将WSL2中的GUI通过X Server在Windows 10中唤起,所以这里的地址应该替换为ipconfig找到的主机IP。(很奇怪,这一点完全没有在Xming的log中体现)

所以,还是建议大家不要嗯抄网上看起来非常高大上血长一行的shell,我个人觉得这篇笔记中的流程更符合逻辑,如1.4中的命令之所以有用只不过是确实非组织管理IP下\etc\resolv.conf中的nameserver和所需IP一致罢了。

整这么多没用的不如转Windows 11

This post is licensed under CC BY 4.0 by the author.