Ubuntu无法使用X服务器及VcXsrv连接报错“Can't open display: localhost:0”的解决求助
Hey,我之前也碰到过一模一样的问题,折腾了好一阵子才搞定,给你分享几个我亲测有效的排查和解决步骤:
检查VcXsrv的启动配置
启动VcXsrv的时候,一定要勾选「Disable access control」选项!这是最容易忽略的点,Windows默认会限制外部(这里指WSL的Ubuntu)的连接请求,不勾这个的话根本连不上。如果已经启动了VcXsrv,先关掉重新启动,确保这个选项被选中。确认Ubuntu的DISPLAY环境变量设置
打开Ubuntu终端,先输入echo $DISPLAY查看当前的DISPLAY值:- 如果输出不是
localhost:0.0或者:0.0,先临时设置试试:export DISPLAY=localhost:0.0,然后再尝试启动GUI程序。 - 想要永久生效的话,编辑你的shell配置文件(比如
~/.bashrc或者~/.zshrc,取决于你用的是bash还是zsh),在文件末尾加上一行export DISPLAY=localhost:0.0,保存后执行source ~/.bashrc(对应你的配置文件)让设置立刻生效。
- 如果输出不是
检查Windows防火墙权限
确保VcXsrv被允许通过Windows防火墙:打开Windows Defender防火墙的「允许应用通过防火墙」设置,找到VcXsrv,确认它对应的私有网络(本地使用的话私有网络足够)选项被勾选。如果找不到,点击「更改设置」→「允许其他应用」,手动添加VcXsrv的程序路径(一般在C:\Program Files\VcXsrv\vcxsrv.exe)。尝试用Windows本地IP代替localhost
有时候localhost的解析会出问题,你可以换成Windows的本地IPv4地址试试:- 在Windows的命令提示符(cmd)里输入
ipconfig,找到你的以太网或WLAN的IPv4地址(比如192.168.3.10)。 - 在Ubuntu终端里设置
export DISPLAY=你的WindowsIPv4地址:0.0(比如export DISPLAY=192.168.3.10:0.0),再尝试启动GUI程序。
- 在Windows的命令提示符(cmd)里输入
查看VcXsrv的日志信息
启动VcXsrv时会弹出一个日志窗口,里面会记录连接请求和错误信息。如果有连接被拒绝的日志,那基本就是权限或者防火墙的问题,可以根据日志提示针对性调整配置。重启相关服务
有时候单纯的重启就能解决问题:先关掉VcXsrv,然后在Windows的cmd里执行wsl --shutdown关闭WSL实例,等几秒后重新打开Ubuntu终端,再启动VcXsrv试试。
我当时就是因为没勾选「Disable access control」加上防火墙没放行VcXsrv,按上面的步骤调整后就顺利解决了,你可以一个个试过来,应该能搞定这个报错!
备注:内容来源于stack exchange,提问作者Kaustubh Maladkar

