大家好,欢迎来到IT知识分享网。
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的通信方式有三种:
TCP
,unix socket
和通过内存通信
。后两种方式仅限于X client与X server都位于同一机器的情况,通信效率更高。
概念关系
- 一台电脑上可以运行多个X server
- 一个X server可以管理多个screen
- 一个screen可以对应单个或多个物理显示器(多个显示器合成一个逻辑screen)
DISPLAY
概念解释
DISPLAY
是一个Shell变量,它的值用于控制“在哪里绘制和显示图形界面”。- X client为了找到自己应该在哪里绘制和显示图形界面,首先会获取并解析当前Shell中
DISPLAY
变量的值。接着,X client根据解析结果,把绘图命令发送给对应的X server。
DISPLAY 变量值的格式
:<机器运行的第几号X server>.<该X server管理的第几号screen>
- 示例:
:0.0
,:0.1
,:1.0
- 含义: X client读取该值后,会把绘图命令发送给
<机器运行的第几号X server>
,请求该X server将GUI绘制在<该X server管理的第几号screen>
上 - 注意: X client与X server必须位于同一机器,通过
unix socket
或内存
通信
- 示例:
<机器的IP或主机名>:<该机器运行的第几号X server>.<该X server管理的第几号screen>
- 示例:
192.168.1.2:0.0
,127.0.0.1:1.0
,localhost:10.0
- 含义: X client读取该值后,会把绘图命令发送给
<机器的IP或主机名>
上的<机器运行的第几号X server>
,请求该X server将GUI绘制在<该X server管理的第几号screen>
上 - 注意: X client与X server可以位于不同机器,通过
TCP协议
通信
- 示例:
注意:
:0.0
,127.0.0.1:0.0
和localhost:0.0
效果上都是在同一机器绘图,但是:0.0
走的是unix socket
或内存
通信,后两者则是TCP协议
通信。localhost
是一个特殊的主机名,特指机器自身。在IPV4语境下,localhost
主机名经过查表后会被翻译为IP地址127.0.0.1
。因此,127.0.0.1:0.0
和localhost:0.0
表意相同。
使用场景
假设手头上有一台笔记本电脑(Linux系统或Windows系统)和一个树莓派(Linux系统)。现需要在树莓派的Linux系统里运行火狐浏览器,然后把浏览器的图形界面展现在笔记本电脑上。
- 假设笔记本电脑的IP为
192.168.142.181
,仅有一块显示屏。 - 笔记本电脑的系统里运行着一个
0
号X server
。该X server
管理着一个0
号screen
。0
号screen
的内容会展现在笔记本的显示屏中。
若电脑为带有桌面的Linux系统,则应当默认开启了上述的X server。若电脑为Windows系统,可以使用自带X server的MobaXterm或WindTerm终端模拟器。如下图所示,打开MobaXterm后,一个0
号X server
将会自动运行。
- 树莓派和笔记本电脑处于同一局域网,并且树莓派没有连接显示屏。
- 在笔记本电脑上,通过SSH登录树莓派系统的Shell,然后运行了如下命令
# 树莓派的Shell export DISPLAY=192.168.142.181:0.0 firefox
上述命令的含义为
给变量
DISPLAY
赋值192.168.142.181:0.0
并将其设置为当前Shell的环境变量。在Shell中运行”火狐浏览器“。
在执行以上命令后,主要经历了下面几个步骤:
- 前提条件:笔记本电脑上运行着
0
号X server,它会监听本机所有IP(包括127.0.0.1
,192.168.142.181
等)上来自6000 + 该服务器运行的第几号X server
(即6000
)TCP
端口的绘图请求。
- 树莓派开始运行火狐浏览器。火狐浏览器是一个图形用户界面(GUI)程序,必须找到一个地方显示图形界面。
- 火狐浏览器此刻的身份是X client。X client为了找到自己应该“在哪里绘制和显示图形界面”,首先会获取当前Shell中
DISPLAY
变量的值192.168.142.181:0.0
。 - X client解析完
DISPLAY
的值后,会把GUI绘图请求通过TCP协议
发送至192.168.142.181
机器的6000 + 0
(即6000
)端口,请求“将绘制结果显示在该X server管理的第0
号screen上”。 - 在
192.168.142.181
机器上,负责监听6000
端口的0
号X server收到请求。X server解析绘图指令,并在指定的0
号screen中绘图。 - 火狐浏览器的图形界面出现在
0
号screen对应的显示器中,也就是出现在了笔记本电脑的屏幕上。
X11 Forwarding(X11转发)
What You Need to Know About X11 Forwarding
X11转发是由SSH server与SSH client提供的一项功能。使用X11转发功能后,SSH server与SSH client可以用SSH的加密信道 代为转发 X server和X client之间的通信。
概念解释
- SSH client:SSH客户端。安装了SSH client的机器可以使用
ssh
命令,向网络上其它机器的SSH server发送连接请求。请求被同意后,用户可以通过SSH client访问远程机器的Shell。在访问过程中,数据传输是安全加密的。 - SSH server:SSH服务器。SSH server会监听指定
TCP
端口(默认22
端口)上来自SSH client的连接请求。请求被同意后,SSH server与SSH client建立加密连接,进行通讯。
使用场景
# 本地机器的Shell # 本地机器运行着0号X server,管理着0号screen # 配置本地机器的DISPLAY环境变量 export DISPLAY=127.0.0.1:0.0 # 开启X11转发功能的SSH连接,连接到远程不带X server的机器 ssh -X 远程机器用户名@远程机器IP地址 # ------------------------------------------------------------------------------ # 远程机器的Shell # 远程机器的SSH server接收到一个 开启X11转发功能的 SSH连接请求 # 带X11转发的SSH连接建立后,远程机器的SSH server会充当X server # 默认充当第10号X server,可以在SSH Server的配置文件/etc/ssh/sshd_config中修改 # 应当打印localhost:10.0 echo $DISPLAY # 在远程机器的Shell中运行一个GUI程序 xterm
在远程机器的Shell中运行一个GUI程序:
- 远程机器的X client解析Shell环境变量DISPLAY的值
localhost:10.0
,通过TCP协议
向远程机器自身的第10
号X server发送绘图请求。 - 远程机器上的SSH server会充当第
10
号X server,接收这个请求。 - SSH server把请求通过加密信道传输给本地机器的SSH client。
- 本地机器的SSH client接受到绘图请求后,会充当X client,解析本地Shell环境变量DISPLAY的值
127.0.0.1:0.0
,然后向对应的X server发送绘图请求。 - 本地机器的第
0
号X server接收到绘图请求,在指定的0
号screen中绘图。 - 图形界面出现在本地机器的
0
号screen对应的显示器中。
使用 X11 Forwarding 的优缺点
- 优点:给X server与X client之间的通讯提供了一个加密信道。原本X server与X client之间的通讯是未加密的,有信息泄露与遭受中间人攻击的风险。
- 缺点:双方机器需要进行加/解密任务。对于CPU性能较弱的嵌入式平台,加/解密可能会成为性能瓶颈,导致图形界面传输卡顿、延迟。
参考
What are X server, display and screen?
X11 相关的现代技术
Xpra
https://github.com/Xpra-org/xpra
Xpra is known as “screen for X” : its seamless mode allows you to run X11 programs, usually on a remote host, direct their display to your local machine, and then to disconnect from these programs and reconnect from the same or another machine(s), without losing any state.
Xpra的一大亮点在于——用户可以在机器的浏览器中查看X11窗口的渲染结果!
X2Go
https://wiki.x2go.org/doku.php
X2Go enables you to access a graphical desktop of a computer over a low bandwidth (or high bandwidth) connection.
X2Go是一种远程桌面连接技术,即使在低带宽的连接下也可以渲染图形桌面!
Linux图形技术栈
https://flusp.ime.usp.br/blogs,/kernel-graphics/an_introduction_to_the_linux_graphics_stack/
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/116050.html