在VSCode配置的ssh_config
文件中,已经加入了ForwardX11 yes
和ForwardX11Trusted yes
。
例如:
Host b450
HostName 192.168.3.89
User root
Port 22
ServerAliveInterval 60
ForwardX11 yes
ForwardX11Trusted yes
本地也安装了VcXsrv,监听localhost:0.0
,但是远程还是会报cannot open display:
。
发生这个问题的根本原因在于,Windows中没有配置DISPLAY
环境变量。下面详细解释一下:
该变量指定了图形应该在哪个设备上显示,由于VSCode用的是Windows中的SSH客户端,它读取的是Windows系统中的环境变量,只有在Windows中设置了DISPLAY
,这个SSH才知道通过ssh -X
转发的X11应该打到本地的哪个设备上,此时本地的VcXsrv才会接收到信息。而远程机器的DISPLAY
是ssh自动设置的,本质上是ssh通过指定远程计算机的X11显示到哪(通常是localhost:10.0
),从而使得ssh可以直接从这里读取信息,然后转发到本地计算机设置的DISPLAY
上。
因此我们在Windows的PATH中配置DISPLAY=localhost:0.0
即可(要与VcXsrv的配置相同)。
此外,也需要检查一下远程计算器
/etc/ssh/sshd_config
配置了X11Forwarding yes
(通常默认是打开的)。
注意:如果仍然不行,请检查修改VSCode配置的
ssh_config
文件后,远程服务器上的VSCode Remote连接是否重新连过,如果没有,SSH其实一直是没有断开的,新增加的SSH X11配置也就没生效,需要在VSCode中执行Remote SSH的kill命令重启VSCode Remote才行!
最后再提一点,我们通常会在WSL中配置export DISPLAY=localhost:0.0
,目的是给WSL配置X11应该显示到哪,这样配合VcXsrv读取这里的信息,即可实现WSL显示X11。
Comments
注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。