WSL下ROS Melodic启动rviz报qt.qpa.screen无法连接X display错误
问题排查与解决步骤
你Gazebo输出的ALSA音频报错、Ignition Fuel证书报错均不影响X Server功能,无需针对这两个报错调整。本次rviz启动失败核心是运行时环境变量缺失、X Server访问权限不足两个原因,按以下步骤排查即可:
1. 补全XDG_RUNTIME_DIR环境变量
对应报错中XDG_RUNTIME_DIR not set的提示,执行以下命令:
export XDG_RUNTIME_DIR=/tmp/runtime-root mkdir -p $XDG_RUNTIME_DIR chmod 0700 $XDG_RUNTIME_DIR
如需永久生效,可将上述命令追加到~/.bashrc文件中,每次启动终端自动加载。
2. 确认运行rviz的终端DISPLAY变量生效
很多用户会在不同终端分别启动Gazebo和rviz,新终端不会继承之前设置的环境变量,先在运行rviz的终端执行:
echo $DISPLAY
输出格式应为x.x.x.x:0,与启动Gazebo时的输出一致,如果为空或值错误,重新执行DISPLAY设置命令:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
补充:如果是WSL1环境,可以直接固定DISPLAY为
export DISPLAY=127.0.0.1:0,不需要每次动态读取宿主机IP。
3. 调整Xlaunch配置
rviz依赖的Qt框架对X Server权限要求更高,之前能启动Gazebo不代表Xlaunch配置适配rviz:
- 关闭当前运行的Xlaunch,重新打开配置
- 前三步保持默认设置,到最后一页配置项时,勾选「Disable access control」
- 在「Additional parameters for VcXsrv」输入框中填入
-ac -nowgl,再启动X服务
4. 适配OpenGL渲染配置
执行以下命令调整Qt和OpenGL渲染参数,规避WSL兼容性问题:
export LIBGL_ALWAYS_INDIRECT=1 export QT_X11_NO_MITSHM=1
5. 开放root用户X Server访问权限
由于你使用root账户登录WSL,需要额外开放访问权限:
xhost +local:root
所有配置完成后再执行rosrun rviz rviz即可正常启动。
内容的提问来源于stack exchange,提问作者ChocoFudge
相关产品推荐
相关产品推荐

