WSL2 GUI 不工作

Wil*_*lli 4 linux gui ubuntu windows-10 windows-subsystem-for-linux

我正在尝试让 GUI 与 WSL2 一起使用,但我尝试的任何方法都不起作用。

  1. 我关闭了家庭网络的防火墙(仅用于测试)。
  2. 我使用以下选项启动 Vcxsrv:多个窗口、显示编号:-1、不启动客户端、剪贴板(带有主要选择)、本机 OpenGL 和禁用访问控制。
  3. 在Ubuntu中,我输入:export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0
  4. 然后我也输入:export LIBGL_ALWAYS_INDIRECT=1

完成此操作后,我尝试执行一些曾经在 WSL1 下运行的程序。

在 的情况下nemo,我收到以下错误:

Unable to init server: Could not connect: Connection refused
Could not parse arguments: Cannot open display:
Run Code Online (Sandbox Code Playgroud)

当尝试运行时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
Run Code Online (Sandbox Code Playgroud)

输入echo $DISPLAY产生以下输出:172.19.64.1:0

我还卸载了 Ubuntu,手动删除了 AppData 中的残留内容,并重新安装了 Ubuntu。如果这一点很重要:我没有创建 UNIX 帐户,而是使用 root(在重新安装 Ubuntu 之前和之后,因此 Ubuntu 端应该不存在权限问题)。

编辑1:我还尝试以管理员身份运行Vcxsrv和Ubuntu,只是为了排除Windows方面的任何权限问题。

我可能还应该补充一点,我是 Windows Insider(快圈),自从大约半年前第一次尝试 WSL2 以来,我就遇到了这个问题。由于仅使用终端在没有 Nemo 的情况下浏览文件,迫使我始终降级到 WSL1,这真是一个痛苦……。

Wil*_*lli 5

回答我自己的问题,以防有人遇到类似的问题。如果我使用这样的东西:

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
Run Code Online (Sandbox Code Playgroud)

运行 GUI 程序根本无法工作,因为它们似乎找不到 Xserver(我尝试了其中的两个)。但是,如果我手动将 IP 地址设置为

export DISPLAY=IPv4_address_of_host:0
Run Code Online (Sandbox Code Playgroud)

它工作完美。

老实说,我不知道为什么第一种方法似乎对许多人(如果不是大多数人)有效,但对我却不起作用。但我在三台不同的物理机器上尝试过,第一种方法对任何一台都不起作用。我在互联网上也找不到该代码的任何变体。我一定是一个非常不幸的人:(。

不管怎样,如果你有和我一样的问题,你应该告诉你的路由器总是为你的电脑分配相同的IP地址。这样,您可以告诉您的 WSL 发行版应该始终使用相同的 IP 地址,以便您能够自动执行该export DISPLAY=IPv4_address_of_host:0步骤。


小智 5

根据 wiki WSL - Ubuntu Wiki,您可以执行以下操作:

 export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 # in WSL 2
 export LIBGL_ALWAYS_INDIRECT=1
Run Code Online (Sandbox Code Playgroud)