WSL2 X11 程序“消失”

and*_*eas 17 xorg windows-10 windows-subsystem-for-linux

我对 Windows 10 上的 WSL2 非常满意,刚从 Mac 切换过来。我在 Windows 主机上运行X410并通过设置在 WSL 内启动 X11 应用程序

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

在开始我的程序之前。

它工作了一段时间,但在我的电脑从睡眠中唤醒后,X 窗口消失了。该应用程序仍显示为正在运行ps.

我觉得这与 X11 应用程序和 X410 服务器之间的网络连接丢失有关,但我不确定。有没有人经历过这种情况并提出解决方法?

我使用的是 Windows 10 Insider Preview build 18945。

ste*_*ang 12

你说得对,是网络问题。它显然会影响到 Hyper-V 的所有 X11 连接。一种解决方案是对 X11 连接使用 TCP/IP 以外的其他内容。

Windows X11 服务器 x410 的开发人员在这里解释了如何使用虚拟套接字为 Hyper-V VM 修复它

不幸的是,他还在这篇更广泛的文章的结尾解释了他无法在 WSL2 上实现这一点。他将等待 WSL2 成熟,直到它通过 Unix 域套接字实现更好的操作系统间通信。

  • 目前不是,因为当程序失去与 X 的连接时,它们就会终止。这只是正常的行为。有一些工具可以通过在中间放置某种代理以在 TCP 连接断开时保持程序连接到某些东西来保持 X11 会话在连接之间保持不变。不过,我没有调查任何这些解决方案。考虑到管道中的解决方案,它们都太复杂了。 (3认同)
  • VcXsrv 在我见过的所有帐户中都存在同样的问题 (3认同)

der*_*koe 11

您可以使用XpraX2Go作为解决方法(对我来说 X2Go 效果更好)。

Xpra

  1. 在您的 Linux 发行版(apt install xpra在 Ubuntu 上)上安装 Xpra 。
  2. 在 Windows 上安装 Xpra(安装程序在Xpra 客户端下载下
  3. 在 Linux 中启动 xpra 使用 xpra start --bind-tcp=0.0.0.0:10000 :10000
  4. Xpra.exe在 Windows 中启动并连接到 Port 10000

客户端将在睡眠/待机后自动重新连接。即使您失去连接(可能是在登录 VPN 时),您也可以随时手动重新连接。

X2Go

  1. 在您的 Linux 发行版上安装 X2Go(apt install x2goserver在 Ubuntu 上)。
  2. 在 Windows 上安装 X2Go 客户端(安装程序在X2Go 客户端下载下
  3. 在 Linux 上修复并启动 sshd:
    sudo apt-get remove --purge openssh-server
    sudo apt-get install openssh-server
    sudo service ssh --full-restart
    
    Run Code Online (Sandbox Code Playgroud) 您还必须在每次 WSL 重新启动时启动 sshd sudo service ssh start
  4. 在 Windows 上启动客户端,使用“会话类型:已发布的应用程序”进行连接

PS:我目前正在写一篇小博文:WSL2 中的开发环境