WSL 环境下 RViz 无法连接到 Windows X Server
问题描述
在 WSL 终端中尝试启动 RViz (rviz
) 或其他 X 图形应用程序(如 xeyes
)时失败,终端反复输出如下错误信息:
rviz报错
qt.qpa.xcb: could not connect to display 192.168.163.1:0.0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.
Aborted (core dumped)
xeyes报错
Error: Can't open display: 192.168.163.1:0.0
注:虽然
192.168.163.1
可以从 WSL 正常ping
通,但图形界面始终无法连接;而同样的配置在之前是可用的。
我的环境:
Windows 11 + WSL2 + Ubuntu 20.04 + ROS 1 Noetic +VcXsrv
参考资料:
WSL Error: Can‘t open display
问题解决
为排查和解决该问题,建议从以下几个方面逐一测试。如果所有方法仍无法解决,可参考 WSL Error: Can‘t open display 中的进一步分析方法。
1. 防火墙阻碍
- 请确保 Windows 防火墙已关闭,或已明确允许 VcXsrv 的通信权限。
- 防火墙可能会阻止 X Server 与 WSL 的连接,造成
Can't open display
错误。
2. 代理干扰
- 关闭所有 VPN 或系统代理工具,它们可能干扰 WSL 与 Windows 主机之间的网络配置。
- 关闭代理后,在 PowerShell 中执行以下命令以重启 WSL:
wsl --shutdown
- 然后重新打开 WSL 并重新测试。
3. VcXsrv 配置检查
- 使用 XLaunch 启动 VcXsrv,并勾选 “Disable access control”,以允许来自任何来源的连接。
- 使用以下命令确认 VcXsrv 是否在正确监听 X11 端口:
netstat -ano | findstr ":6000"
必须确认 VcXsrv 正在监听 6000 端口,否则 WSL 无法连接。
4. DISPLAY 环境变量配置
以下是常见的 DISPLAY
配置方法,请在每次修改后,用 xeyes
进行测试:
# 自动获取 WSL 内部 DNS 地址
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
# 使用 Windows 的 vEthernet(Default Switch) IP(通过 ipconfig 查看)
export DISPLAY=172.22.xx.xx:0.0
# 使用 Windows 的主机 IP 地址(常见如 192.168.xx.xx)
export DISPLAY=192.168.xx.xx:0.0
# 本地回环地址,适用于 WSL2 的端口转发机制
export DISPLAY=localhost:0.0
# X11 默认显示配置(较少成功)
export DISPLAY=:0.0
每次设置完 DISPLAY
后请执行以下命令测试:
xeyes
若 xeyes
能正常弹出窗口,说明显示连接已恢复正常;此后再尝试 rviz
即可。