目录
写在前面
Windows系统
准备工作
使用样例
Ubuntu系统
准备工作
使用样例
总结
这篇文章解决的重点是,如何通过windows,或者ubuntu,访问服务器,并且把服务器的docker容器里的内容远程可视化出来。(或者压根用的是自己的电脑上面装有docker)如果你不是这个目的,那就不需要往下看了。
本身这个事情确实是比较麻烦,如果你的项目能不可视化,那最好。但如果非要可视化,可以参考一下我这篇文章的配置方法。当然,这只是其中一种配置方法,但并非唯一的配置方法。但是个人觉得这种方法比较简单。可以一试。
另外,这种方法并不能对docker进行桌面可视化,但是可以保证弹出的窗口是可视化的,例如gedit,gazebo,rviz这些内容。因为本人是做机器人相关行业,所以介绍自己的相关内容。
首先,需要有一个ubuntu服务器,里面已经配置好了docker。这是前提条件。我相信点进这篇文章的人,关注的重点并不是怎么安装docker的内容,因此,在这里不做过多的解释。
1.在windows系统下,下载安装MobaXterm: 下载地址
2. 打开MobaXterm,点击Setting:
3.将Setting->X11的相关设置修改为如下内容:
4.点击Start local terminal:
5. 登陆实验室服务器,指令为ssh:
6. 登陆以后,输入:
xhost+
解除Xserver的访问限制。
注意:
1.此步非常重要,每次登录服务器后需确保执行,否则后续运行算法时不能可视化界面,并且会报错: QXcbConnection: Could not connect to display localhost:10.0
如果屏幕输出: access control disabled, clients can connect from any host ,则配
置无误。
7. 登录以后,输入 :
xclock
如果显示图形化时钟,则说明配置无误。
1.本文所提供的测试样例docker镜像为 zkjoker/laserslam:v4 ,该镜像内部包含了ROS环境、
Cartographer、Gmapping以及Hector_slam等环境。
登陆服务器,在服务器中下载镜像:
docker pull zkjoker/laserslam:v4
2.输入如下指令,创建docker容器:
docker run --env="DISPLAY" --net=host --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --env="QT_X11_NO_MITSHM=1" -v /tmp/.X11-unix:/tmp/.X11-unix:ro -it --name visual_use -v /home:/out_home zkjoker/laserslam:v4 /bin/bash
关于这个指令,注:
1.可以将 /home 改为其他路径,实现把外部内容挂载至docker容器内部的 out_home 文件夹下;
2.可替换 zkjoker/laserslam:v4 为其他镜像名称;
3.可替换容器 visual_use 为其他名字;
4.指令中其他内容不要改动;
3. 输入如下指令,测试可视化:
bash /root/run_gmapping.sh
可弹出rviz环境以及gazebo环境,说明配置无误:
如果你不是用的服务器,用的是自己的电脑上面的docker,那准备工作里的步骤的东西都省掉了。直接从使用样例那里开始看。
注:
1. Ubuntu16.04、及18.04的非精简版一般会默认安装该软件, 应该在应用中查找该软件是否已被安装。
2. 如未安装,需要自行安装,参考教程为Ubuntu安装remmina_renhaofan的博客-CSDN博客
2.打开Ubuntu终端,ssh指令登陆服务器。
3. 登陆服务器后,输入如下指令:
vncserver -localhost no
可以观察到其中的端口号为 2 (这里可能每个人显示的都不一样)
......New 'lair-DGX-Station:2(zhaokai)' desktop at :2 on machine lair-DGX-Station......
4. 打开Remmina软件:
5. 点击左上角”+“号,将 Protocol 设置为 VNC-Virtual Network Computing ,输入服务器地址及账号密码,服务器地址后需要紧跟 “ :2 ” 端口号 (端口号2为操作3中得到,每个人可能不同,否则不能连接)。配置完成后,点击Connect进行连接。
6.登陆以后,即进入到服务器的虚拟远程桌面。界面如下图所示:
(注:如果你这里就是登不上去,也不要怕,因为前述介绍的是对服务器进行VNC虚拟桌面的内容,你也可以再搜搜,采用其他方式远程可视化服务器的桌面)
6. 登录后即进入到服务器的虚拟远程桌面。界面如下图所示:
点击左上角“Activities”, 搜索终端Terminal:
打开Terminal。
1.与windows下相同,本文所提供的测试样例docker镜像为 zkjoker/laserslam:v4 ,该镜像内部包
含了ROS环境、Cartographer、Gmapping以及Hector_slam等环境。下载镜像:
docker pull zkjoker/laserslam:v4
2. 需要在上述打开的Terminal中,先输
xhost+
注: 需要保证 xhost+ 的输入在创建容器之前,否则后续会报错,无法可视化docker容器中的
Gazebo等环境。
3. 使用如下指令,创建容器:
docker run --env="DISPLAY" --net=host --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --env="QT_X11_NO_MITSHM=1" -v /tmp/.X11-unix:/tmp/.X11-unix:ro -it --name visual_use -v /home:/out_home zkjoker/laserslam:v4 /bin/bash
注:
1.可以将 /home 为其他路径实现挂载至docker容器内部的 out_home 文件夹下;
2.可替换 zkjoker/laserslam:v4 为其他镜像名称;
3.可替换容器 visual_use 为其他名字;
4.指令中其他内容不要改动;
5.为节省内存,该容器测试完毕后记得将其停止并删除。
6.由于Remmina所创建的VNC虚拟桌面连接无法从外部复制指令,因此建议将上述指令在服务器账户内部创建txt文本进行保存,方便复制粘贴。
4. 与windows下的测试方法相同,输入如下指令:
bash /root/run_gmapping.sh
可弹出Rviz环境以及Gazebo环境,说明配置无误:
1.在实际使用过程中,先连接服务器,在登录服务器后,先输入 xhost+ 解除Xserver服务器的限制;
2.使用下述样例指令,创建docker容器,在容器中打开Gazebo、Rviz等软件,或使用gedit等指令均可
弹出可视化页面,具体指令使用方法与平常PC端无异。
docker run --env="DISPLAY" --net=host --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --env="QT_X11_NO_MITSHM=1" -v /tmp/.X11-unix:/tmp/.X11-unix:ro -it --name visual_use -v /home:/out_home zkjoker/laserslam:v4 /bin/bash
3. 如果中间涉及到了一些报错,可以请教一下公司运维,相信这些内容对他们来说是比较容易。
4. docker内部的gazebo会和宿主机上的冲突,所以同一时间只能打开一个。如果你非想在docker里面可视化gazebo,与此同时外部的宿主机服务器也想打开,那么参见我的这篇博文:
如何在一台电脑(服务器)上运行多个不同的ROS和Gazebo环境及程序_微鉴道长的博客-CSDN博客