【ssh-xorg】SSH远程配置X11窗口回传

news2024/11/27 11:44:01

前言

  • 我们通常在进行远程配置板端的时候往往会出现一个问题,在不连接显示屏或者启用VNC服务的前提下(或者使用其他软件提供的功能),我们无法在远程终端看到板端的新窗口,本文提供一种方式,在进行ssh远程连接时候制定参数-CX,进行窗口回传。
ssh -CX [用户名]@[客户端ip地址]
  • 可使用的几个场景:
    • OpenCV 窗口回传
    • rviz2 回传
    • VScode窗口回传(不会启用VScode-Server)
  • 需要注意通讯双方都需要支持x11转发,最好确保通讯双方都是Linux。
  • 下面我们来看看如何配置和使用场景说明。

1 ssh服务

请添加图片描述

1-1 介绍

SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录和其他安全网络服务。它为网络服务提供了一种安全传输环境,确保数据传输的安全性和完整性。以下是SSH服务的一些主要特点和使用场景:

主要特点
  • 加密通信:SSH通过使用公钥加密技术来保证数据传输过程中的安全性,防止数据在传输过程中被窃取或篡改。

  • 认证机制:SSH支持多种认证方式,包括密码认证、基于密钥的认证等,确保只有授权用户才能访问。

  • 数据完整性:SSH能够确保数据在传输过程中不被篡改,通过加密哈希函数来验证数据的完整性。

  • 隧道功能:SSH隧道可以用来安全地转发其他TCP/IP端口和X11会话,使得原本不安全的网络服务通过SSH加密通道传输。

  • 远程命令执行:用户可以通过SSH在远程服务器上执行命令,进行系统管理和维护。

使用场景
  • 远程登录:管理员可以通过SSH登录到远程服务器进行管理和维护工作。

  • 文件传输:SSH支持SFTP(SSH File Transfer Protocol)SCP(Secure Copy),用于安全的文件传输。

  • 端口转发:通过SSH端口转发(Port Forwarding),可以将不安全的网络服务(如数据库连接)通过加密通道传输。

  • 自动化管理:通过SSH,可以实现自动化脚本在多台服务器上的执行,简化系统管理任务。

  • 内网穿透:SSH可以作为内网穿透的工具,使得位于内网的服务可以被外网访问。

SSH服务的组成
  • SSH服务器:运行在远程主机上,负责监听端口,处理来自客户端的连接请求,并执行相应的操作。

  • SSH客户端:用于发起连接请求,用户通过客户端软件连接到SSH服务器。

  • SSH密钥:SSH密钥包括私钥公钥私钥保存在客户端,用于身份验证;公钥则可以放在服务器上,用于验证客户端的身份。

1-2 安装ssh
  • 安装
sudo apt install openssh-server
  • 启用ssh服务
sudo systemctl enable --now ssh
  • 查询ssh状态
sudo systemctl status ssh

请添加图片描述

  • 查询本地ip
ip addr

请添加图片描述

  • 远程连接,请务必确保主从机连接在同一局域网段下。
ssh [用户名]@[客户端ip地址]

请添加图片描述

  • 值得一提的是初次连接的时候可能会看到如下提示,这是向你确认客户端的SSH指纹。当我们第一次尝试连接到一个新的SSH服务器时,SSH客户端会显示服务器的公钥指纹,并询问我们是否信任这个服务器。这是为了防止中间人攻击。如果指纹匹配,输入yes继续连接。
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:nThX/AQW5bp9z3PueB3Wur5M1P+RlCTQr9IbNP0L+yc.
Are you sure you want to continue connecting (yes/no)?

2 -CX参数及X11转发

2-1 -CX
  • ssh 命令是用于安全地访问远程服务器的工具,而 -CX 参数是 ssh 命令行中使用的两个单独参数的组合。
  • -C 参数:这是 “Compression” 的缩写,用于启用压缩功能。启用压缩可以减少通过网络传输的数据量,这对于带宽有限的网络连接来说非常有用。压缩会增加CPU的使用,但是可以加快传输速度,尤其是在网络速度较慢的情况下。
ssh -C user@remotehost
  • -X 参数:这是 “X11 Forwarding” 的缩写,允许你将X11会话(即图形界面应用程序)从远程服务器转发到本地机器上。这意味着你可以在远程服务器上运行图形界面应用程序,并在本地机器上看到它们的窗口。
ssh -X user@remotehost
2-2 X11转发
  • X11 转发是一种允许用户在远程服务器上运行图形界面应用程序,并在本地机器上显示这些应用程序窗口的技术。这项技术对于需要在远程服务器上进行图形界面操作,但又不想使用远程桌面软件的用户来说非常有用。
  • 其中的概念:
    • X11:X11是X Window System的第11个版本,它是Unix和类Unix操作系统中使用的一个窗口系统,用于在图形界面下显示窗口和用户界面元素。
    • X11 转发:X11转发(也称为X11隧道)是一种通过SSH连接将X11客户端和服务器之间的通信隧道化的方法。这样,即使在远程服务器上运行的应用程序也能在本地机器的X11服务器上显示。
  • 当你在本地机器上运行一个SSH客户端,并通过SSH连接到远程服务器时,你可以使用以下步骤启用X11转发:
    1. 启动X11服务器:在本地机器上,确保X11服务器正在运行。在大多数Linux发行版中,当你登录到图形界面时,X11服务器会自动启动。
    2. 配置SSH客户端:通过SSH客户端连接到远程服务器时,使用 -X 参数(大写X)来启用X11转发。

3 使用示范

3-1 rviz2
  • 我们来尝试不制定-CX参数时候启用远程终端的rviz2服务请添加图片描述

  • 可以看到上述请求报错了,错误信息 “qt.qpa.xcb: could not connect to display” 表示 Qt 应用程序无法连接到显示服务器,通常是因为 DISPLAY 环境变量没有设置或者设置不正确。这个错误通常出现在尝试在没有图形界面的服务器上运行图形界面应用程序时,或者在远程 X11 转发没有正确配置的情况下。

  • 那我们远程连接的时候制定参数-CX请添加图片描述

  • 可以看到,我们的服务被正确启动了。


3-2 VScode(不推荐直接使用server连接)
  • vscode-server 是一个轻量级的服务器组件,它是 Visual Studio Code(VS Code)远程开发扩展的一部分。VS Code 是一个由微软开发的免费、开源的代码编辑器,它支持多种编程语言的语法高亮、智能代码完成、括号匹配、代码缩进、代码片段、代码对比差异、Git 控制等功能,并拥有一个功能丰富的扩展市场。

  • 正常我们使用ssh进行远程连接的时候都会借助ssh的扩展服务ssh-server请添加图片描述

  • 我们在扩展中连接请添加图片描述

  • 输入密码请添加图片描述

  • 初次远程需要安装vscode-server(万恶之源来了) 请添加图片描述请添加图片描述

  • 下载后发现我们就可以远程连接到远程的版端请添加图片描述

  • 然后我们来看一个奇特的现象:

  • 我们打开远程板端的htop,没安装过的可以通过下属命令安装

sudo snap install htop 
  • 我们新开一个ssh服务连接到板端,并输入htop,可以发现vscode-server占用了非常多的内存。请添加图片描述

  • 而且即使远程连接断开了,vscode-server仍占有运行内存,可以通过下述命令删除

rm -rf ~/.vscode-server
  • 利用htop查看内存是减少了请添加图片描述

  • 通过制定-CX参数启动VScode不会激活vs-server,也不会遗留残留内存占用。请添加图片描述

  • 但是可能会导致一点点CPU的占用… 请添加图片描述


3-3 OpenCV窗口连接
  • 我们简单写一个opencv代码验证一下,如果没安装的朋友可以装一下
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 创建文件
touch video.py
  • 把下属代码粘贴
import cv2

cap = cv2.VideoCapture(0)


while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        cv2.imshow("frame", frame)
		if cv2.waitKey(1) & 0xFF == ord('q'):
	        break

cap.release()
cv2.destroyAllWindows()
  • 写入

  • 请添加图片描述

  • 运行请添加图片描述

  • 同样道理运行-CX参数请添加图片描述


总结

  • 本文介绍了如何使用ssh的-CX参数进行X11窗口转发,可以进行OpenCV窗口转发,rviz2转发,VScode转发等等。
  • 如有错误,欢迎指出,感谢大家的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringIoC容器的初识

一、SpringIoC容器的介绍 Spring IoC 容器,负责实例化、配置和组装 bean(组件)。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这…

Vueron引领未来出行:2026年ADAS激光雷达解决方案上市路线图深度剖析

Vueron ADAS激光雷达解决方案路线图分析:2026年上市展望 Vueron近期发布的ADAS激光雷达解决方案路线图,标志着该公司在自动驾驶技术领域迈出了重要一步。该路线图以2026年上市为目标,彰显了Vueron对未来市场趋势的精准把握和对技术创新的坚定…

如何实现 C/C++ 与 Python 的通信?

在现代编程中,C/C与Python的通信已经成为一种趋势,尤其是在需要高性能和灵活性的场景中。本文将深入探讨如何实现这两者之间的互通,包括基础和高级方法,帮助大家在混合编程中游刃有余。 C/C 调用 Python(基础篇&#…

AI 时代:产品经理不“AI”就出局?

即便你没想去做“AI 产品经理”,那你也不能成为一个不会用 AI 的产品经理。 产品经理肯定是所有互联网从业者中,最先捕捉到 AI 趋势的岗位。 但只知道 AI、关注 AI 还不够,仔细审视一下:你自己的工作,被 AI 提效了么…

打造自己的RAG解析大模型:Windows部署OCR服务(可商业应用)

在上一篇文章中,我们介绍了如何在 Windows 环境中配置 OCR 相关模型,并完成了模型验证。本篇文章将基于之前的内容,进一步讲解如何将文本检测、方向分类和文本识别模型进行串联,最终搭建一个基础的 OCR 应用服务。通过这些模型的串…

wxml语法-声明和绑定数据

文章目录 1、展示内容1.1、{{school}} 直接引用的是一个字符串或其他类型的简单值1.1.1、index.wxml1.1.2、index.js 1.2、{{obj.name}} 引用的是一个对象中的特定属性值1.2.1、index.wxml1.2.2、index.js 2、绑定属性值2.1、使用数据绑定的方式来动态设置元素的属性值2.1.1、i…

冯诺依曼体系|操作系统

目录 一、硬件:冯诺依曼体系 1.冯诺依曼体系结构 2.冯诺依曼体系结构组成 3.内存的重要性 (1)提升运行速度 (2)提升运行效率 二、软件:操作系统 1.什么是操作系统 (1)内部理…

代码随想录Day54

今天是国庆假期后的恢复做题的第一天,摆了那么久感觉还是有点没摆够哈哈哈哈!今天两道题都是困难题,两道题都去看讲解了,感觉这两道题是高度相似的,接雨水用单调递增栈来做,柱状图中最大的矩形用单调递减栈…

水凝胶发生器,不对称设计妙,医电应用前景广

大家好!今天来了解一种具有工程机械离子不对称性的水凝胶发生器——《A high-current hydrogel generator with engineered mechanoionic asymmetry》发表于《Nature Communications》。嘿!你能想象一种材料,它能像魔法一样在低频运动下产生高…

消息称苹果iPhone系列将完全放弃LCD屏幕

近日,据日经亚洲消息,苹果公司将于明年初推出搭载OLED显示屏的 iPhone SE 4,标志其整个iPhone系列已进入从 LCD 过渡到 OLED 技术的最后阶段,2025年及之后销售的所有iPhone机型均将搭载OLED屏幕。 由此,两家日本面板供…

【一起学NLP】Chapter3-使用神经网络解决问题

目录 使用神经网络解决问题Tip:数据集划分学习使用的代码Tip:epochTip:数据打乱Trainer类Tip-高速化计算 使用神经网络解决问题 import sys sys.path.append(..) # 为了引入父目录的文件而进行的设定 from dataset import spiral import matplotlib.pyplot as pltx,t spiral.…

解决银河麒麟桌面操作系统V10(ARM)中`apt-get update`“正在等待报头”问题

解决银河麒麟桌面操作系统V10(ARM)中apt-get update“正在等待报头”问题 1、问题描述2、 解决方法步骤一:打开终端步骤二:清理APT缓存步骤三:再次尝试更新软件源 💖The Begin💖点点关注&#x…

利士策分享,故事创作和造谣及假新闻之间如何界定?

利士策分享,故事创作和造谣及假新闻之间如何界定? 在这个信息爆炸的时代,一篇打着“人民网”旗号的虚假文章《低俗炒作博眼球,曝"瓜"文化不可取》在网络上迅速发酵,不仅误导了公众,更对无辜者造…

【源码+文档】基于SpringBoot+Vue校园智慧迎新服务平台

🚩如何选题? 如何选题、让题目的难度在可控范围,以及如何在选题过程以及整个毕设过程中如何与老师沟通,这些问题是需要大家在选题前需要考虑的,具体的方法我会在文末详细为你解答。 🚭如何快速熟悉一个项目…

MySQL【知识改变命运】03

表的基本操作 1:查看所有表2:创建表3:查看表结构4:修改表5: 删除表 前言:我们先了解一个知识: MySQL安装后会有MySQL服务——管理多个库——每个库管理多个表——每个表管理多行数据——数据行由…

《Windows PE》4.1导入表

导入表顾名思义,就是记录外部导入函数信息的表。这些信息包括外部导入函数的序号、名称、地址和所属的DLL动态链接库的名称。Windows程序中使用的所有API接口函数都是从系统DLL中调用的。当然也可能是自定义的DLL动态链接库。对于调用方,我们称之为导入函…

本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃

SiLC Technologies获本田汽车投资:加速自动驾驶技术革新 近日,硅谷光子学初创公司SiLC Technologies宣布获得本田汽车的投资,这一合作标志着双方将共同推进自动驾驶技术领域的革新与发展。本田此次投资不仅体现了对SiLC Technologies技术实力的认可,也彰显了本田在自动驾驶…

进程管理和进程调度的基本过程(详细版)

“无论你走得多慢,总比停下来要好。” 对于操作系统内核来说,里面包含的功能是非常多的,其中有一个功能和日常开发,息息相关。 进程管理: 进程(process/task):进程就是正在执行的应…

一个月学会Java 第4天 运算符和数据转换

Day4 运算符和数据转换 今天来讲运算符,每个运算符的作用和现象,首先我们先复习一下数据类型, day2讲过基本数据类型有八种,int、short、long、byte、char、boolean、float、double,分别为四个整型、一个字符型、一个布…

代码随想录 | Day28 | 回溯算法:组合组合总和III

代码随想录 | Day28 | 回溯算法:组合&&组合总和III 关于这个章节,大家最好是对递归函数的理解要比较到位,听着b站视频课可能呢才舒服点,可以先去搜一搜关于递归函数的讲解,理解,再开始这个章节会比…