云服务器Docker运行ROS,并通过VNC连接

2023-05-16

云服务器Docker运行ROS,并通过VNC连接

  • 使用华为云服务器
  • 系统Ubuntu18
  • VNC为x11vnc

安装图形界面

选择Xubuntu界面,占用资源较少,参考链接ubuntu安装gui

  1. 直接安装即可
    sudo apt install xubuntu-core
  2. 安装完成后可能需要启动
    startx

安装并启动x11vnc

开始用的tightvnc,后来发现不能远程启动rviz,报错信息:

[ INFO] [1537648559.395352789]: rviz version 1.12.16
[ INFO] [1537648559.395581867]: compiled against Qt version 5.5.1
[ INFO] [1537648559.395659829]: compiled against OGRE version 1.9.0 (Ghadamon)
[ INFO] [1537648559.835809950]: Stereo is NOT SUPPORTED
[ INFO] [1537648559.836059261]: OpenGl version: 3 (GLSL 1.3).

于是换成x11vnc:
参考链接:Ubuntu18.04 远程命令行下安装并启动x11vnc

  1. 安装
    sudo apt-get install x11vnc

  2. 生成密码
    sudo x11vnc -storepasswd

  3. 编辑启动文
    sudo vim /lib/systemd/system/x11vnc.service
    启动文件内容(USERNAME要替换成自己的用户名)

    [Unit] 
    Description=Start x11vnc at startup. 
    After=multi-user.target 
     
    [Service] 
    Type=simple 
    ExecStart=/usr/bin/x11vnc -env FD_XDM=1 -display :0 -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/USERNAME/.vnc/passwd -rfbport 5900 -shared -o /var/log/x11vnc.log 
    
     
    [Install] 
    WantedBy=multi-user.target
    
  4. 另一个窗口启动lightdm
    sudo lightdm

  5. 添加到服务中

    sudo systemctl daemon-reload
    sudo systemctl enable x11vnc.service
    sudo systemctl start x11vnc.service
    
  6. 验证x11vnc服务
    sudo netstat -an | grep 5900
    出现:

    tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN     
    tcp6       0      0 :::5900                 :::*                    LISTEN
    
  7. 远程连接vnc
    接下来就可以在远程客户端vnc连接服务器了,使用TightVNC viewer(注意将IP换成你的云服务器IP地址)

登录VNC 8. 远程连接vnc
目前有个问题,有时候vnc会断连,此时重启服务也不能连接到服务器桌面,于是手动启动x11vnc而不是通过服务启动。新建脚本start_x11vnc.sh,
内容如下:
nohup x11vnc -rfbport 5900 -passwd PASSWORD -create -forever -display :0 -o ~/x11vnc.log &
注意将PASSWARD为设置的密码,可以自定义,连接的时候要使用该密码。然后添加可执行权限:
chmod +x start_x11vnc.sh
运行脚本,x11vnc将在后台运行。

Docker运行ROS

  1. 重要但是很容易忘记的一步
    xhost +

xhost命令是X服务器的访问控制工具,用来控制哪些X客户端能够在X服务器上显示。
xhost +代表关闭访问授权,允许任何主机访问本地X服务器

  1. 拉取镜像
    docker pull ros:melodic-desktop-full

  2. 创建容器并运行(注意将USERNAME换成你的用户名)

    sudo docker run -it \
        -e DISPLAY=unix$DISPLAY \
        --env="QT_X11_NO_MITSHM=1" \
        --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
        -v /home/USERNAME/ros/docker_ros_ws:/home/USERNAME/ros_ws \
        osrf/ros:melodic-desktop-full
    
    
  3. 启动master节点(注意是在容器中)
    roscore

  4. 另外打开一个终端,进入刚才的容器,注意把container_id换成真实的id
    sudo docker exec -it container_id bash

  5. 在容器内设置DISPLAY变量(这一步似乎很重要,设置为0,我也不太清楚什么意思)
    export DISPLAY=:0

  6. source一下环境变量(仍然在容器内)
    source ros_entrypoint.sh

  7. 检查是否可以运行rviz(仍然在容器中)
    rviz
    若出现rviz窗口,则成功

Docker 挂载文件夹权限问题

上面的第3步:“创建容器并运行”里还有个不足之处:docker默认是以root用户运行容器的,当在容器内新建文件时,文件的所有者是root。而在容器外,我们一般是普通用户,对这些文件是没有权限的。为解决这一问题,可以利用Dockerfile新建镜像,在Dockerfile里添加用户并切换到新添加的用户。

Dockerfile如下:

FROM osrf/ros:melodic-desktop-full

RUN useradd --create-home --no-log-init --shell /bin/bash hitzhang && \ 
    groupadd -g 129 docker && \
    adduser hitzhang sudo && \
    echo "hitzhang:1" | chpasswd

RUN usermod -u 1000 hitzhang && usermod -G 129 hitzhang

WORKDIR /home/hitzhang

USER hitzhang

该Dockerfile添加了名为hitzhang、用户组为docker、uid为1000、gid为129的新用户,并设置进入容器时,自动切换到hitzhang用户,同时切换工作目录到hitzhang的主目录。username、groupname不是很重要,可以随意,但是uid、gid设置成什么呢?

  1. id命令
    id
  2. 设置
    可以看到:uid=1000,gid=129。知道uid和gid就可以将Dockerfile里的id替换,构建镜像。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

云服务器Docker运行ROS,并通过VNC连接 的相关文章

  • 【spring】说说spring的IOC与DI

    说说spring的IOC与DI 文章目录 说说spring的IOC与DIid属性和name属性标签scope Bean的作用范围Spring xff0c 配置生成Bean的三种方式Sping 的 Bean属性注入Sping的Bean属性通过
  • ffmpeg时间戳相关函数

    1 概述 ffmpeg中与时间戳相关的函数主要有 xff1a av rescale q xff0c av rescale q rnd xff0c av compare ts av rescale q span class token cla
  • 【计算机网络】网线规格的鉴别与接线方法

    网线规格的鉴别与接线发送 文章目录 网线规格的鉴别与接线发送一 怎么判断网线类型 xff1f 二 制作网线标准三 屏蔽类型四 使用场景五 米数标记接线方法 一 怎么判断网线类型 xff1f 可以根据网线外皮的标识来判断 xff0c 正规厂商
  • 【Java】说说spring-jdbc和spring事务管理

    文章目录 说说spring jdbc和spring事务管理spring jdbc1 配置数据源2 使用jdbcTemplete3 在dao层使用jdbcTemplete 外部配置方式新建配置文件jdbc properties修改数据源配置部
  • 【微服务】springcloud-dubbo,springCloudAlibaba服务调用使用dubbo

    springcloud dubbo xff0c springCloudAlibaba服务调用使用dubbo 文章目录 springcloud dubbo xff0c springCloudAlibaba服务调用使用dubbo添加依赖配置具体
  • 【项目实战】spring boot中使用webSocket

    spring boot中使用webSocket 文章目录 spring boot中使用webSocket引入依赖支持配置类接口类前端连接方式前端信息发送方式 引入依赖 需要在基础的spring boot web项目项目中添加下面一个依赖 x
  • 【项目复盘】springboot项目中使用mybatis-plus进行分页

    springboot项目中使用mybatis plus进行分页 文章目录 springboot项目中使用mybatis plus进行分页引入依赖配置类实体类持久层业务层 引入依赖 span class token generics span
  • 【项目复盘】javax.validation的简单使用

    javax validation的简单使用 javax validation需要与hibernate validator配合使用 validation bean 是基于JSR 303标准开发出来的 xff0c 使用注解方式实现 xff0c
  • 【项目复盘】springboot中使用swagger生成接口文档并配置bootstrap主题

    springboot中使用swagger生成接口文档并配置bootstrap主题 引入依赖 span class token generics span class token punctuation lt span dependency
  • 【项目复盘】微服务网关GateWay过滤

    微服务网管过滤 新建一个过滤类 span class token annotation punctuation 64 Component span span class token comment 过滤器的执行优先级 返回值越小 执行优先级
  • 【项目实战】Winodws下使用ELK搭建日志分析框架

    项目实战 Winodws下使用ELK搭建日志分析框架 ELK是什么 xff1a 引用官网的一句话 xff1a 核心产品包括 Elasticsearch Kibana Beats 和 Logstash xff08 也称为 ELK Stack
  • java_网络编程知识

    day11 网络编程 主要内容 软件架构CS xff0f BS网络通信三要素TCP通信Socket套接字ServerSocket 学习目标 能够辨别UDP和TCP协议特点 能够说出TCP协议下两个常用类名称 能够编写TCP协议下字符串数据传
  • AvFrame和AvPacket

    在FFmpeg中 未压缩的图像和压缩的视频码流分别使用AVFrame结构和AVPacket结构保存 针对视频编码器 其流程为从数据源获取图像格式的输入数据 保存为AVFrame对象并传入编码器 从编码器输出AVPacket结构 1 AVFr
  • 基于FreeRTOS的stm32程序初始化底层搭建(hal库)

    采用嵌入式实时操作系统 RTOS 可以更合理 更有效地利用CPU的资源 xff0c 简化应用软件的设计 xff0c 缩短系统开发时间 xff0c 更好地保证系统的实时性和可靠性 FreeRTOS是一个迷你的实时操作系统内核 作为一个轻量级的
  • ceres小结 -- vins为例

    从 typora 复制的 排版有问题 见谅 在estimator cpp文件里 这个函数 void Estimator optimization 1 声明problem ceres Problem problem 2 引入核函数loss f
  • JavaScript操作表格及CSS样式

    概述 在前端开发中 xff0c 表格主要用于存储结构化的数据 xff0c CSS主要用于修饰DOM元素 xff0c 如何通过DOM来操作表格及CSS呢 xff1f 本文主要通过一些简单的小例子 xff0c 简述DOM对表格和CSS的常见操作
  • 转:Git Submodule管理项目子模块

    使用场景 当项目越来越庞大之后 xff0c 不可避免的要拆分成多个子模块 xff0c 我们希望各个子模块有独立的版本管理 xff0c 并且由专门的人去维护 xff0c 这时候我们就要用到git的submodule功能 常用命令 span c
  • Linux/c++服务器开发方向的重点

    作者 xff1a NULL 链接 xff1a https www zhihu com question 37247264 answer 2352680534 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c
  • Prometheus之Dockerfile编写、镜像构建、容器启动

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 目录 从官方镜
  • Java的接口调用

    最近在观看一个Android开发中 xff0c 有一个问题百思不得其解 xff0c 就是从Fragment传数据回Activity和Activity传数据到Fragment中 xff0c bundle其实刚开始还是理解的 xff0c 但是当

随机推荐

  • X86实模式与保护模式简介

    0 引言 从80386开始 xff0c CPU有三种工作方式 xff1a 实模式 xff0c 保护模式和虚拟8086模式 v86模式 只有在刚刚启动的时候是real mode xff0c 等到操作系统运行起来以后就切换到protected
  • (1)VisDrone无人机目标检测数据集介绍

    数据集介绍 官网 xff1a http aiskyeye com VisDrone数据集 xff0c 包含了10个类 xff08 即行人 人 汽车 面包车 公共汽车 卡车 汽车 自行车 遮阳三轮车和三轮车 xff09 无人机计算机视觉相关检
  • 简单的shell编程的语法

    shell 1 span class token punctuation span 脚本以 span class token comment bin bash 开头 span span class token comment 脚本的常用执行
  • 使用c++模板的优点和缺点

    作为C 43 43 语言的新组成部分 xff0c 模板引入了基于通用编程的概念 通用编程是一种无须考虑特定对象的描述和发展算法的方法 xff0c 因此它与具体数据结构无关 但在决定使用C 43 43 模板之前 xff0c 让我们分析一下使用
  • kalibr 进行相机单目、双目标定全流程

    一 部署kalibr环境 docker 步骤 xff1a 参考链接 xff1a Installation ethz asl kalibr Wiki GitHub Docker操作知识 xff1a Docker攻略 xff1a 从安装到入门到
  • kalibr源码阅读参考

    Kalibr简介 xff1a Kalibr是一个用于标定多相机系统和IMU xff08 惯性测量单元 xff09 的开源工具包 xff0c 旨在提供一套完整的 易于使用的标定工具 它是ETH Zurich自主飞行系统实验室的一个项目 xff
  • QT5.11.1下的DirectShowPlayerService::doRender: Unresolved error code 0x80040266 ()报错)

    64 TOC QT5 11 1下的DirectShowPlayerService doRender Unresolved error code 0x80040266 报错 1 实验环境 实验环境 xff1a xff08 1 xff09 QT
  • GPS定位中的卡尔曼滤波算法

    卡尔曼滤波 xff1a 卡尔曼滤波由预测和校正两部分组成 预测部份又称时间更新过程 xff0c 是在上一个历元 k 1 状态估计值的基础上 xff0c 利用系统的状态方程来预测当前历元 k 的状态值 校正部分又叫测量更新过程 xff0c 它
  • 古月居ROS21讲入门(10)发布者Publisher的编程实现(源代码详解)

    发布者Publisher的编程实现 源代码详解 一 话题模型二 创建learning topic功能包三 实现一个发布者1 初始化ROS节点2 注册节点信息3 创建消息数据 四 配置CMakeLists txt中的编译规则五 编译并运行发布
  • STM32自学笔记串口DMA发送/接收 FIFO 突发模式

    参考博文 串口发送TXPA9DMA2 Stream7通道4正常模式串口发送RXPA10DMA2 Stream5通道4循环模式 串口波特率115200 PA9 PA10复用输出 注意点 串口接受数据dma方式不能开启串口接受中断 Dma双缓冲
  • 【STM32】标准库-自定义BootLoader

    Bootloader bootloader其实就是一段启动程序 xff0c 它在芯片启动的时候最先被执行 xff0c 可以用来做一些硬件的初始化或者用作固件热更新 xff0c 当初始化完成之后跳转到对应的应用程序中去 bootloader程
  • 【数据结构】使用结构体指针时需要使用malloc

    如果定义一个结构体类型的普通变量 xff0c 可以不malloc动态申请内存 xff0c CPU会为这个结构体变量分配内存 如果定义的是一个结构体的指针 xff0c CPU会为这个指针开辟内存 xff0c 但是此时这个大小是4 xff08
  • fwrite乱码问题

    我们这里数据格式为 201911606 liu 1 1 1 2 99 201911607 wang 1 2 1 3 98 fwrite写入文件是二进制代码形式 xff0c 所以用文本打开为乱码 xff0c 这时候我们可以用fprintf代替
  • ubuntu下使用kazam录屏与视频解码(亲测视频在windows可用)

    Ubuntu中难免会使用录屏软件记录试验过程 xff0c 本博客采用kazam软件录屏 xff0c 并将录屏软件解码 xff0c 解码文件可以复制到windows使用 1 kazam安装 安装命令 xff1a span class toke
  • 高通MSM8998芯片数据资料参考

    高通MSM8998芯片数据资料参考 今日分享是高通MSM8998芯片的基础知识 xff0c 现在分享是比较基础的资料 xff0c 还有其他的项目案例和参考资料找个时间再分享出来 xff0c 资料都在闯客网技术论坛上 xff0c 也是可以免费
  • 深度学习中epoch,batch的概念--笔记

    深度学习中epoch xff0c batch的概念 batch epoch和iteration是深度学习中几个常见的超参数 1 batch size 每批数据量的大小 DL通常用SGD的优化算法进行训练 xff0c 也就是一次 1 个ite
  • 基于Ubuntu的嵌入式开发练习(十)FreeRTOS的移植和设计一个基本的多任务程序

    如有错误 xff0c 欢迎指正 xff0c 谢谢 xff01 目录 一 FreeRTOS的移植二 建立一个基本的多任务程序1 实验要求2 代码设计3 执行效果 一 FreeRTOS的移植 教程 视频 xff1a 野火 FreeRTOS视频教
  • 嵌入式软件工程师总结(1)

    1 说说进程和线程的区别 答 xff1a 简单的来说 一个程序至少有一个进程 一个进程至少有一个线程 第一点 进程有自己的独立地址空间 xff0c 每启动一个进程 xff0c 系统就会为它分配地址空间 xff0c 建立数据表来维护代码段 堆
  • Centos下Django部署到Apache

    Centos 43 Django 43 Apache部署 版本 xff1a python3 6 Centos7 6 Django3 2 Apache2 4 1 安装python3 默认3 6 yum install python3 pyth
  • 云服务器Docker运行ROS,并通过VNC连接

    云服务器Docker运行ROS xff0c 并通过VNC连接 使用华为云服务器系统Ubuntu18VNC为x11vnc 安装图形界面 选择Xubuntu界面 xff0c 占用资源较少 xff0c 参考链接ubuntu安装gui 直接安装即可