这一篇接续上一篇docker中使用vncviewer打开图形化界面的操作,在能打开单一界面进行仿真后,我发现了一个问题,就是按照相同的操作试图打开第二个图像化界面,在x11vnc -display :99 -forever -shared -create修改显示,给多个界面分配不同的端口号,但是打开的窗口永远是同一个,vncviewer界面上的窗口号是同一个,在其中一个窗口中输入命令,另外一个窗口也会看到同样的操作,显然,这不是我想要的操作。在查阅了大量资料后我发现了一个办法能够打开多个不同的图形化界面,在这里分享给大家:
1. 安装依赖
首先在docker环境中把与x11vnc相关的独立显示依赖全部装上:
apt-get update && apt-get install -y \xvfb xfce4 x11vnc dbus-x11 policykit-1
apt-get update && apt-get install -y \dbus-x11 \policykit-1 \systemd \sudo \xfce4-terminal
2.使用 Xvfb
(虚拟帧缓冲)创建多个虚拟 X 显示
第一个图像化窗口
在docker里启动多个终端,输入以下命令
a.启动X显示,这里可以设置启动的端口分辨率,按照自己电脑屏幕分辨率设置就好
Xvfb :0 -screen 0 1024x768x24 &
或者:Xvfb :0 -screen 0 1024x768x24 -ac +extension GLX +render -noreset &
b.启动 x11vnc
x11vnc -display :0 -rfbport 5900 -forever -shared -bg
或者:x11vnc -display :0 -auth ~/.Xauthority -rfbport 5900 -forever -shared -bg
c.在 Xvfb 中直接启动一个终端测试,同样启动一个终端,输入
DISPLAY=:0 xterm &
d.在宿主机中启动命令行,输入以下命令
vncviewer localhost:5900
第二个图形化窗口
操作与第一个相同,不过需要修改显示号和端口号,需要开启多个图形化窗口的就如法炮制即可
Xvfb :1 -screen 1 1024x768x24 &
x11vnc -display :1 -rfbport 5901 -forever -shared -bg
DISPLAY=:1 xterm &
vncviewer localhost:5901
这里可以看到成功连接,不过显示了设置桌面分辨率失败。
我这里在打开的命令行中运行gazebo和rviz基本没有问题,需要解决的分辨率和图形窗口位置的问题,经过尝试,目前只探索到在启动vncviewer之后的内部终端,强行调整窗口大小和位置,命令如下:
DISPLAY=:0 xterm -geometry 800x400+0+0 &
-
800x40
:窗口宽度 800 列字符,高度 400 行字符。 -
+0+0
:窗口左上角位于屏幕坐标 (0, 0) 处
另外:如果存在端口占用的情况,那么就使用下面的命令把相关进程干掉即可
lsof -i :5900
kill -9 <PID>
pkill Xvfb