快速理解 X server, DISPLAY 与 X11 Forwarding

news2024/11/19 5:39:09

X server

X server是X Window System (简称X11或者X)系统中的显示服务器(display server),用于监听X client发送来的图形界面显示请求,并且将图形界面绘制并显示在屏幕(screen)上

概念解释

  • X client:X客户端。通常是各类GUI应用,如Firefox浏览器、xterm、xclock等等
  • screen:逻辑概念上的屏幕。可以是一台物理显示器、多台物理显示器或者是VNC虚拟显示器
  • X client与X server的通信方式有三种:TCPunix socket通过内存通信。后两种方式仅限于X client与X server都位于同一机器的情况,通信效率更高。

概念关系

  • 一台电脑上可以运行多个X server
  • 一个X server可以管理多个screen
  • 一个screen可以对应单个或多个物理显示器(多个显示器合成一个逻辑screen)

X server

DISPLAY

DISPLAY变量用于控制“在哪里绘制和显示图形界面”。

DISPLAY变量值的格式:

  1. X client与X server都位于同一机器,通过unix socket内存通信
    :<机器运行的第几号X server>.<该X server管理的第几号screen>
    :0.0:0.1:1.0
  2. X client与X server位于不同机器,通过TCP协议通信
    <机器的IP或主机名>:<该机器运行的第几号X server>.<该X server管理的第几号screen>
    192.168.1.2:0.0127.0.0.1:1.0localhost:10.0

注意:

  • :0.0127.0.0.1:0.0localhost:0.0效果上都是在同一机器绘图,但是:0.0走的是unix socket内存通信,后两者则是TCP协议通信。
  • localhost是一个特殊的主机名,特指机器自身。在IPV4语境下,localhost主机名经过查表后会被翻译为IP地址127.0.0.1。因此,127.0.0.1:0.0localhost:0.0表意相同。

使用场景

我需要在树莓派的Linux系统里运行火狐浏览器,然后把浏览器的图形界面展现在我的笔记本电脑上。

  • 我有一台笔记本电脑,IP为192.168.31.200,仅有一块显示屏。
  • 笔记本电脑的系统里运行着一个0X server。该X server管理着一个0screen0screen的内容会展现在笔记本的显示屏中。
  • 我还有一块树莓派Linux开发板。树莓派和笔记本电脑处于同一局域网,并且树莓派没有连接显示屏。
  • 我在笔记本电脑上,通过SSH登录树莓派系统的Shell,然后运行了如下命令
# 树莓派的Shell

export DISPLAY=192.168.31.200:0.0
firefox

上述命令的含义为

给变量DISPLAY赋值192.168.31.200:0.0并将其设置为当前Shell的环境变量。

在Shell中运行”火狐浏览器“。

在执行以上命令后,主要经历了下面几个步骤:

  • 前提条件:我的笔记本电脑上运行着0号X server,它会监听本机所有IP(包括127.0.0.1192.168.31.200等)上来自6000 + 该服务器运行的第几号X server(即6000TCP端口的绘图请求。
  1. 我在树莓派的Shell中运行了火狐浏览器。火狐浏览器是一个图形用户界面GUI)程序,必须找到一个地方显示图形界面。
  2. 火狐浏览器此刻的身份是X client。X client为了找到自己应该“在哪里绘制和显示图形界面”,首先会获取当前Shell中DISPLAY变量的值192.168.31.200:0.0
  3. X client解析完DISPLAY的值后,会把GUI绘图请求通过TCP协议发送至192.168.31.200机器的6000 + 0(即6000)端口,请求“将绘制结果显示在该X server管理的第0screen上”。
  4. 192.168.31.200机器上,负责监听6000端口的0X server收到请求。X server解析绘图指令,并在指定的0screen中绘图。
  5. 火狐浏览器的图形界面出现在0screen对应的显示器中,也就是出现在了我笔记本电脑的屏幕上。

X11 Forwarding

What You Need to Know About X11 Forwarding

# 本地机器的Shell

# 配置本地机器的DISPLAY环境变量
export DISPLAY=127.0.0.1:0.0

# 开启X11 Forwarding功能的SSH连接
ssh -X 远程机器用户名@远程机器IP地址

# 登录远程机器的Shell后
# Shell的DISPLAY环境变量会被SSH server自动设置为localhost:10.0

在远程机器的Shell中运行一个GUI程序:

  1. 远程机器的X client解析Shell环境变量DISPLAY的值localhost:10.0,通过TCP协议向远程机器自身的第10号X server发送绘图请求。
  2. 远程机器上的SSH server会充当第10号X server,接收这个请求。
  3. SSH server把请求通过加密隧道传输给本地机器的SSH client。
  4. 本地机器的SSH client接受到绘图请求后,会充当X client,解析本地Shell环境变量DISPLAY的值127.0.0.1:0.0,然后向对应的X server发送绘图请求。
  5. 本地机器的第0号X server接收到绘图请求,在指定的0号screen中绘图。
  6. 图形界面出现在本地机器的0号screen对应的显示器中。
    X11 Forwarding

参考

What are X server, display and screen?
DISPLAY

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

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

相关文章

粒子群算法的基本原理和Matlab实现

1.案例背景 1.1 PSO算法介绍 粒子群优化算法(Particle Swarm Optimization,PSO)是计算智能领域,除了蚁群算法,鱼群算法之外的一种群体智能的优化算法,该算法最早是由Kennedy和 Eberhart 在1995年提出的。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时,每只鸟找到食物最简单有效…

webassembly003 ggml GGML Tensor Library part-3

关于pthread_create()和pthread_join() #include <stdio.h> #include <pthread.h>void *thread_func(void *arg) {int *num (int *)arg;printf("Hello from thread! arg%d\n", *num);pthread_exit(NULL); }int main() {pthread_t thread;int arg 10;i…

解锁开发中的创意:用户为中心的设计思维的力量

引言 设计思维&#xff0c;起源于20世纪60年代&#xff0c;是一种解决问题的方法。它不仅仅是设计师的专利&#xff0c;而是一种可以广泛应用于各种行业和领域的方法。设计思维强调了用户至中的重要性&#xff0c;认为任何问题的解决都应该从用户的需求出发。这种方法鼓励我们…

反转链表+交换两个链表的节点

目录 ​编辑 一&#xff0c;反转链表 1.题目描述 2.例子 3.题目接口 4.分析以及解题代码 1.迭代法 2.递归写法 二&#xff0c;两两交换两个链表中的节点 1.题目描述 2.例子 3.题目接口 4.题目分析以及解法 一&#xff0c;反转链表 1.题目描述 首先来看看反转链表的…

主流深度学习框架及神经网络模型汇总

目录 主流深度学习框架及神经网络模型汇总 一、人工智能的研究领域和分支 二、主流深度学习框架​编辑 1.TensorFlow 2.PyTorch 3.PaddlePaddle 4.Keras 5.Caffe/Caffe2 6.MXNet 7.Theano 8.Torch 9.CNTK 10.ONNX 三、深度学习移动端推理框架 1.TensorRT 2.TF-…

LabVIEW是如何控制硬件的?

概述 工程 师 和 科学 家 可以 使用 LabVIEW 与 数千 种 不同 的 硬件 设备 无缝 集成&#xff0c; 并 通过 方便 的 功能 和 跨 所有 硬件 的 一致 编 程 框架 帮助 节省 开发 时间。 内容 通过更简单的系统集成节省开发时间 连接到任何硬件 NI 硬件 第三方硬件 快速找到…

数据库事务四大特性

事务的4大特性&#xff08;ACID&#xff09;&#xff1a; 原子性(Atomicity)&#xff1a; 事务是数据库的逻辑工作单位&#xff0c;它对数据库的修改要么全部执行&#xff0c;要么全部不执行。 一致性(Consistemcy)&#xff1a; 事务前后&#xff0c;数据库的状态都满足所有的完…

Python之defaultdict方法详解

文章目录 字典dict介绍collections.defaultdict类 字典dict介绍 python中的dict是一个重要的数据类型,用“键”(key)来索引&#xff0c;表示为dict(key: val, …),有以下特征&#xff1a; 键可以是任何不可变(immutable)数据类型不可变数据类型有&#xff1a;数字&#xff0c…

嵌入式软件设计

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

手写数字识别之损失函数

目录 交叉熵 手写数字识别之损失函数 分类任务的损失函数 Softmax函数 交叉熵的简单理解&#xff1a;真实分布与非真实分布的交叉&#xff0c;完全对应&#xff0c;熵为0 交叉熵的代码实现 交叉熵 给定一个策略, 交叉熵就是在该策略下猜中颜色所需要的问题的期望值。更普…

三、JVM监控及诊断工具-GUI篇

目录 一、工具概述二、jconsole&#xff08;了解即可&#xff09;1、基本概述2、启动3、三种连接方式4、作用 三、Visual VM 一、工具概述 二、jconsole&#xff08;了解即可&#xff09; 1、基本概述 从Java5开始&#xff0c;在JDK中自带的Java监控和管理控制台用于对JVM中内…

【mindspore学习】环境配置

本次实验搭配的环境是 CUDA 11.6 CUDNN v8.9.4 TensorRT-8.4.1.5 mindspore 2.1.0。 1、配置 Nvidia 显卡驱动 如果原来的主机已经安装了 nvidia 驱动&#xff0c;为避免版本的冲突&#xff0c;建议先清除掉旧的 nvidia驱动 sudo apt-get --purge remove nvidia* sudo apt…

土豆叶病害识别(图像连续识别和视频识别)

效果视频&#xff1a;土豆叶病害识别&#xff08;Python代码&#xff0c;pyTorch框架&#xff0c;视频识别&#xff09;_哔哩哔哩_bilibili 代码运行要求&#xff1a;Torch库>1.13.1&#xff0c;其它库无版本要求 1..土豆叶数据集主要包好三种类别&#xff08;Early_Blight…

分布式训练 最小化部署docker swarm + docker-compose落地方案

目录 背景&#xff1a; 前提条件&#xff1a; 一、docker环境初始化配置 1. 安装nvidia-docker2 2. 安装docker-compose工具 3. 获取GPU UUID 4. 修改docker runtime为nvidia&#xff0c;指定机器的UUID 二、docker-swarm 环境安装 1. 初始化swarm管理节点 2. 加入工…

Redis数据类型全总结【万字总结】

文章目录 前言一、String1、内部实现2、应用场景缓存对象常规计数分布式锁共享 Session 信息 3、常用指令 二、List1、内部实现2、应用场景消息队列List 作为消息队列有什么缺陷 3、常用指令 三、Hash1、内部实现2、应用场景缓存对象购物车 3、常用指令 四、Set1、内部实现2、应…

10万字智慧政务大数据平台项目建设方案222页[Word]

导读&#xff1a;原文《10万字智慧政务大数据平台项目建设方案222页[Word]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 1.1 项目建设目标 推进市一级政府搭建数…

测试.net开源音频库NAudio

微信公众号“dotNET跨平台”看到一篇文章《【.NET】使用NAudio实现录音功能》介绍基于NAudio实现录音功能&#xff08;参考文献1&#xff09;。NAudio是开源.net音频库&#xff0c;其支持播放多种格式的音频&#xff08;WAV、AIFF、MP3、WMA等&#xff09;、音频格式转换、录音…

lnmp架构-mysql

1.MySQL数据库编译 make完之后是这样的 mysql 初始化 所有这种默认不在系统环境中的路径里 就这样加 这样就可以直接调用 不用输入路径调用 2.初始化 重置密码 3.mysql主从复制 配置master 配置slave 当master 端中还没有插入数据时 在server2 上配slave 此时master 还没进…

【MongoDB系列】-MongoDB详解(一文让你明白什么是MongoDB)

MongoDB简介 MongoDB 是一个开源的、跨平台的、面向文档的、基于分布式文件存储的数据库系统&#xff0c;MongoDB 是由 C 语言开发&#xff0c;旨在为 Web 应用提供可扩展的高性能数据存储解决方案。在高负载的情况下&#xff0c;通过添加更多的节点&#xff0c;可以保证服务器…

基于YOLOV8模型的人脸口罩目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOV8模型的人脸口罩目标检测系统可用于日常生活中检测与定位人脸口罩&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数…