多个 WSL2 发行版连接到单个 X11 服务器

多个 WSL2 发行版连接到单个 X11 服务器

我使用 X11 在 WSL2 发行版中启动 GUI 应用程序。例如,以下是使用 xfce4-terminal 的操作方法:

wsl --distribution foo --user vect /bin/bash -l -c xfce4-terminal

DISPLAY发行版中的环境变量设置/etc/profile.d/如下:

export DISPLAY="$(sed -n 's/nameserver\ //p' /etc/resolv.conf):0"

当只有一个发行版 GUI 应用程序启动时,它工作正常。如果我尝试从多个发行版启动 GUI 应用程序,事情就会变得很奇怪。使用从克隆bar的发行版,我有以下内容:foowsl --export ...wsl --import ...

在 PowerShell 中

wsl --distribution foo --user vect /bin/bash -l -c xfce4-terminal

在 xfce4-terminal 中的 bash 中

$ echo $WSL_DISTRO_NAME
foo

在 PowerShell 中

wsl --distribution bar --user vect /bin/bash -l -c xfce4-terminal

在 xfce4-terminal 中的 bash 中

$ echo $WSL_DISTRO_NAME
foo

正如您所看到的,第二种情况尽管有指定,但xfce4-terminal仍在运行。foobar

同时,当它bashPowerShell正确的发行版中运行时,它就启动了:

wsl --distribution bar --user vect
$ echo $WSL_DISTRO_NAME
bar

该问题已通过VcXsrv以及重现Cygwin/X

我做错了什么?如何从多个 WSL2 发行版并行启动带有 X11 的 GUI 应用程序?

答案1

XFCE 终端有一种机制,它会尝试使用 DBus 查找正在运行的实例。可以使用 禁用此行为--disable-server


所有 WSL 2 发行版都在单个虚拟机中运行。它们还共享单个网络命名空间

两个终端,两个分布,相同的网络配置

我不熟悉 DBus,但我发现它支持 TCP 传输。UNIX 套接字可能不会在 WSL 2 发行版之间共享,因为以下命名空间不同:

  • 进程控制计算机
  • 蒙脱石
  • pid 和 pid_for_children
  • 悉尼科技大学

但是,DBus 连接可以通过 TCP 转到另一个发行版。这可能会导致有趣的使用桌面软件时的行为。

相关内容