如何为 WSL 上的 X 访问定义 DISPLAY 变量?

如何为 WSL 上的 X 访问定义 DISPLAY 变量?

我的 WSL 在 .profile 上为 x windows 定义了 DISPLAY 变量,检查 resolv.conf 上的 IP。

为什么 ?如果我没记错的话,resolv.conf仅用于定义要使用的DNS,并且DISPLAY应该指向我的本地IP。事实上,由于使用 VirtualBox、Vmware 和 WSL,我的 Windows 计算机上有几个(大量)IP,它们执行自己的虚拟以太网卡,并且使用此配置文件默认定义的 DISPLAY,它不起作用,我必须手动更改它并分配我在主以太网卡上的值(我必须执行导出 DISPLAY=192.168.1.8:0.0 才能让我的 X 工作并覆盖我的 DISPLAY 变量的值 192.168.1.1:0.0当我的 WSL 启动时自动获取)。

另请注意,如果我找到我的 NATed Ip(使用 Whatismyip.com 来查找我在连接到 Internet 时使用的公共 IP),并且我尝试将我的显示器设置为该 IP,以便我可以在远程计算机上调用 xterm在AWS上,它也不起作用。为什么?如果我对远程计算机执行 ssh -X 并将我的显示器手动设置为 192.168.1.8:0.0,就会出现这种情况。我想知道以下原因:a).- DISPLAY 通过配置文件自动设置不正确 b).- 如果在 DISPLAY 变量上手动设置,我的机器的公共 IP 将无法工作 c).- 前面提到的 IP (192.168.1.8:0.0)工作正常,而不是公众的。

一些额外的上下文数据:

我目前的个人资料有:

export LIBGL_ALWAYS_INDIRECT=1
export DISPLAY_NUMBER="0.0"
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):$DISPLAY_NUMBER

我的 resolv.conf 是:

nameserver 192.168.1.1
nameserver 192.168.1.1
nameserver fec0:0:0:ffff::1
search gorostidi-home.lan

我的 ifconfig:

andres@DCT00175:~$ ifconfig
eth3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.1  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::1bd8:2cef:f202:d18b  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 0a:00:27:00:00:0a  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.28.48.1  netmask 255.255.240.0  broadcast 172.28.63.255
        inet6 fe80::f389:4534:305:8a86  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:15:5d:16:f9:f0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.250.1  netmask 255.255.255.0  broadcast 192.168.250.255
        inet6 fe80::b10b:16fd:43b6:c962  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 0a:00:27:00:00:10  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

**eth6:** flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.8  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2669:762c:cd7f:3da6  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 70:b3:d5:5c:0c:a1  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.115.1  netmask 255.255.255.0  broadcast 192.168.115.255
        inet6 fe80::337b:d856:e3cf:dd85  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:50:56:c0:00:01  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.23.1  netmask 255.255.255.0  broadcast 192.168.23.255
        inet6 fe80::6ce0:a4cb:44b5:b58f  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:50:56:c0:00:08  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth11: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.24.16.1  netmask 255.255.240.0  broadcast 172.24.31.255
        inet6 fe80::6319:6b32:8b9c:feeb  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:15:5d:18:6c:7c  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 1500
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0xfe<compat,link,site,host>
        loop  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wifi2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.223.100  netmask 255.255.255.0  broadcast 192.168.223.255
        inet6 fe80::7f7d:9903:bd01:6cb6  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 36:c9:3d:82:2c:29  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我当前的 DNS 和当前路由器是 192.168.1.1(在 resolv.conf 上设置)。

感谢您的帮助!

答案1

.profile您可以根据需要更改您的设置。如果当前的显示设置.profile不适合您,那么您应该将其更改为实际有效的设置。

a).- 配置文件自动设置的显示不正确

您的设置比您当前使用的 WSL 发行版的创建者预期的要复杂,因此它的默认设置不适合您。

nameserver仅当 IP 引用运行实际 X11 服务器和 DNS 解析器/代理服务器的本地主机时,从线路获取本地 IP 地址resolv.conf才有意义。这可能是通用安装中的默认设置,但您的自定义可能会打破该假设。

无论实际原因是什么,事实仍然是DISPLAY您的当前设置.profile不正确为你,您应该调整它们以更好地适合您的实际情况。

正如弗雷迪在评论中所说,您的设置看起来可能是从https://superuser.com/a/1476160/990044或其他一些来源,当时 WSL 尚未为其自己的 X11 服务器提供图形支持,并且必须搭载在 Windows 主机操作系统上运行的 X11 服务器。如果您的 WSL 是最新的,则.profile在当前的 WSL 2 中可能完全不需要进行这些设置。

b).- 如果在 DISPLAY 变量上手动设置,我的机器的公共 IP 将无法工作

您的 NAT 没有端口 6000/TCP 的端口转发规则(端口号 = 显示号 + 6000),您的本地 X11 服务器未侦听端口转发指向的 IP 地址,和/或您的本地软件防火墙(包括Windows 防火墙)正在阻止该 IP 地址的端口 6000/TCP 的传入流量。

c).- 前面提到的 IP (192.168.1.8:0.0) 工作正常,而不是公共 IP

在该 IP 地址中,没有防火墙阻止端口 6000/TCP,并且您的本地 X11 服务器正在侦听该端口,因此 X11 客户端可以连接到 X11 服务器并使用该地址访问您的显示器。


在X11规范中,冒号前面的东西最初被指定为主机名(看man X)。后来,当在不一定具有可解析主机名的个人工作站上运行 X11 服务器时,还添加了接受 IP 地址的功能,这已成为相当普遍的事情。 (如果您需要在某些旧系统上处理旧的 X11R5 客户端软件,您可能会发现它仍然不接受 DISPLAY 中的 IP 地址。)

相关内容