我正在使用MobaXterm和WSL2作为终端和X客户端,我遇到了MobaXterm随机改变DISPLAY变量的问题。似乎在电脑启动时IP不变,但每天都在变化(或者每两天变化一次?
我一直在通过以下方式设置WSL2安装的DISPLAY变量。~/.bashrc
(所以它是持久的),就像MobaXterm启动屏幕上告诉我的那样(通常是这样的) 192.168.1.Y:0.0
,其中Y是一个不同的数字,似乎改变)。)
当我改变DISPLAY时,一切都能正常工作,直到有一天我收到一个错误的连接显示,我检查一下Y值DISPLAY位置已经改变。同样,我可以检查MobaXterm上面显示的 "你的DISPLAY被设置为......",然后通过~.bashrc手动更改,但我很想设置一次就能正常工作。
我的同事使用MobaXterm,他们的DISPLAY似乎一直设置为 "localhost",但我的DISPLAY似乎每次都显示某种完整的IP地址(会改变)。
有没有人熟悉这个问题,或者有什么办法可以解决这个问题?
在我的WSL2发行版上添加一个MobaXterm bash终端的例子。
$ xeyes
Error: Can't open display: 127.0.0.1:0.0
$ export DISPLAY=localhost:0.0
$ xeyes
Error: Can't open display: localhost:0.0
$ export DISPLAY=:0.0
$ xeyes
Error: Can't open display: :0.0
只要我设置 export DISPLAY=192.168.1.13:0.0
(这就是MobaXterm所说的DISPLAY现在的设置)。xeyes
显示良好。
有人还带领我找到了 MobaXterm文件:
默认情况下,MobaXterm Xserver会监听你所有的网络适配器。 旗帜信息会说你的DISPLAY环境被设置为":0.0",但这只是一个信息信息:这里打印出来是为了帮助用户在连接到远程服务器时设置他们的 "DISPLAY "环境变量。但是,嵌入式X11服务器监听所有的网络接口,而不仅仅是写入的那一个。你在 "DISPLAY "变量中看到的IP地址并不重要:因为MobaXterm X服务器监听你所有的网络接口,它也会监听第2、3、(...)个网络接口。例如,如果你的电脑有2个网络适配器(192.168.0.10和10.10.10.36)。MobaXterm说你的DISPLAY设置为 "192.168.0.10:0.0". 但是 X服务器真正监听的是 "127.0.0.1"(localhost)。192.168.0.10:0.0"(第一适配器)和 "10.10.10.36:0.0"(第二适配器)。
好吧,如果X服务器真的在 "127.0.0.1"(localhost)上监听,那么当DISPLAY(在WSL2发行版上)被设置为 127.0.0.1:0.0
或 localhost:0.0
?
WSL 1和WSL 2的主要区别是WSL 1在你的windows环境中运行,而WSL 2则在你的windows环境之外作为虚拟计算运行。
WSL 1与Windows环境下的主机共享网络,而WSL 2有自己的网络。特殊的IP地址127.0.0.1(localhost)总是指向你连接的机器。这就是为什么在WSL 1中,127.0.0.1会指向MobaXterm运行的windows环境(因为它们是同一台机器),但在WSL 2中,127.0.0.1会指向没有MobaXterm运行的Linux环境(因为它是一台不同的,尽管是虚拟的机器)。
你需要通过指定Windows机器的IP地址将WSL 2虚拟机指向Windows机器。这个IP地址是由Windows自己设置的,MobaXterm无法控制它。这就是为什么MobaXTerm唯一能做的就是从Windows中获取IP地址,并告诉用户它是什么,它自己不能把IP地址设置成静态的东西。
在大多数情况下,你可以确保Windows有一个静态的IP地址。在我的情况下,MobaXTerm显示的IP地址是我的windows机器从我的WiFi路由器获得的IP地址。为了给它一个静态的IP地址,我必须登录到我的路由器(在 http:/192.168.1.1),并告诉它总是给windows机器分配相同的IP地址。每个路由器的具体操作方法都不一样,通常在 "DHCP "设置中的某个地方。
IP范围为192.168.. 是一个本地网络,所以只有你网络中的计算机(你家)才能访问它。从问题中的地址看来,你也可以将路由器配置在 http:/192.168.1.1。. 这和我的192.168.1.1不同。