机器人端的图形界面ssh远程显示方案

2023-05-16

目录:

    • 前言
    • 原理解析
    • 实现步骤
      • 机器人端(X client):
        • 1、安装一些必要的软件
        • 2、修改`/etc/ssh/sshd_config `中的四个地方
      • 调试端(X server):
    • 测试效果

前言

最近在做机器人平台调试的时候,遇到了一些特殊的需求。比如:我们一般通过ssh的方式远程登陆机器人端的小电脑进行开发(用远程桌面的方式画质太低了;另外,ROS组网的方式很多时候要设置rviz订阅的话题以及配置一些显示参数,效率太低了),不同于服务器的运维,我们的机器是上面运行着ROS系统,有时候我们需要打开rviz做一些可视化,所以这时候就需要远程打开某些图形软件了。有没有一种办法可以在我们自己的win11上显示出机器人端的软件(如:rvizgazebo)呢?答案是肯定的,我们可以通过X11服务实现。

原理解析

不同于Windows,从 Windows 95 开始,图形界面就直接在系统内核中实现了,是操作系统不可或缺的一部分。Linux 本身是没有图形化界面的,所谓的图形化界面系统只不过中 Linux 下的应用程序。Linux 的图形化界面,底层都是基于 X 协议,我们平时使用的Ubuntu系统桌面版实际上也是通过X11进行图形显示的。我们完全可以在服务器端执行程序的计算部分,将程序的显示部分放在图形终端上。

image-20221029104759932

  • X Window System 常被简称为 X11 ,其功能包括窗口的绘制、移动,以及与鼠标、键盘等输入设备的交互。

  • C/S模型:一个X server 和多个应用程序(client)通信。server接收client的请求绘制窗口,并将来自鼠标、键盘等设备的输入传递给client

  • X 协议由 X server 和 X client 组成:

X server 管理主机上与显示相关的硬件设置(如显卡、硬盘、鼠标等),它负责屏幕画面的绘制与显示,以及将输入设置(如键盘、鼠标)的动作告知 X client。

X client (即 X 应用程序) 则主要负责事件的处理(即程序的逻辑)。

X serverX client可以位于同一计算机上,就类似于平时使用的Windows操作系统;当X serverX client不在同一计算机时,只要彼此通过 X 协议通信,即可使用本地的X server 进行绘制、交互,就变成了远程桌面。

所以,在本地显示 (X server),运行在服务器上的 GUI 程序 (X client),实际上这样的操作是可以通过 SSH X11 Forwarding (转发) 来实现。

实现步骤

机器人端(X client):

1、安装一些必要的软件

$ sudo apt update
$ sudo apt install x11-apps vim ssh

2、修改/etc/ssh/sshd_config 中的四个地方

$ sudo vim /etc/ssh/sshd_config
  1. PermitRootLogin yes
  2. X11Forwarding yes
  3. X11UseLocalhost no

image-20221029143817110

image-20221029143735388

image-20221029143927911

PS: 使用vim的查找功能可以快速定位。命令模式下 /xx 就可以在当前文档中查找 xx

image-20221029145044659

有时候root用户无法远程登陆是因为现在比较新的Linux版本都没有给root设置密码,而且默认不允许用户远程空密码登陆,所以我们root账户是没有任何密码的。所以无法远程登陆root,想要远程登陆root用户,就要给用户设置一个密码。

$ sudo passwd root

设置密码,并在/etc/ssh/sshd_config 中设置 PermitRootLogin 变量为yes 即可

调试端(X server):

命令行中输入

$ xhost +

image-20221029145641723

然后在ssh远程登陆的时候带上 -X 参数即可

image-20221029145943983

测试效果

下面我们通过看看是否能够在调试端打开rviz

首先通过ssh的方式远程登陆到机器人端,因为我们暂时使用的是ROS1,所以我们首先启动Master节点

image-20221029150004800

然后再开一个终端输入rviz

image-20221029150129196

可以看到正常显示,之后就可以愉快地使用远程调试啦~
能在win11系统打开rvizgazebo这种画面感觉还是很神奇的,但了解了 它背后的原理觉得也就那么回事。实际上,这种方法还可以应用到docker,因为通常docker是没有图形化界面的,但是因为某些原因可能偶尔还是需要调出某个程序的GUI所以也可以通过X11服务来实现。

但是,也有一些小问题,在高刷新的场景下还是会有点卡顿,比如:激光雷达的点云渲染的时候

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器人端的图形界面ssh远程显示方案 的相关文章

随机推荐

  • ubuntu python 通过奥比中光摄像头获取深度图片和彩色图片

    1 依赖 安装Openni Openni下载Openni添加至环境 xff08 要通过全局变量找到Openni头文件和库 xff09 安装primesense和openni pip install primesense pip instal
  • ROS tf使用报错:ImportError: dynamic module does not define module export function (PyInit__tf2)

    1 报错内容 Traceback span class token punctuation span most recent call last span class token punctuation span File span cla
  • ubuntu cuda cudnn tensorRT的卸载和安装

    1 安装显卡驱动 显卡安装教程 查看N卡驱动支持的最高cuda版本 nvidia smi 2 卸载 span class token function sudo span span class token function apt get
  • 初识VSCode

    Visual Studio Code xff08 以下简称vscode xff09 是一个轻量且强大的代码编辑器 xff0c 跨平台支持Windows xff0c Mac OS X和Linux 内置JavaScript TypeScript
  • Modbus通信及数据存储读取

    1 存储区代号 代码号功能1区输入线圈0区输出线圈3区输入寄存器4区输出寄存器 2 功能码 代码功能0x01读取输出线圈0x02读取输入线圈0x03读取输出寄存器0x04读取输入寄存器0x05写入单个线圈0x06写入单个寄存器0x0F写入多
  • 着色器语言 GLSL (opengl-shader-language)入门大全

    GLSL 中文手册 基本类型 类型说明void空类型 即不返回任何值bool布尔类型 true falseint带符号的整数 signed integerfloat带符号的浮点数 floating scalarvec2 vec3 vec4n
  • Data structure alignment (数据结构对齐 / 内存对齐)

    开篇的话 在比较老的编译器里 xff0c 如果没有对变量取地址的操作 xff0c 那么有些局部变量是通过寄存器保存的 xff0c 不占栈上内存 xff0c 根本不存在内存中如何排列的问题 xff0c 比如TurboC 2 0这种 在一些较新
  • C++primer plus和C++ primer的读书心得

    C 43 43 两本巨著primer plus和primer太过于经典 xff0c 以至于读过多次 xff0c 每次阅读仍然有新的收获 xff0c 所以将一些零碎的知识点整理在这里 xff0c 与大家共同进步 1 i 43 43 与 43
  • VINS 外参在线标定

    在VINS中相机的外参 R i c R ic R i c 是可以在线动态标定的 xff0c 实现函数为 xff1a 6
  • A-LOAM源码阅读

    LOAM 论文地址 xff1a https www ri cmu edu pub files 2014 7 Ji LidarMapping RSS2014 v8 pdf A LOAM地址 xff1a https github com HKU
  • LeGo-LOAM 跑通与源码学习

    论文链接 xff1a https www researchgate net LeGO LOAM 源码仓库 xff1a https github com RobustFieldAutonomyLab LeGO LOAM 本人注释 xff1a
  • SLAM中evo评估工具(用自己的数据集评估vinsFusion)

    目录 xff1a 配置标题文件修改源码修改第一处第二处第三处重新编译工程 安装evo1 安装命令2 常用指令 运行vinsFusion生成位姿估计文件使用evo评估轨迹 配置标题文件修改 主要根据自己的设备 xff0c 修改自己传感器的RO
  • Ubuntu中USB端口与外设绑定,ROS读取IMU模块数据

    目录 xff1a 1 根据设备ID绑定1 1 查看ID1 2 编写USB规则文件1 3 查看绑定结果 2 根据电脑USB口绑定2 1 找到USB端口名称2 2 编写绑定规则 3 通过ROS读数据 1 根据设备ID绑定 方法原理 xff1a
  • 实现外网Ping通WSL(网卡桥接方式实现)

    目录 xff1a 前言 xff1a 实现原理 xff1a 实现步骤1 开启hyper v2 编写桥接网络powershell脚本3 编写网络配置脚本 实现结果取消桥接最后 前言 xff1a 在我们经常和机器人打交道的这群人中有一个需求 xf
  • 如何在markdown中插入表情包

    我们平时经常使用markdown完成一些诸如博客的文档写作 xff0c 但是有时像我这种语言比较乏力的急需要在文档写作过程中插入表情包来完整的表达我想要表达的意思 xff0c 所以我去网上查了一下 xff0c 还真有 比如我想要表达开心即s
  • ROS多设备组网(WSL+miniPC+Nv Orin)

    目录 xff1a 前言硬件连接组网配置1 获取hostname和IP2 在主机添加从机的host信息3 在从机1中配置4 在从机2中配置 测试test1 话题订阅test2 rqt plot可视化传感器信息 最后 前言 实验室最近购买了两台
  • ZED 2i 双目-IMU标定

    目录 xff1a 前言IMU标定1 编译标定工具2 准备数据集3 标定 Camera IMU标定1 安装依赖2 编译Kaibr3 制作标定板下载标定板生成标定板target yaml文件 4 数据采集5 相机标定标定中遇到的问题问题1 xf
  • gazebo中给机器人添加16线激光雷达跑LIO-SAM

    目录 xff1a 前言1 下载雷达仿真包2 添加雷达支架描述文件3 添加雷达描述文件4 启动仿真5 添加IMU模块6 添加RGB D相机7 LIO SAM仿真安装依赖安装GTSAM编译LIO SAM运行 8 源码 遇到的问题1 error
  • ROS中的多线程使用

    目录 xff1a 单线程多线程订阅多个Topic xff0c 多个Spinner threads订阅一个Topic xff0c 多个Spinner threads订阅多个Topic xff0c 每个Subscriber一个Callback
  • 机器人端的图形界面ssh远程显示方案

    目录 xff1a 前言原理解析实现步骤机器人端 xff08 X client xff09 xff1a 1 安装一些必要的软件2 修改 96 etc ssh sshd config 96 中的四个地方 调试端 xff08 X server x