容器
图形界面
Xserver
采用 ROS 官网的教程
这里相当于是将容器的图形信息发送给宿主的 Xserver 然后显示在你的电脑屏幕上。
- 首先需要打开主机 Xserver 权限:
- (最简单方式) –
xhost +local:root
但是这样电脑可能受到其余干扰
- 添加对应的用户
xhost +local:`docker inspect --format='{{ .Config.Hostname }}' $containerId`
- 启动容器:
XAUTH=/tmp/.docker.xauth
if [ ! -f $XAUTH ]
then
xauth_list=$(xauth nlist :0 | sed -e 's/^..../ffff/')
if [ ! -z "$xauth_list" ]
then
echo $xauth_list | xauth -f $XAUTH nmerge -
else
touch $XAUTH
fi
chmod a+r $XAUTH
fi
docker run -it \
--privileged \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--env="XAUTHORITY=$XAUTH" \
--volume="$XAUTH:$XAUTH" \
--runtime=nvidia \
--network=host \
<image name> \
bash
docker run
命令中的 --network=host
参数需要和 --privileged
一同使用;使用前者目的是使容器和宿主使用相同的网络,后者是为了避免 dbus error, 无法打开 Gazebo
等软件。当然,两个参数都是 Optional
。
这个方法缺陷在于只能在 Ubuntu 上使用?换到 MacOS 或者 Windows 没有 Xserver 就用不了了。