如何在 WSL2上设置工作 X11转发

当从 WSL1迁移到 WSL2时,许多事情都会发生变化; 显然这也适用于 X11转发。
为了在 Windows10上像在 WSL1上那样使用 WSL2的 X11转发,我需要采取哪些步骤?

243266 次浏览

译者:

在你的 ~/.bashrc中加入以下内容:

export DISPLAY=$(ip route list default | awk '{print $3}'):0
export LIBGL_ALWAYS_INDIRECT=1

在 X11服务器上为 Windows 启用公共访问 。 *

按照 Wsl-windows-toolbar-launcher人员的描述,在 Windows 防火墙中为 TCP 端口6000添加一个单独的 入站规则,以便允许 WSL 访问 X 服务器。


正如指出的 作者: WSL _ subreddit _ mod on reddit和您可以在 微软关于 WSL2的文档中读到的,WSL2体系结构使用虚拟化网络组件。这意味着 WSL2的 IP 地址与主机不同。 这解释了为什么 WSL1的 X11转发设置不能简单地转移到 WSL2。

在关于 WSL 的 Ubuntu Wiki 页面上,您已经可以在 运行图形应用程序下找到适合 WSL2的配置。上面提到的 Reddit 用户也提出了类似的配置,他还贡献了解决方案的另一部分: 在 Windows 下的 X11服务器上启用公共访问。

这意味着在你的 ~/.bashrc中加入以下内容:

export DISPLAY=$(ip route list default | awk '{print $3}'):0
export LIBGL_ALWAYS_INDIRECT=1

以及 X11服务器上的 启用公共接达。 *

在 Windows 10上启用 x11转发 WSL2的最重要的部分仍然缺失: Windows 防火墙在默认情况下通过为 WSL 配置的网络接口阻塞连接。
对于 TCP 端口6000,需要一个单独的 入站规则来允许 WSL 访问 X 服务器。按照 Wsl-windows-toolbar-launcher人员的描述,规则创建后,IP 地址范围可以限制在新创建规则的设置中的 WSL 子网中,在 范围: 172.16.0.0/12下。

* : 如果您使用 VcXSrv,您可以通过禁用额外设置上的访问控制为您的 X 服务器启用公共访问:
Disable access control VcXSrv
或者使用 ac标志直接调用 vcxsrv.exe: vcxsrv.exe -ac,正如 再见在 github 问题上指出的那样。

或者,这么回答展示了如何通过.Xauthority 文件共享密钥,从而保留完整的访问控制。

我不知道这是否特定于我的配置,但这些解决方案在我的计算机上无法工作。他们返回的地址是192.168.0.254,这是我的网关,而不是我的主机。

为了让它正常工作,我必须在我的 Ubuntu/WSL2上使用以下内容:

export DISPLAY="`ip -4 address | grep -A1 eth0 | grep inet | cut -d' ' -f6 | cut -d/ -f1`:0"

对于那些谁可能与 模拟引擎工作,如 露台/露台,统一等,另一个配置是必要的。

将以下内容添加到 ~/.bashrc:

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0
export LIBGL_ALWAYS_INDIRECT=0

确保在 Windows 中为 X11服务器启用 都有公众参与私人访问还有禁用 X11服务器支持的任何访问控制。

如果使用 VcXSrv,取消选中 土生土长的 OpenGl。 VcXSrv 的最终配置如下:

enter image description here

其他好的 X11服务器的难度较小,是 X410MobaXterm。有关此配置的详细信息,请参阅 给你给你

使用 /etc/resolv.conf名称服务器对我不起作用,因为我在 /etc/wsl.conf中禁用了 resolv.conf生成(我有一个定制的 resolv.conf)。

最终,您需要 WSL2主机 IP 地址,这也应该是您的默认路由。下面是我的 Debian WSL2发行版的 ~/.bashrc条目:

export DISPLAY=$(ip route | awk '/^default/{print $3; exit}'):0

对于一些像我这样只允许私人网络的人来说,

虽然 他们应该都打勾了

enter image description here

Windows Defender 防火墙上应该有停车标志

enter image description here

双击它并允许私有和公共连接,

enter image description here

因此,所有4个项目应勾选绿色。

然后上面这个来自“ NicolasBrauer”的回答是为我工作的。

比如在 XLaunch 和

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0
export LIBGL_ALWAYS_INDIRECT=1

这个 Github 问题复制了我的答案。

这个想法是使用通过工作站进行通信的能力。

先决条件

  • 为了在 Windows 主机中使用 socat,您需要一个运行 WSL1的发行版。我相信你可以做到这一点在 Powershell,但我没有时间研究这一点。也许有人可以在 powershell 中编写一个 stdio-> tcp 重定向器,那么我们就不需要2个 WSL 发行版了。

如何转发 X 服务器连接

  1. 让你最喜欢的 X 服务器在 Windows 上运行。默认情况下,它们会监听端口6000。
  2. 在 WSL2发行版中,在后台运行以下命令(ubuntu是安装了 socat 的 WSL1发行版的名称) :
mkdir -p /tmp/.X11-unix/
socat UNIX-LISTEN:/tmp/.X11-unix/X0,fork EXEC:"/mnt/c/Windows/System32/wsl.exe -d Ubuntu socat - TCP\:localhost\:6000"

基本上这建立了一个隧道从普通的 x Unix domain socket 到主机的端口6000。

如何将任何 TCP 连接转发回主机

让我们假设有一个 tcp 服务在 Windows 端口5555上运行。在 WSL2发行版中,在后台运行以下命令(ubuntu是安装了 socat 的 WSL1发行版的名称) :

socat TCP-LISTEN:5555,fork EXEC:"/mnt/c/Windows/System32/wsl.exe -d ubuntu socat - TCP\:localhost\:5555"

如何将任何 TCP 连接从主机转发到 WSL2

这只是在做同样的事情,但是在相反的方向。您可以在您的 WSL1发行版中运行以下命令:

socat TCP-LISTEN:5555,fork EXEC:"/mnt/c/Windows/System32/wsl.exe -d ubuntuwsl2 socat - TCP\:localhost\:5555"

表演

在我的电脑上,它可以处理高达150MB/s 的数据,所以它不是最快的,但对于大多数应用程序来说足够快。

我已经设法使用 Windows 主机的 LAN 适配器 IP 来处理开箱即用的 VcXsrv 防火墙配置(即,不需要覆盖/禁用任何防火墙规则)。增加了以下我的 ~/.bash_aliases

export DISPLAY=$(pwsh.exe -c ipconfig | grep -A 3 lan | grep IPv4 | head -1 | awk '{ print $NF }'):0

其中 lan是我的 特定于连接的 DNS 后缀(您的可能不同,在这种情况下,您应该在上面的命令行中替换它)。

下面的解决办法对我很有用:

Set-NetFirewall Profile-Name $(Get-NetConnectionProfile) . NetworkCategory-DisabledInterfaceAliases $(Get-NetAdapter | Where-Object Name-like‘ WSL’) . Name

我使用以下 bash 设置 display:

export DISPLAY=$(powershell.exe -c ipconfig | grep -A4 WSL | tail -1 | awk '{ print $NF }' | tr -d '\r'):0

我宁愿在客户端设置一个 ssh 服务器, 在主机上安装类似 Xming 的 X11服务器 并连接到本地主机通过腻子与 X11转发。 无需修改防火墙规则,不需要主机 IP。

我发现有一个来自 Ubuntu 的官方文件,它是全面的供你参考。我们知道,这个技巧也适用于 Debian/WSL2。 Https://wiki.ubuntu.com/wsl

谢谢 Kennyhyun 和其他人的分享。所有这些都是如何或以某种方式在我的计算机上启用 X11服务器的 WSL2托管在 Windows10上。由于 WSL2作为一个 VM 不再是与 WSL1相同的基础设施。我确实花了点时间才看完。

请允许我简要介绍一下如何让 WSL2上的应用程序显示出来。

  1. 在 WLS2终端运行“ IP 路由”。

    IP 路线 通过 a.b.c. 1 dev eth0默认 A.b.c. 0/20 dev eth0 proto 内核作用域链接 src x.x.x.x

  2. 将“ dev eth0”的 IP 地址添加到“ export $DISPLAY =”中

    输出 $DISPLAY = a.b.c. 1:0.0

  3. 运行 xming 服务器。 然后您可以运行在 WSL2Linux 上运行的 APP。但是对于 X11,您可能需要遵循来自 Ubuntu 的文档。

我不知道为什么,但是以上的答案对我都不起作用。我运行在一个 ROG Zephyrus 与 AMD 和 Nvidia 图形,我肯定引起了问题。

Whme 描述的防火墙设置很重要,但是 Linux 环境变量不适合我。我在配置文件中有几个标记为名称服务器的条目,其中没有允许连接的条目。

我最后把它们设置为:

export DISPLAY=$HOSTNAME:0.0
export LIBGL_ALWAYS_INDIRECT=

我使用 VcXsrv 作为 X 服务器,我还必须将参数设置为 -nowgl

我找到了一个适合我的解决方案,如下: 在 WSL2上设置图形

1.      Start ssh service
1.1.   Open WSL
1.2.   Type: sudo service ssh start
2.      Get Windows (WSL net) IP
2.1.   Open Powershell
2.2.   Type: (ipconfig | Select-String -Pattern 'WSL' -Context 1, 5).Context.PostContext | Select-String -Pattern 'IPv4'
2.3.   Get the received IP
3.      Set environment variable
3.1.   In WSL2 terminal type: export DISPLAY=172.23.64.1:0.0 with the IP of the windows entity (2.3) instead of the place holder
4.      Launch Xming
4.1.   Open Xlaunch and go with the defaults In Specify parameter settings: Check No Access Control
5.      Good luck!

以下连结: Https://docs.google.com/document/d/1ao3vjbc3lcdc9kvybot5pbughc4_k4g8lcjxx23vx7e

来自 https://github.com/microsoft/WSL/issues/4793#issuecomment-588321333的解决方案使用 VcXsrv 作为 X 服务器,这就是我得到这个答案的地方(为了便于阅读稍作编辑)。请注意,原始版本正在由其作者进行更新,因此不要忘记重新检查。

为了实现这一目标:

  1. 在 Windows 上,使用以下命令,将 E:\VcXsrv改为安装位置,并将其保存为 xxx.bat,在 Windows 启动文件夹中,例如 C:\Users\Me\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,如果愿意,可以让它在启动时运行:
@ECHO OFF


REM Start WSL once to create WSL network interface
wsl exit


REM Find IP for WSL network interface
SET WSL_IF_IP=
CALL :GetIp "vEthernet (WSL)" WSL_IF_IP
ECHO WSL_IF_IP=%WSL_IF_IP%
setx "WSL_IF_IP" "%WSL_IF_IP%"
setx "WSLENV" "WSL_IF_IP/u"


REM Change E:\VcXsrv to your VcXsrv installation folder
START /D "E:\VcXsrv" /B vcxsrv.exe -multiwindow -clipboard -nowgl -ac -displayfd 720
GOTO :EOF






:GetIp ( aInterface , aIp )
(
SETLOCAL EnableExtensions EnableDelayedExpansion
FOR /f "tokens=3 delims=: " %%i IN ('netsh interface ip show address "%~1" ^| findstr IP') DO (
SET RET=%%i
)
)
(
ENDLOCAL
SET "%~2=%RET%"
EXIT /B
)
  1. 在 WSL 中,编辑 ~/. bashrc 文件,添加以下代码行:
export DISPLAY=$WSL_IF_IP:0
unset LIBGL_ALWAYS_INDIRECT

这就是让 WSL2自动工作的全部内容。这个想法是在 Windows 上获取 WSL 接口的专用局域网 IP,并使用环境变量将其传递给 WSL。然后,WSL 将这个 LAN IP 更新为用于 X- 服务器连接的显示。

剪贴板也很好用,我在安装了 Ubuntu 20.04 LTS 的 WSL2上进行了测试。

下面是我撰写的两篇文章,它们介绍了如何为不同类型的用例设置 x11:

  1. 使用 WSL2 中的图形用户界面安装程序: 本文介绍如何安装 vcxsrv,将环境变量添加到 bashrc 配置文件,以及在启动时通过命令行参数编程调度 vcxsrv 以启动。它还包括在 WSL2中作为独立程序安装和启动 Firefox。
  2. 使用 WSL2 中的图形用户界面安装 Ubuntu 桌面本文将详细介绍如何安装 vcxsrv、 dotNet、 genie 和 Ubuntu 桌面。它包括创建导出环境变量的脚本、启动 vcxsrv、启动 gnome 桌面环境,以及创建将它们绑定在一起的快捷方式。它还包括运行 Ubuntu 桌面,防止屏幕锁定错误,以及安装 SnapStore。

如何在 WSL2中设置 X11转发

这个答案假设您已经在 Windows 主机上运行了可用的 XServer 和 PulseAudio 配置,因为您已经在使用 WSL1。(您可能还必须将-ac 参数添加到命令行中,以使您选择的 XServer 能够与 WSL2一起工作。)

我这样做的方式,并确保我得到 X11转发,无论我是使用静态 IP 地址或 DHCP 在 Windows 主机上,甚至无论我的主机名或网络位置改变,我添加以下到我的 ~/。Bashrc 文件:

# Get the IP Address of the Windows 10 Host and use it in Environment.
HOST_IP=$(host `hostname` | grep -oP '(\s)\d+(\.\d+){3}' | tail -1 | awk '{ print $NF }' | tr -d '\r')
export LIBGL_ALWAYS_INDIRECT=1
export DISPLAY=$HOST_IP:0.0
export NO_AT_BRIDGE=1
export PULSE_SERVER=tcp:$HOST_IP

完成上述操作后,无论我的主机名或主机的 IP 地址是什么,每次在 WSL2中启动 BASH 会话时,它都会被放置在环境中。通过从命令行运行 firefox 来测试它,并观看 YouTube 视频。你应该能够听到声音,以及看到应用程序本身观看视频。另外,通过从命令行启动其他 GUI 应用程序进行测试。

用途: 它使用主机命令从输出中提取与主机名相关联的 IPv4地址,抓取与包含 Windows Host IPv4地址的行相匹配的地址,除了 IP 地址外剥离其余信息,然后运行该地址并将其打印到变量中,输出被修剪。然后,使用它作为字符串提供必要的 IP 地址,以便在允许转发 X11和声音输出的环境变量中使用。

如果其他方法对你不起作用(就像对我不起作用一样) ,希望它对你起作用。

大多数 CLI 应用程序可以从 BASH 提示符或 Windows 终端运行。如果你想创建一个快捷方式,大多数 CLI 应用程序都可以像下面的任何一个例子那样设置(在这种情况下,除了像 Links2这样的应用程序之外,不需要 X11转发) :

C:\Windows\System32\wsl.exe -e htop
C:\Windows\System32\wsl.exe lynx

如果您想为 Linux GUI 应用程序创建桌面快捷方式,除非您可以从 ~/获得环境变量。在启动程序之前要使用的 bashrc 文件,您必须使用以下模板创建快捷方式,并将程序名称放在{ yourprogram }的位置:

C:\Windows\System32\wsl.exe LIBGL_ALWAYS_INDIRECT=Yes IP=$(host `hostname` | grep -oP '(\s)\d+(\.\d+){3}' | tail -1 | awk '{ print $NF }' | tr -d '\r') DISPLAY=$IP:0.0 PULSE_SERVER=tcp:$IP {yourprogram}

对于许多程序,您不必放置完整的命令行。对于基于 PERL 或基于 PYTHON 的程序,有时必须添加 PERL 和 PYTHON 的路径,以及程序的完整路径,以便在 Linux 中使用 WSL2运行这样的 GUI 程序。对于我的一个 perl 程序,我必须这样做:

C:\Windows\System32\wsl.exe IP=$(host `hostname` | grep -oP '(\s)\d+(\.\d+){3}' | tail -1 | awk '{ print $NF }' | tr -d '\r') ; export LIBGL_ALWAYS_INDIRECT=Yes export DISPLAY=$IP:0.0 ; cd /mnt/c/Users/{yourusername}/Desktop ; /usr/bin/perl ~/wget-gui.pl

您可能需要进行一些试验,以使一些应用程序正常工作。例如,您可能需要 dbus 启动一个应用程序,并且需要在程序名称之前将该命令添加到快捷方式中。

C:\Windows\System32\wsl.exe LIBGL_ALWAYS_INDIRECT=Yes IP=$(host `hostname` | grep -oP '(\s)\d+(\.\d+){3}' | tail -1 | awk '{ print $NF }' | tr -d '\r') DISPLAY=$IP:0.0 PULSE_SERVER=tcp:$IP dbus-launch --exit-with-session gedit

在某些情况下,您可能必须使用较短的变量名。有些应用程序就是不能很好地工作,如果有的话,但是这种情况随着时间的推移正在改善。此外,不要尝试从命令提示符或 PowerShell 运行以上命令。它会抛出关于“ grep”不被识别为内部或外部命令的错误,等等。

下面是在我的 Windows10系统上运行的几个 Linux GUI 应用程序的屏幕截图,其中工作 X11在 WSL2上进行转发。

enter image description here

您可以在不禁用服务器上的访问控制的情况下连接到 X 服务器。在服务器上使用 xauth 生成 cookie,然后在 Linux 端使用 xauth 将其加载到 Linux 中。您可以从/etc/Resolv.conf 获取服务器 IP。下面是我的。巴希尔:

k=$('/mnt/c/Program Files/VcXsrv/xauth.exe' -f 'C:\Users\xxx\Documents\scratch.xauth' -i -n -q 2>/dev/null <<EOF
generate localhost:0 . trusted timeout 604800
list
quit
EOF
)
if [ -n "$k" ]
then
export DISPLAY=$(sed '/^nameserver/ {s/^nameserver\s\s*\([0-9][0-9.]*\)[^0-9.]*$/\1/;p;};d' /etc/resolv.conf):0
xauth -q add $DISPLAY . ${k##* }
export LIBGL_ALWAYS_INDIRECT=true
fi
unset k

我不想扰乱公众对 x 服务器和 Windows 防火墙的访问。我的解决方案是使用带 X 转发的 ssh (也适用于 VirtualBox)。另外,WSL 可以从主机自动转发到客户侦听套接字,所以我不关心实际上哪个 IP 被分配给了客户。

步骤如下:

  1. 安装 VcXSrv。使用所有默认值运行它,但是将 Display number 设置为0(如果没有 X 实例正在运行,-1将选择0)。不要在其中启动任何客户端(这样做的好处是可以在同一个 X 服务器实例上启动更多应用程序)。
  2. 打开 WSL 并配置 ssh 服务器。对我来说就像 sudo service ssh start一样简单。使用命令行创建 Windows 快捷方式: wsl sudo service ssh start
  3. 为 Windows 安装 Git。我使用它实际上只是因为它的 ssh 版本能够使用 ssh -f进入后台。Windows 版本的 ssh 在这个特性上有错误,否则它不需要进入后台或者使用 ssh -n就可以正常工作。
  4. 配置从 Git-Bash 到客户端的无密码登录。此时 ssh user@127.0.0.1应该可以工作,因为主机端口被转发给来宾机。
  5. 从 Git-Bash 验证 X 转发工作: DISPLAY=127.0.0.1:0 ssh -Y user@127.0.0.1 xeyes。我认为每个 X 发行版都安装了 xeyes。
  6. 在 WSL 中安装您选择的文件管理器或终端。例如,pcmanfm。创建 Windows 快捷方式: "C:\Program Files\Git\git-bash.exe" -c "DISPLAY=127.0.0.1:0 ssh -Y -f user@127.0.0.1 'bash -l -c pcmanfm >/dev/null 2>&1'"。这里的 bash -l标志有助于建立环境,这可能是或可能不是重要的取决于你运行的应用程序。

当然,我可以通过使用 VcXSrv 内置的 ssh 客户端在不使用 git-bash 的情况下做同样的事情,但是它需要将 ssh 键转换为 PuTTY 格式,而且我已经安装了 git-bash。而且,对于内置的客户端显示重用对我来说也不起作用。

正如其他人指出的那样,我想出了一个在 windows 10上使用 vxcsrv 的解决方案。

XServer Windows-WSL1 & WSL2:

安装 X-Server Windows

Https://sourceforge.net/projects/vcxsrv/

在 WSL 发行版中设置前向显示

配置显示 :

  • 如果你运行 WSL1:
export LIBGL_ALWAYS_INDIRECT=1
export DISPLAY=localhost:0
  • 如果你运行 WSL2:
export LIBGL_ALWAYS_INDIRECT=1
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

然后(安装 x11-apps) :

sudo apt update
sudo apt install x11-apps

在 Windows 上启动 XLaunch

  • 多个窗口
  • 没有客户
  • 禁用原生 opengl
  • 禁用访问控制

测试一下

在 wsl 中: 输入 xcalc-Calculator 应该在 Windows10中打开

如果一切顺利的话

并且您希望在您的 wsl 发行版中保存这些设置,请将它们存储在 ~/.bashrc中。

sudo nano ~/.bashrc

复制两行(从 在 WSL 发行版中设置前向显示-配置显示) ,两个结束并保存它。

添加到自动启动

  1. 运行对话框参见在 Windows 上启动 XLaunch
  2. 保存配置
  3. 按 Windows + R
  4. 输入: shell: start
  5. 将保存的配置: * . start (在步骤2中生成)复制到此文件夹(步骤4)

现在将通过 Windows 启动来启动 XServer。

我用它来做活性氧,对我有用。

我的 XServer 不能在互联网上使用,因此可以禁用访问控制。

我的错误在于,在 xserver 运行于 windows 上时,我使用了 linux wsl2实例的名称服务器。因此 DISPLAY 变量必须设置为我的 windows ipv4地址。 只需在 powershell 或 cmd 中键入 ipconfig,然后使用 ipv4 ethernet address

我还经历了从 WSL 打开 X11GUI 的困难。

我有一个问题检测正确的 IP,有时 X11服务器采取怪异的偏移,有时出现随机0-17。

我编写了下面的脚本来自动处理这个问题,但是它只有很少的依赖项:

  • 这是测试和运行在 CentOS7图像
  • 在你的 linux 发行版上安装 X11-apps
  • 安装“超时”应用程序
  • 执行 abc0脚本。注意 来源! 你需要在你运行的 shell 上设置显示环境变量。
  • 只通过“ Windows 终端”或 WSL shell 中包含窗口“ PATH”的内容运行该脚本。例如,在 windows 提示符“ cmd”中,这不是默认值。
  • 显然要确保您的 X11服务器具有完全访问权限(“ xhost +”或“ X11远程访问”已满)

无需多说,下面是脚本源代码:

#!/bin/bash


start_index=$1
start=${start_index:-0}
# check current settings
declare -i stop=0
if [ ! -z "$DISPLAY" ]; then
timeout 1s xset -display $DISPLAY q &> /dev/null;
[[ "$?" -eq 0 ]] && echo "Already Set to $DISPLAY" && stop=1;
fi


# scan displays 0-17
for port in $(seq $start 17);
do
[[ 1 -eq $stop ]] && break;
grp="ipconfig.exe | grep IPv4 | tr -d '\015' | sed 's#.*: \(.*\)\$#\1:${port}.0#;'"
for ipd in $(eval $grp)
do
echo Trying $ipd;
timeout 1s xset -display $ipd q &> /dev/null;


# command was sucessful
[[ "$?" -eq 0 ]] && export DISPLAY=$ipd && echo $ipd was set && stop=1;


##echo "Trying next IP...";
done
done

Windows 11 ,以及 视窗1022H2 (编号2311)和更高版本,包括 WSLG. It 很有效TM

VGPU (http://downloadcenter.Intel.com/download/29526”rel = “ nofollow noReferrer”> Intel = “ https://www.AMD.com/en/support/kb/release-note/rn-rad-win-wsl-support”rel = “ nofollow noReferrer”> AMD < a href = “ https://developer.Nvidia.com/cuda/wsl”rel = “ nofollow noReferrer”> Nvidia )的驱动程序是 建议

“系统信息”应用程序将告诉您当前的构建号。


注意: WSL1与 WSLg 不兼容。新的 WSL2实例将 工作而已TM。

现有的 WSL2系统需要“更新”:

  1. 在管理 PowerShell 中: wsl --update
  2. wsl --shutdown强制重新启动 WSL

不要忘记删除任何其他修改 DISPLAY,你可能已经作出。

Proof that it works

Windows10的2021年答案

如果从 Resolv.conf 获取 IP 不起作用,请检查这个答案。

使用以下命令在 WSL2中查找 Windows IP 地址(是的,linux 中的. exe 文件) :

ipconfig.exe

使用下面的命令来设置显示(使用 IP 地址填写您的 IP 地址) :

export DISPLAY=YOUR_IP_ADDRESS:0

检查 GUI 应用程序是否正常工作。

每种情况下自动化程度可能略有不同,但我将举例说明:

ipconfig.exe | grep 'IPv4 Address' | grep '10\.' | cut -d ":" -f 2 | cut -d " " -f 2

说明: 我找到了所有的 IPv4地址(在我的案例中是3个 IP 地址)。我知道我的 IP 只能从“10”开始所以我使用 second grep 选择了这一行。接下来,我处理了整个行,以获得 IP 只。