当前位置: 首页 > news >正文

【SSH+X11】VsCode使用Remote-SSH在远程服务器的docker中打开Rviz

🚀今天来分享一下通过VsCode的Remote-SSH插件在远程服务器的docker中打开Rviz进行可视化的方法。

具体流程如下图所示,在操作开始前,请先重启设备,排除之前运行配置的影响:

⭐️ 我这里是使用主机连接服务器,并在服务器中运行docker,并把该docker中运行的rviz窗口传回主机端显示。相当于有两步转发,即第一步从主机端到服务器本地端,第二步从服务器本地端到服务器docker端,如果你没有docker需求,只需要完成第一步转发即可。


🌔01
主机端配置

⭐️ 我主机端使用的是Win10,并已确保ssh可以正常使用。

1.1 配置Xming

① {\color{#E16B8C}{①}} 下载并安装Xming。
② {\color{#E16B8C}{②}} 把XLaunch创建一份快捷方式在桌面,以后每次要进行X11远程窗口显示都要启动它
在这里插入图片描述
③ {\color{#E16B8C}{③}} 打开XLaunch,设置Display number,我这里设置的是10,之后的设置默认即可。
在这里插入图片描述
设置完毕后,桌面右下角会出现Xming Server图标,并显示你刚刚设置的Display number。
在这里插入图片描述

1.2 设置DISPLAY环境变量

① {\color{#E16B8C}{①}} Win+R后输入以下命令,直接进入环境变量设置窗口界面

rundll32.exe sysdm.cpl,EditEnvironmentVariables

② {\color{#E16B8C}{②}} 新建用户变量如下:
在这里插入图片描述
③ {\color{#E16B8C}{③}} 打开cmd,输入以下命令进行验证,如果输出localhost:10.0,则环境变量设置成功。

echo %DISPLAY%

1.3 配置Remote-SSH

① {\color{#E16B8C}{①}} 打开vscode,并安装Remote-SSH插件。
在这里插入图片描述
② {\color{#E16B8C}{②}} 在vscode界面Ctrl+Shift+P,输入以下命令打开.ssh/config文件:

Remote-SSh:Open SSH Configuration File

③ {\color{#E16B8C}{③}} 编辑config文件,添加以下信息,其中,ip填你服务器的ip地址,SSH端口默认是22,也可以根据你自身服务器的端口设置,而这3个Forward配置与X11显示密切相关。

Host [your_ip]HostName [your_ip]User [your_username]Port 22ForwardX11 yesForwardX11Trusted yesForwardAgent yes

④ {\color{#E16B8C}{④}} 配置完毕vscode的.ssh/config后,重新打开vscode,在侧边栏的这个图标界面可以连接服务器。在这里插入图片描述


🌔02
服务器本地端配置

⭐️ 我服务器使用的是Ubuntu18.04,并已确保ssh可以正常使用。

2.1 设置DISPLAY环境变量

① {\color{#E16B8C}{①}} 由于vscode使用remote-ssh插件连接服务器后,每打开服务器中的一个文件夹进行编辑,就相当于打开了一个新的shell,进行了一次新的ssh连接,这时候,服务器本地端的DISPLAY环境变量会出现异常,于是把环境变量设置写入服务器的.bashrc中加以解决:

export DISPLAY=localhost:10.0

② {\color{#E16B8C}{②}} 在服务器端打开一个新的终端(vscode可以通过Ctrl+Shift+`打开),输入以下命令进行验证,若输出localhost:10.0,说明环境变量设置正确。

echo $DISPLAY

2.2 xclock验证

① {\color{#E16B8C}{①}} 终端运行以下命令进行简单验证:

xclock

如果显示了时钟窗口,则验证成功。
在这里插入图片描述
② {\color{#E16B8C}{②}} 此时,如果你不在服务器中使用docker,而是直接在服务器本地端运行rviz,那么rviz的可视化窗口就像xclock一样,也是能在你的主机端显示的。


🌔03
服务器docker端配置

⭐️ 我的docker运行在服务器端,且docker可以正常使用,且默认你已经准备好了带ros2的linux的docker镜像(ros1同理)。

3.1 创建container

① {\color{#E16B8C}{①}} 现在需要在从镜像创建容器这一步加上一些有关X11的配置:

docker run \
-it \
--name [your_container_name] \
-w [your_workspace] \
-v [your_src_folder]:[your_dst_folder] \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
-v $HOME/.Xauthority:/root/.Xauthority:rw \
-e DISPLAY=$DISPLAY \
--net=host \
--shm-size=5g \
-p 6006:6006 \
-p 2222:22 \
[your_image:tag]

② {\color{#E16B8C}{②}} 其中与X11有关的选项说明如下:

① -v /tmp/.X11-unix:/tmp/.X11-unix:rw:
这是一个卷挂载选项,将主机的 /tmp/.X11-unix 目录挂载到容器的同一目录中,并设置为读写模式 (rw)。
这个目录通常用于 X11(图形界面系统)的 Unix 套接字通信,这样容器就可以访问主机的图形界面。
② -v $HOME/.Xauthority:/root/.Xauthority:rw:
这也是一个卷挂载选项,将主机用户的 .Xauthority 文件挂载到容器的 /root/.Xauthority 中,并设置为读写模式。
.Xauthority 文件用于存储 X11 的授权信息,这样容器可以使用主机的 X11 会话。
原则上这样就不需要再在服务器本地端设置X11权限了,如果为了保险,可以在服务器本地端运行命令:xhost +
③ -e DISPLAY=$DISPLAY:
这是一个环境变量设置选项,将主机的 DISPLAY 环境变量传递给容器。
DISPLAY 变量指定 X11 服务器的地址,通常用于图形界面应用程序。
④ --net=host:
这个选项让容器使用主机的网络堆栈。
使用 host 网络模式,容器将与主机共享网络接口和 IP 地址,这样可以直接访问主机的网络资源(包括代理 e.g.clash)

3.2 检查DISPLAY环境变量

① {\color{#E16B8C}{①}} 在服务器docker端内,运行以下命令,验证DISPLAY环境变量是否传递成功,若输出localhost:10.0,说明环境传递设置正确。

echo $DISPLAY

3.3 rviz验证

① {\color{#E16B8C}{①}} 在服务器docker端内,运行以下命令,验证rviz是否可以在主机端显示出来。

rviz2

在这里插入图片描述

② {\color{#E16B8C}{②}} 如果没有成功显示,并报错,可以尝试先退出并停止容器,然后再重启容器进行尝试:

exit
docker stop [your-container_name]
docker start [your-container_name] && docker exec -it [your-container_name] /bin/bash

③ {\color{#E16B8C}{③}} 最后的最后,重启设备,再次尝试在docker中打开rviz,如果成功了,之后就可以稳定的进行可视化调试了。

相关文章:

【SSH+X11】VsCode使用Remote-SSH在远程服务器的docker中打开Rviz

🚀今天来分享一下通过VsCode的Remote-SSH插件在远程服务器的docker中打开Rviz进行可视化的方法。 具体流程如下图所示,在操作开始前,请先重启设备,排除之前运行配置的影响: ⭐️ 我这里是使用主机连接服务器&#xff…...

Vue Web开发(五)

1. axios axios官方文档 异步库axios和mockjs模拟后端数据,axios是一个基于promise的HTTP库,使用npm i axios。在main.js中引入,需要绑定在Vue的prototype属性上,并重命名。   (1)main.js文件引用 imp…...

HarmonyOS:使用Grid构建网格

一、概述 网格布局是由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。网格布局具有较强的页面均分能力,子组件占比控制能力,是一种重要自适应布局,其使用场景有九宫格图片展示、日历、计算器…...

开源Java快速自测工具,可以调用系统内任意一个方法

java快速测试框架,可以调到系统内任意一个方法,告别写单测和controller的困扰。 开源地址:https://gitee.com/missyouch/Easy-JTest 我们在开发时很多时候想要测试下自己的代码,特别是service层或者是更底层的代码,就…...

力扣刷题TOP101: 29.BM36 判断是不是平衡二叉树

目录: 目的 思路 复杂度 记忆秘诀 python代码 目的: 输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。 思路 什么是平衡二叉树(AVL 树)? 每个节点的左子树和右子树的高度差不能超过 1。确保…...

【在Linux世界中追寻伟大的One Piece】自旋锁

目录 1 -> 概述 2 -> 原理 3 -> 优缺点及使用场景 3.1 -> 优点 3.2 -> 缺点 3.3 -> 使用场景 4 -> 纯软件自旋锁类似的原理实现 4.1 -> 结论 5 -> 样例代码 1 -> 概述 自旋锁是一种多线程同步机制,用于保护共享资源避免受并…...

前端编辑器JSON HTML等,vue2-ace-editor,vue3-ace-editor

与框架无关 vue2-ace-editor有问题&#xff0c;ace拿不到&#xff08;brace&#xff09; 一些组件都是基于ace-builds或者brace包装的 不如直接用下面的&#xff0c;不如直接使用下面的 <template><div ref"editor" class"json-editor"><…...

C++ 中的运算符重载

运算符重载是C中的一种特性&#xff0c;它允许开发者为自定义类型定义或改变标准运算符的行为。通过运算符重载&#xff0c;你可以使得用户定义的类像内置类型一样使用运算符&#xff0c;比如加法、减法、赋值等。 如何在C中进行运算符重载&#xff1f; 重载运算符的语法&#…...

渗透测试工具 -- SQLmap安装教程及使用

随着网络安全问题日益严峻&#xff0c;渗透测试成为了保护信息安全的重要手段。而在渗透测试的众多工具中&#xff0c;SQLmap凭借其强大的自动化SQL注入检测和利用能力&#xff0c;成为了网络安全专家必备的利器。那么&#xff0c;你知道如何高效地使用SQLmap进行漏洞扫描吗&am…...

使用 Database Tools 实现高效数据查询的十大 IntelliJ IDEA 快捷键

得益于 IntelliJ IDEA Ultimate 的 Database Tools&#xff08;数据库工具&#xff09;中的专用 SQL 查询控制台&#xff0c;您无需离开 IDE 即可轻松修改连接到您的 Java 应用程序的任何数据库中的数据&#xff0c;以及从这些数据库中提取数据。 查询控制台具有 SQL 语句特定的…...

SpringBoot 整合 RabbitMQ 实现流量消峰

RabbitMQ 即一个消息队列&#xff0c;主要是用来实现应用程序的异步和解耦&#xff0c;同时也能起到消息缓冲&#xff0c;消息分发的作用。 消息中间件在互联网公司的使用中越来越多&#xff0c;刚才还看到新闻阿里将 RocketMQ 捐献给了 Apache&#xff0c;当然了今天的主角还…...

大数据挖掘建模平台案例分享

大数据挖掘建模平台是由泰迪自主研发&#xff0c;面向企业级用户的大数据挖掘建模平台。平台采用可视化操作方式&#xff0c;通过丰富内置算法&#xff0c;帮助用户快速、一站式地进行数据分析及挖掘建模&#xff0c;可应用于处理海量数据、高复杂性的数据挖掘任务&#xff0c;…...

MySQL数据表的管理

1.创建表 语法&#xff1a; create table 表名( 字段名 字段里保存数据的类型【(数据的长度) 约束】, 字段名 字段里保存数据的类型【(数据的长度) 约束】, 字段名 字段里保存数据的类型【(数据的长度) 约束】 ...... ); 注意&#xff1a;数据类型和约束&#xff0c;接下来用…...

SpringBoot【十三(实战篇)】集成在线接口文档Swagger2

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 二、如何生成Swagger文档 上一期我们已经能正常访问swagger在线文档&#xff0c;但是文档空空如也&#xff0c;对不对&#xff0c;接下来我就教大家怎么把相关的接口都给…...

【C++初阶】第8课—标准模板库STL(string_2)

文章目录 1. string类对象遍历操作1.1 标准库中的成员函数begin( )和end( )1.2 标准库中的成员函数rbegin( )和rend( )1.3 C11引入的4个标准库中的成员函数 2. string类对象的访问2.1 operator[ ]运算符重载访问字符串字符2.2 公有成员函数at访问字符2.3 公有成员函数back()和f…...

【arm】程序跑飞,SWD端口不可用修复(N32G435CBL7)

项目场景&#xff1a; 国民N32G43X系列&#xff0c;烧录了一个测试程序&#xff0c;在DEBUG中不知什么原因挂掉&#xff0c;然后就无法连接SWD或JLINK。 问题描述 在SWD配置中不可见芯片型号&#xff0c;无法connect&#xff0c;无法烧录。但基本判断是芯片没有损坏。怀疑是程…...

https证书生成、linux 生成https证书、nginx 配置https证书

1. 检查 Certbot 是否已安装 which certbot 2. 安装 Certbot 2.1启用 EPEL 仓库&#xff08;如果尚未启用&#xff09;&#xff1a; sudo yum install epel-release 2.2 安装 Certbot 和 Nginx 插件&#xff1a; sudo yum install certbot python3-certbot-nginx 2.3验证安…...

Halcon随机贴图生成缺陷图片脚本

halcon随机贴图生成缺陷图片&#xff0c;用于深度学习训练: read_image (Image, C:/Users/61082/Desktop/bentiiamge/omron/S06-1211/ok/ok_images/D246B_CPFNNUBA8LT0SX_AAA_S2412001793_C1216_1733895885320066.jpg) get_image_size (Image, Width, Height) gen_rectangle1 …...

[ZMQ] -- ZMQ通信Protobuf数据结构 1

1、前言背景 工作需要域间实现zmq通信&#xff0c;刚开始需要比较简单的数据结构&#xff0c;比如两个bool&#xff0c;后面可能就需要传输比较大的数据&#xff0c;所以记录下实现流程&#xff0c;至于为啥选择proto数据结构去做大数据传输&#xff0c;可能是地平线也用这个&…...

大数据平台

大数据行业应用持续升温&#xff0c;特别是企业级大数据市场正在进入快速发展时期。越来越多的企业期望实现数据孤岛的打通&#xff0c;整合海量的数据资源&#xff0c;挖掘并沉淀有价值的数据&#xff0c;进而驱动更智能的商业。随着公司数据爆发式增长&#xff0c;原有的数据…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...