【Linux-SSH远程窗口回传】使用X11或Wayland进行SSH窗口转发

news2024/10/10 2:05:50

前言

  • 我们通常在进行远程配置板端的时候往往会出现一个问题,在不连接显示屏或者启用VNC服务的前提下(或者使用其他软件提供的功能),我们无法在远程终端看到板端的新窗口。

  • 例如下图是一个通过远程SSH连接后企图在终端进行OpenCV窗口显示的代码报错请添加图片描述

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

  • 本文介绍一种通过指定-CX或者-CY的方式在Linux上通过Xorg或者Wayland进行SSH窗口转发的使用说明和配置方法,同时介绍几种测试的用法展示

    • RVIZ2窗口回传
    • OpenCV窗口回传
    • VScode窗口回传(不启用vscode-server)
  • 需要注意双方必须支持 Xorg或者Wayland,因此Windows是行不通的!


1 SSH服务

1-1 介绍

请添加图片描述

  • SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录和其他安全网络服务。它在非安全网络中为网络服务提供安全性,例如,通过在不安全的网络中创建安全通道来保护网络数据的传输。
  • 主要特点:
    1. 数据加密:SSH在客户端和服务器之间传输的数据都会进行加密处理,确保数据传输的安全性。
    2. 认证机制:SSH提供了多种认证方式,包括密码认证、基于密钥的认证等,增强了安全性。
    3. 数据完整性:SSH能够保证数据在传输过程中不被篡改。
    4. 远程登录:用户可以通过SSH登录到远程服务器,执行命令,进行系统管理。
    5. 端口转发:SSH支持端口转发,可以将本地的端口映射到远程服务器上的端口,或者将远程服务器的端口映射到本地。
  • 使用场景:
    1. 远程登录:管理员可以通过SSH远程登录到服务器进行管理操作。
    2. 安全文件传输:配合SFTP(SSH File Transfer Protocol)SCP(Secure Copy),可以实现安全的文件传输。
    3. 加密隧道:SSH可用于创建加密的隧道,保护数据流,例如,用于数据库的加密连接。
    4. X11转发:允许将X11应用程序的图形用户界面显示在本地机器上,即使应用程序实际上运行在远程服务器上。
    5. 网络设备管理:网络设备如路由器和交换机通常支持SSH,以便进行安全的远程管理。

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

请添加图片描述

  • 查询本地ip
ip addr

请添加图片描述

  • 进行SSH连接的时候需要确保双方同时处于局域网下,然后通过用于名和远程主机的ip地址进行访问
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)?

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

  • 正常我们使用ssh进行远程连接的时候都会借助ssh的扩展服务ssh-server,在扩展商店中搜索Remote-SSH可以进行插件下载

  • 请添加图片描述

  • 我们在Remote-SSH扩展中添加存在的SSH连接请添加图片描述请添加图片描述

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

  • 初次远程需要安装vscode-server请添加图片描述请添加图片描述

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

  • 但是值得一说的是vscode-server在远端会持续运行,很耗费内存资源,即使在连接断开后也不会自动释放资源,在内存吃紧的板端需要注意(如果需要删除的话直接sudo rm -rf ~/.vscode-server即可)请添加图片描述


2 X11和Wayland

2-1 介绍
  • X11Wayland是两种不同的显示服务器协议,它们在Linux和其他类Unix操作系统中用于图形用户界面的渲染和显示。
    • X11,也称为X Window System,是Linux和其他类Unix操作系统中使用最广泛的显示服务器协议。它是由MIT在1987年开发的,目的是提供一个通用的图形用户界面框架。
    • Wayland是一个较新的显示服务器协议,旨在替代X11。它由Kristian Høgsberg在2008年开发,目标是提供一个更简单、更现代、更安全的显示服务器。
2-2 查询桌面系统使用的渲染协议
  • 在终端输入下述bash指令可以查看自己电脑的协议,可能输出有-
    • x11:表示当前会话正在使用X11显示服务器。
    • wayland:表示当前会话正在使用Wayland显示服务器。
    • mir:表示当前会话正在使用Mir显示服务器
    • tty:通常意味着你当前不在图形用户界面(GUI)环境中,而是在一个基于文本的控制台会话中。(后面会说)
echo $XDG_SESSION_TYPE
  • 以我的Ubuntu22.04LTS为例子,是以x11为协议请添加图片描述
2-3 额外安装X11Wayland
  • 如果终端中的 echo $XDG_SESSION_TYPE 命令输出为 tty,这通常意味着你当前不在图形用户界面(GUI)环境中,而是在一个基于文本的控制台会话中。在这种情况下,没有图形界面渲染协议在运行,因为你正在使用的是命令行界面。
  • 这时候我们可以手动安装以下X11Wayland
sudo apt update
sudo apt install wayland
sudo apt update
sudo apt install xorg
4 切换X11Wayland
  • 如果想从Wayland切换到X11,可以通过vim编辑下述文件
sudo vim /etc/gdm3/custom.conf
  • 找到这一行WaylandEnable=false请添加图片描述
  • 修改即可
5 SSH使用-CX或者-CY进行窗口转发
  • 在SSH中,-C 选项用于启用压缩,可以减少数据传输量,加快传输速度。而 -X-Y 选项用于启用X11转发,允许你从远程服务器运行图形界面程序,并在本地显示。
  • -CX:这个组合选项启用了压缩和X11转发。使用 -X 选项时,SSH会设置一个安全的X11转发,这意味着只有来自远程服务器的X11连接会被转发到本地机器。这通常是通过使用ssh-agent来管理密钥,并设置DISPLAY环境变量来实现的。
  • -CY:这个组合选项启用了压缩和较宽松的X11转发。与 -X 不同,-Y 选项不会进行任何访问控制,这意味着任何应用程序都可以通过SSH连接使用你的X11显示。这可能会带来安全风险,因为它允许远程应用程序访问你的本地X11会话,包括可能截取你的键盘输入和其他屏幕活动。
  • 如果GUI显示端使用的是Xorg
ssh -CX [用户名]@[远端IP]
  • 如果GUI显示端使用的是Wayland
ssh -CY [用户名]@[远端IP]

3 使用示范

  • 这里为本机电脑是Xorg
3-1 rviz2
  • 我们来尝试不制定-CX参数时候启用远程终端的rviz2服务请添加图片描述

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

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

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


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

3-3 OpenCV窗口连接
  • 我们简单写一个opencv代码验证一下,如果没安装的朋友可以装一下
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 创建文件
touch video.py
  • 把下属代码粘贴写入cat > video.py<<EOF
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-CY的配置原理,讲解了X11Wayland切换方法和三个例子进行SSH远程窗口转发-CX的测试
  • 如有错误,欢迎指出,感谢大家的支持!

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

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

相关文章

5.toString()、构造方法、垃圾回收、静态变量与静态方法、单例设计模式、内部类

文章目录 一、toString()1. 优缺点2. 使用方法举例① Dos类里更省事的方法 ② Application里 二、构造方法1. 导入2. 什么是构造方法3. 怎么写构造方法① 无参的构造方法(无参构造器)② 有参的构造方法(有参构造器)③ 注意 4. 构造方法的重载 三、再探this1. 给成员变量用2. 给…

基于ssm的教务管理系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 在高等院校的教学科研活动中&#xff0c;最重要的部门是学校的教务管理部门。教务管理工作是现代高等院校培养人才的核心工作。高校教务工作具有一个很明显的特征&#xff0c;就是围绕着学生为中心&#xff0c;以学生作为管理对…

ROS2-Jazzy(一):让小乌龟跑起来

配置ROS2 ros为了使一个系统中可以存在多个不同版本的ros&#xff0c;将ros的配置指令写成了脚本&#xff0c;要用ros前根据自己所需要执行对应的脚本 source /opt/ros/jazzy/setup.zsh如果你只用一个版本的ros&#xff0c;可以将执行脚本的指令写到对应shell的配置文件里&am…

STM32 ADC学习日记

STM32 ADC学习日记 1. ADC简介 ADC 即模拟数字转换器&#xff0c;英文详称 Analog-to-digital converter&#xff0c;可以将外部的模拟信号转换为数字信号。 STM32F103 系列芯片拥有 3 个 ADC&#xff08;C8T6 只有 2 个&#xff09;&#xff0c;这些 ADC 可以独立使用&…

10.9 Qt事件处理机制

键盘按键调整label移动 #include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QKeyEvent>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);}Widget::~Widget() {delete ui;…

解决新版Android studio不能连接手机的问题

我要说的是一个特例&#xff0c;装了22年的版本AS可以正常连接手机&#xff0c;装了23年以后新版本&#xff0c;AS不能正常连接手机了&#xff0c;但是在CMD控制台可以正常的执行adb命令&#xff0c;并且CMD和AS都是指向D:\android_sdk\platform-tools\adb.exe 一、 为什么会出…

【万字长文】Word2Vec计算详解(二)Skip-gram模型

【万字长文】Word2Vec计算详解&#xff08;二&#xff09;Skip-gram模型 写在前面 本篇介绍Word2Vec中的第二个模型Skip-gram模型 【万字长文】Word2Vec计算详解&#xff08;一&#xff09;CBOW模型 markdown行 9000 【万字长文】Word2Vec计算详解&#xff08;二&#xff09;S…

HCIA——one

推荐电影&#xff1a;《模仿游戏》《黑客帝国》《头号玩家》 图灵机每秒五千次计算&#xff0c;当今计算机4080ti算力每秒21万亿次的计算。 OSI七层模型 应用层&#xff1a;人机交互&#xff0c;将抽象语言转换成编码 表示层&#xff1a;将编码转换成二进制 介质访问控制层…

Vue3 + TypeScript + Vite + Echarts + DataV

Vue3 TypeScript Vite Echarts DataV 官网&#xff1a; datav datav-vue3 1、创建工程 npm create vitelatestcd datav-app npm install npm run dev2、安装项目依赖模块 npm install types/node --save-devnpm install vue-router4npm install animate.css --save npm i…

【093】基于SpringBoot+Vue实现的精品水果线上销售系统

系统介绍 视频演示 基于SpringBootVue实现的精品水果线上销售系统&#xff08;有文档&#xff09; 基于SpringBootVue实现的精品水果线上销售系统采用前后端分离的架构方式&#xff0c;系统设计了管理员、商家、用户三种角色&#xff0c;实现了公告类型管理、商家信誉类型管理…

网络编程(16)——asio多线程模型IOServicePool

目录 十六、day16 1. 什么是多线程&#xff1f; 2. IOServicePool实现 3. 服务器修改 4. 客户端修改 5. 总结 1. boost::asio::io_context::work的作用&#xff1f; 十六、day16 在之前的设计中&#xff0c;我们对 ASIO 的使用都是采用单线程模式。为了提升网络 I/O 并…

基于多能互补的热电联供型微网优化运行【matlab代码】

目录 1 主要内容 多能互补模型 算例分析 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序基本复现《基于多能互补的热电联供型微网优化运行》&#xff0c;在需求侧对负荷类型进行分类&#xff0c;利用电负荷的弹性和系统供热方式的多样性&#xff0c;构建含电负荷时…

常见的图像处理算法:中值滤波----median filter

一、中值滤波是什么 中值滤波法是一种非线性平滑技术&#xff0c;可用于消除孤立的噪声点。中值滤波在滤除噪声的同时&#xff0c;能够保护信号的边缘&#xff0c;使之不被模糊&#xff0c;这些特性是线性滤波方法所不具有的。 二、中值滤波的原理 中值滤波是将每一像素点的灰度…

数据结构进阶:二叉搜索树_C++

目录 前言&#xff1a; 一、二叉搜索树 1.1二叉搜索树概念 2.2 二叉搜索树操作 1. 二叉搜索树的插入 1.1、插入过程 1.2、代码实现 2、二叉树的删除 2.1、结点删除情况 2.2、替换删除法 1、替换思路 2、代码实现&#xff1a; 3、二叉搜索树的查找 3.1、查找规则 …

LLM - 配置 GraphRAG + Ollama 服务 构建 中文知识图谱

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142795151 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 GraphR…

基于springboot的公司财务管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的公司财务管理系统拥有两种角色 管理员&#xff1a;员工管理、部门管理、工资管理、资产管理、经营管理、利润管理等 员工&#xff1a;查看工资、查看公告、登录注册 1.…

OurTV 3.3.0 |流畅电视直播,收藏无忧

OurTV 是一款流畅的电视直播应用&#xff0c;支持电视版和手机版。增加收藏功能&#xff0c;修正了网络问题和潜在内存泄漏&#xff0c;调整最小版本到22&#xff0c;观看体验更佳。 大小&#xff1a;34M 百度网盘&#xff1a;https://pan.baidu.com/s/1UqEBfQx_1ztIUNx4fWopu…

《神经网络》—— 长短期记忆网络(Long Short-Term Memory,LSTM)

文章目录 一、LSTM的简单介绍二、 LSTM的核心组件三、 LSTM的优势四、 应用场景 一、LSTM的简单介绍 传统RNN循环神经网络的局限&#xff1a; 示例&#xff1a;当出现“我的职业是程序员。。。。。。我最擅长的是电脑”。当需要预测最后的词“电脑”。当前的信息建议下一个词可…

iOS Object-C 将数组倒置(倒叙)

使用NSArray自带的对象方法:reverseObjectEnumerator 代码如下: NSArray * tempArray [[NSArray alloc]initWithObjects:"a","b","c","d", nil]; //将tempArray转换成["d","c","b","a"]; …

PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(四)

无论100个表还是30个表&#xff0c;在使用PasteForm模式的时候&#xff0c;管理端的页面是一样的&#xff0c;大概4个页面&#xff0c; 利用不同操作模式下的不同dto数据模型&#xff0c;通过后端修改对应的dto可以做到控制前端的UI&#xff0c;在没有特别特殊的需求下可以做到…