快速理解 X server, DISPLAY 与 X11 Forwarding

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,然后运行了如下命令
# 树莓派的Shellexport 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.mzph.cn/news/55338.shtml

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

相关文章

Mybatis查询数据

上一篇我们介绍了在pom文件中引入mybatis依赖&#xff0c;配置了mybatis配置文件&#xff0c;通过读取配置文件创建了会话工厂&#xff0c;使用会话工厂创建会话获取连接对象读取到了数据库的基本信息。 如果您需要对上面的内容进行了解&#xff0c;可以参考Mybatis引入与使用…

再见 Xshell替代工具Tabby

替代Xshell 之前经常使用Xshell来操作Linux虚拟机&#xff0c;基本上是够用了。但是Xshell免费使用只供非商业用途&#xff0c;而且如果你想用FTP来进行文件传输的话&#xff0c;还需单独下载Xftp。 无意中发现了另一款开源的终端工具Tabby&#xff0c;它直接集成了SFTP功能&…

十几款拿来就能用的炫酷表白代码

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 表白代码 1、坐我女朋友好吗&#xff0c;不同意就关机.vbs2、坐我女朋友好吗&…

基于静电放电算法优化的BP神经网络(预测应用) - 附代码

基于静电放电算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于静电放电算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.静电放电优化BP神经网络2.1 BP神经网络参数设置2.2 静电放电算法应用 4.测试结果&#xff1a;5…

【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…

信息化发展2

信息系统生命周期 1 、软件的生命周期通常包括&#xff1a;可行性分析与项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等阶段。 2 、信息系统的生命周期可以简化为&#xff1a;系统规划&#xff08;可行性分析与项目开发计划&#xff09;&#xff0c;系统分析…

Unity 之 transform.rotate() 实现旋转

文章目录 详细介绍默认情况下&#xff0c;以局部坐标 详细介绍 在Unity中&#xff0c;Transform.Rotate() 是一个用于在物体上进行旋转的函数。它可以用来在局部坐标系下对物体进行旋转&#xff0c;也可以在世界坐标系下进行旋转。下面是关于 Transform.Rotate() 的详细介绍&a…

2. 使用IDEA创建Spring Boot Hello项目并管理依赖——Maven入门指南

前言&#xff1a;本文将介绍如何使用IDEA创建一个Spring Boot Hello项目&#xff0c;并通过Maven来管理项目的依赖。我们从项目的创建到代码的编写&#xff0c;再到项目的构建和运行&#xff0c;一步步演示了整个过程。 &#x1f680; 作者简介&#xff1a;作为某云服务提供商的…

DataFun:推荐系统峰会

工程架构与训练推理 TFDE 多场景多目标融合 企业知识推荐系统 ATA内部社区 房产推荐场景的算法实践

chatGPT界面

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head><title>复选框样式示例</title> </head> <style>* {padding:0;margin: 0;}.chatpdf{display: flex;height: 100vh;flex-direction: row;}.chatpdf .pannel{widt…

回归预测 | MATLAB实现SSA-ELM麻雀搜索算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SSA-ELM麻雀搜索算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现SSA-ELM麻雀搜索算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基…

UnitTest笔记: 拓展库DDT的使用

DDT (Data-Drivers- Tests) 允许使用不同的测试数据运行同一个测试用例&#xff0c;展示为不同的测试用例。 第一步&#xff1a; pip安装 ddt 第二步&#xff1a; 创建test_baidu_ddt.py 1. 测试类要使用ddt 修饰 2. 不同形式的参数化&#xff1a; 列表&#xff0c;字典&a…

数据隐私与安全在大数据时代的挑战与应对

文章目录 数据隐私的挑战数据安全的挑战应对策略和方法1. 合规和监管2. 加密技术3. 匿名化和脱敏4. 安全意识培训5. 隐私保护技术 结论 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&…

糟改押ong韵诗词,末三字改qiao ben zhong

题目给出诗词行的汉语拼音&#xff0c;糟改诗词押ong诗词行末三字“敲笨钟“。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff…

OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法

最近在windows下面用cmake编译OpenCV的项目代码,但是一直碰到找不到mutex的问题&#xff0c;百思不得其解, Executing task: g -g -o bin/debug.exe src/main.cppC:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:697:14: error: recursive_mutex in namespace st…

uniapp返回上一页并刷新

在uniapp中&#xff0c;经常会有返回上一页的情况&#xff0c;官方提供有 uni.navigateBack 这个api来实现效果&#xff0c;但是此方法返回到上一页之后页面并不会更新&#xff08;刷新&#xff09;。 例如有这样一个场景&#xff1a;从地址列表页点击添加按钮进入添加地址页面…

MySQL详细安装与配置

免安装版的Mysql MySQL关是一种关系数据库管理系统&#xff0c;所使用的 SQL 语言是用于访问数据库的最常用的 标准化语言&#xff0c;其特点为体积小、速度快、总体拥有成本低&#xff0c;尤其是开放源码这一特点&#xff0c;在 Web 应用方面 MySQL 是最好的 RDBMS(Relation…

带你启用window10专业版系统自带的远程桌面

启用window10专业版系统自带的远程桌面 文章目录 启用window10专业版系统自带的远程桌面前言1.找到远程桌面的开关2. 找到“应用”项目3. 打开需要远程操作的电脑远程桌面功能 总结 前言 Windows操作系统作为应用最广泛的个人电脑操作系统&#xff0c;在我们身边几乎随处可见。…

【应用层】网络基础 -- HTTP协议

再谈协议HTTP协议认识URLurlencode和urldecodeHTTP协议格式HTTP的方法HTTP的状态码HTTP常见HeaderHTTP周边会话保持 再谈协议 协议是一种 “约定”. socket api的接口&#xff0c;在读写数据时&#xff0c;都是按 “字符串” 的方式来发送接收的(tcp是以字节流的方式发送的&am…

浏览器的事件循环

其实在我们电脑的操作系统中&#xff0c;每一个运行的程序都会由自己的进程&#xff08;可能是一个&#xff0c;也可能有多个&#xff09;&#xff0c;浏览器就是一个程序&#xff0c;它的运行在操作系统中&#xff0c;拥有一组自己的进程&#xff08;主进程&#xff0c;渲染进…