使用docker快速搭建ros2并安装桌面环境启用远程VNC访问(同样适用于为docker Ubuntu容器安装桌面环境)


分类:i 学术之家       作者:Caq98i       发布时间:2023-11-30       更新时间:2024-03-08 阅读量:470    


引言:最近为了学习ros2,不得不搭建一个ros2环境,但由于大家都知道的某些网络原因,下载Ubuntu和ros2着实有点慢,还动不动就报错(其实更多的是不想折腾我那快要退休的笔记本)。于是在一台美国的VPS上使用docker部署了ros2的环境,从拉取镜像到安装桌面环境,再到开启VNC连接上,也就10分钟左右的时间(忽略中途各种踩坑试错,干废了多个容器的艰苦征程),本文用于记录一下安装过程和踩过的坑。



① 准备一台VPS,大带宽的那种,我这里使用的是一台3核2.5G,带宽1 Gbps的VPS:racknerd 洛杉矶(Los Angeles) DC-02数据中心特价VPS

安装完ROS2和桌面环境大致硬盘占用增加了4~5 GB

 

② 使用docker一键安装脚本安装docker:

curl -sSL https://get.docker.com/ | sh

使用此脚本同时也会安装 docker compose,本文基于docker compose配置docker容器,同样也可使用docker run命令部署容器,请自行转换。

 

③ 创建一个项目文件夹(我这里创建的是 servers_ros)用于存放所有的docker配置文件,在此文件夹中创建一个ros2文件夹和一个 docker-compose.yml文件。ros2文件夹用于存放ros2容器相关的文件。

docker-compose.yml 的内容为(.yml格式对缩进敏感,注意缩进空格数):

version: '3.9'
services:
  ros2:
    image: althack/ros2:iron-full    # 使用的docker镜像
    container_name: ros2
    restart: unless-stopped
    stdin_open: true
    privileged: true     # 必须设置,不然VNC连接桌面是灰屏
    tty: true
    volumes:
      - ./ros2/:/my_Proj/
    ports:
      - "7023:22"         # ssh 端口
      - "5901-5910:5901-5910"  # VNC端口
    entrypoint: bash

 

这里是使用的 althack/ros2 - Docker Image 提供的镜像,iron 是 ros2 的某个发行版,建议使用 -full 镜像,可以访问这个连接获取更多镜像。这里也做了端口映射和文件挂载,容器中的 my_Proj 目录就是宿主机的 ./ros2 目录。

这个ros2镜像其实就是在Ubuntu镜像中增加了ros2,所以后边介绍的docker容器桌面环境的搭建同样也适用于 Ubuntu 容器。

 

④ cd 到项目文件夹,使用 docker compose 命令启动容器:

docker compose up -d

 

下面介绍进入ros2容器并安装桌面环境


进入ros2容器:

docker exec -it ros2 bash

 

安装桌面环境:

apt update
apt install nano xorg xfce4 tightvncserver

其中,nano 是一个文本编辑器,xorg 是 xfce4 桌面的依赖,tightvncserver 是一个VNC服务器

注:只能安装xfce4桌面,踩坑了多个桌面环境,只有这个能在docker容器中使用,其他的灰屏,无法加载桌面,只显示鼠标,甚至鼠标是一把×

 

创建一个新用户(非root用户,普通用户)用于VNC登录:

useradd -m caq98i
passwd caq98i

切换到用户caq98i:

su caq98i

 

启动VNC服务器并完成初始配置:

vncserver

首次执行该命令后,系统会要求你设置一个安全密码并确认(密码长度不能超过8个字符,建议6-8个字符)并创建初始配置文件。

参考资料:Linux(Debian系统)配置VNC远程桌面访问——使用TightVNC建立VNC服务器

 

关闭运行在 5901 端口上的VNC服务:

vncserver -kill :1

 

修改 xstartup 配置文件,可以使用 nano、vim 等文本编辑软件打开它(下面是使用 nano打开的):

nano ~/.vnc/xstartup

打开文件后,在最后一行添加:

startxfce4 &

这里的 startxfce4 & 是告诉 VNC 服务器启动 xfce 桌面环境。

注:nano 文本编辑器的使用:编辑完成后使用 CTRL + X 退出,然后它会询问你是否保存,按 Y 确认,最后按 Enter;vim编辑器的使用可以参阅:Linux系统中最常用的文本编辑器:Vim使用入门

 

再次启动vnc服务:

vncserver

 

至此,服务端就搭建完毕了,接下来可以使用 VNC 客户端连接(比如RealVNC)。参考:Linux桌面系统配置VNC远程桌面访问——使用VPS商家提供的VNC连接(第二部分)

 

本文的 docker compose 配置文件中也做了ssh的端口映射,可用于配置ssh连接ros2容器,可参考:Linux系统安装SSH并启动SSH连接

 

其他杂谈:

使用VNC登录远程桌面后,在桌面环境中启动的终端默认是sh,需要执行bash命令进入bash后才能使用下面这条命令配置 ros2 的环境变量:

source /opt/ros/iron/setup.bash

这里的 iron 视不同的ros2发行版而不同,可以 cd 到 /opt/ros/ 目录下看看。

也可以将配置环境变量的的指令写入"~/.bashrc“文件,那么每次新启动bash时就不需要在手动配置环境了:

echo "source /opt/ros/iron/setup.bash" >> ~/.bashrc

 

关于VNC连接后,无法复制粘贴的问题:

可以尝试在ros2容器中安装 autocutsel解决:

apt install autocutsel

然后,修改 ~/.vnc/xstartup,在启动桌面环境命令的上一行添加:

autocutsel -fork

最后,重启VNC服务端即可:

vncserver -kill :1
vncserver

重新登录桌面后,可能在终端中还是不能使用复制粘贴,这时只需要去文件系统里边,随便找个文件或文件夹右键后点击“Copy”激活一下。

 

关于 RealVNC Viewer 的下载与使用,可以参考:

Linux桌面系统配置VNC远程桌面访问——使用VPS商家提供的VNC连接

 

关于 RealVNC Viewer 连接后可能出现的花屏问题,可以参考:

RealVNC Viewer 连接远程桌面花屏解决方案

 

关于使用SSH连接ros2容器的问题:

本案例中,已经通过端口映射将宿主机的7023端口映射到了ros2容器的22端口(SSH的默认端口),仅需在ros2容器中安装ssh服务端即可使用任意ssh连接工具连接上这个ros2容器。

参考:
Linux系统安装SSH并启动SSH连接


捐赠通道,感谢!🦀🦀


          support a 🍕


留言与评论







限时特惠促销