我正在尝试让 GUI 与 WSL2 一起工作,但都没有成功。
- 我关闭了家庭网络的防火墙(只是为了测试)。
- 我使用以下选项启动了 Vcxsrv:多个窗口、显示编号:-1、不启动客户端、剪贴板(带有主要选择)、本机 OpenGL 和禁用访问控制。
- 在 Ubuntu 中,我输入:
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0
- 然后我也输入了:
export LIBGL_ALWAYS_INDIRECT=1
完成这些之后,我尝试执行一些以前在 WSL1 下运行的程序。
在这种情况下nemo
,我收到以下错误:
Unable to init server: Could not connect: Connection refused
Could not parse arguments: Cannot open display:
尝试运行时gedit
,出现以下错误:
Unable to init server: Could not connect: Connection refused
(gedit:6704): Gtk-WARNING **: 01:07:05.762: cannot open display: 172.19.64.1:0
输入将echo $DISPLAY
产生以下输出:172.19.64.1:0
我还卸载了 Ubuntu,手动删除了 AppData 中的残留文件,然后重新安装 Ubuntu。这很重要:我没有创建 UNIX 帐户,而是使用 root(重新安装 Ubuntu 之前和之后都是这样,因此 Ubuntu 方面应该没有权限问题)。
编辑1:我也尝试以管理员身份运行 Vcxsrv 和 Ubuntu,只是为了排除 Windows 方面的任何权限问题。
我可能还应该补充一点,我是 Windows Insider(快速通道),自从大约半年前第一次尝试 WSL2 以来,我就一直遇到这个问题。迫使我总是降级到 WSL1,因为不使用 Nemo 仅使用终端浏览文件真的很麻烦……
答案1
回答我自己的问题,以防有人遇到类似的问题。如果我使用类似这样的方法:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
运行 GUI 程序根本行不通,因为它们似乎找不到 Xserver(我试过两个)。但是,如果我手动将 IP 地址设置为
export DISPLAY=IPv4_address_of_host:0
它运行完美。
说实话,我不知道为什么第一种方法似乎对许多人(如果不是大多数人)都有效,但对我却无效。但我在三台不同的物理机器上尝试过,第一种方法在两台机器上都不起作用。而且我在互联网上找到的任何代码变体都不起作用。我一定是个非常不幸的人 :(。
无论如何,如果你遇到和我一样的问题,你应该告诉你的路由器始终为你的 PC 分配相同的 IP 地址。这样,你可以告诉你的 WSL 发行版它应该始终使用相同的 IP 地址,这可以让你自动执行该export DISPLAY=IPv4_address_of_host:0
步骤。
答案2
根据维基百科WSL - Ubuntu 维基百科您可以执行以下操作:
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 # in WSL 2
export LIBGL_ALWAYS_INDIRECT=1
答案3
我知道这个帖子已经有几个月了,但如果这对任何人有帮助的话,Windows 防火墙似乎也阻止了 WSL 找到我的情况中的 X 服务器。当我禁用防火墙时,一切都正常。我正在研究需要向防火墙入站/出站规则添加什么,这样防火墙就不需要完全禁用了。
我希望这可以帮助别人!
答案4
就我而言,它不是 WSL 端,而是 xServer 端……消息显示
Authorization required, but no authorization protocol specified
Unable to init server: Could not connect: Connection refused
在 xServer 设置上,有一个检查接受所有传入连接,这使它对我来说起作用。