我的 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 地址。)