解决Docker容器中出现的错误“Pangolin X11: Failed to open X display”
1 问题描述
按照iKalibr文档[1]^{[1]}[1]中的流程,创建Docker容器,
# Allow local Docker connections to the X server.
# This command grants local Docker containers permission to access your host machine's X11 display.
xhost +local:docker# Run the Docker container
docker run -it --device=/dev/dri:/dev/dri --env="XDG_RUNTIME_DIR=/tmp" --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --name your_container_name ulong2/ie_kalibr_image:latest
然后在容器中运行程序,
roslaunch ikalibr ikalibr-learn.launch
roslaunch ikalibr ikalibr-prog.launch
终端出现错误,
[C]-[918]-[10:32:25.095] unknown error happened: 'Pangolin X11: Failed to open X display'
[ikalibr_learn-2] process has finished cleanly
程序被迫终止。
2 解决方法
尝试了很多方法,都没解决上述问题。最终,按照[2]^{[2]}[2]的方法,成功解决。该错误的来源是创建容器时,参数配置错误。如果需要使用X11的图形界面进行可视化,正确创建容器的流程如下。
xhost +Local:*
xhost
sudo docker run -it --rm --net=host --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:ro ulong2/ie_kalibr_image:latest
# ulong2/ie_kalibr_image:latest为镜像名称,根据实际情况更改该名称即可
# --rm为可选项,可删除
验证方法:
# 在容器中安装软件
apt install x11-apps
# 在容器中启动时钟的图形界面
xclock
如果显示时钟图形界面,则表明在Docker容器中可实现图形可视化。
参考文献
[1] iKalibr
[2] Docker, X11 fails to open display
