Contents

使用xwayland运行ros+gazebo+rviz

Contents

在 Wayland 环境中,不能直接通过挂载 X11 Unix Socket 和设置 $DISPLAY 来显示 GUI 应用,需要借助 XWayland 提供的兼容机制。此外,还需用 xhost 授权容器内程序访问宿主的显示服务。

安装xwayland相关工具:

sudo pacman -S xorg-xwayland xorg-xhost

对于Debian系:sudo apt install xwayland x11-xserver-utils

拉取docker镜像:

docker pull osrf/ros:noetic-desktop-full
  • 1.授权访问
xhost +si:localuser:root

此命令允许本地用户 root(Docker 容器通常以 root 身份运行)访问 XWayland 提供的显示服务器。

若希望撤销授权,可在退出容器后执行 xhost -si:localuser:root

  • 2.启动docker

若未在docker组:

usermod -aG docker $USER

启动docker守护进程:

systemctl start docker

创建容器:

docker run -it \
  --env="DISPLAY=$DISPLAY" \
  --env="XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR" \
  --volume="$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" \
  --volume="/tmp/.X11-unix:/tmp/.X11-unix" \
  --device=/dev/dri \
  --group-add video \
  --net=host \
  osrf/ros:noetic-desktop-full \
  bash

$DISPLAY:X11 兼容显示地址,通常为 :0

$XDG_RUNTIME_DIR:Wayland Socket 所在路径,通常为 /run/user/1000

$WAYLAND_DISPLAY:Wayland socket 文件名,一般是 wayland-0

在容器中执行 source /opt/ros/noetic/setup.bash && roscore,并在另一个终端执行 rviz即可验证效果

Related Content