【ROS Rviz报错】 WSL下 RViz 无法连接 X-Server (qt.qpa.xcb: could not connect to display) (Can‘t open display)

问题描述

在 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 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值