ROS项目远程显示报错:qt.qpa.xcb无法连接显示,求解决
解决ROS远程显示报错与无屏幕流数据访问方案
一、解决turtlesim的X11转发报错
报错根源
你遇到的qt.qpa.xcb类错误,本质是树莓派无权限访问Windows虚拟机的X服务器,或X服务器配置未开放监听。
分步修复
虚拟机端配置X权限
在Ubuntu虚拟机中执行,开放树莓派的X访问权限:xhost +树莓派IP地址临时测试可直接用
xhost +开放所有权限(不建议长期使用),然后查看当前DISPLAY变量:echo $DISPLAY记住输出值(通常是
:0或localhost:10.0)。树莓派端开启X11转发并设置DISPLAY
必须通过带X11转发的SSH连接树莓派:ssh -X 树莓派用户名@树莓派IP在SSH会话中设置DISPLAY变量为虚拟机的IP+刚才记下的DISPLAY值:
export DISPLAY=虚拟机IP:0.0最后测试turtlesim:
rosrun turtlesim turtlesim_node补全依赖与防火墙检查
若仍报错,安装树莓派缺失的X11依赖:sudo apt install libxcb-xinerama0 libxcb-randr0 libxcb-util1同时开放虚拟机的X11默认端口(6000):
sudo ufw allow 6000/tcp
二、无屏幕流的ROS远程数据访问方案
如果不想用X11转发GUI,最简便的方式是分离节点运行:树莓派跑硬件驱动节点,虚拟机跑可视化节点,通过ROS网络直接传输数据。
配置步骤
统一ROS网络环境变量
- 树莓派和虚拟机都设置ROS主节点地址为树莓派IP:
export ROS_MASTER_URI=http://树莓派IP:11311 - 各自设置自身的ROS主机名:
树莓派端:
虚拟机端:export ROS_HOSTNAME=树莓派IPexport ROS_HOSTNAME=虚拟机IP
可将上述命令添加到
~/.bashrc,避免每次手动输入。- 树莓派和虚拟机都设置ROS主节点地址为树莓派IP:
验证网络连通性
树莓派启动roscore:roscore虚拟机中执行:
rostopic list能看到
/rosout等话题则说明网络正常。运行雷达与可视化节点
树莓派启动RPLidar驱动:roslaunch rplidar_ros rplidar.launch虚拟机启动rviz,添加
LaserScan话题即可直接查看雷达数据,无需任何桌面流传输。
内容的提问来源于stack exchange,提问作者Cooler Mann
相关产品推荐
相关产品推荐

