快速理解 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是一个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.0127.0.0.1:1.0localhost:10.0
    • 含义: X client读取该值后,会把绘图命令发送给<机器的IP或主机名>上的<机器运行的第几号X server>,请求该X server将GUI绘制在<该X server管理的第几号screen>
    • 注意: X client与X server可以位于不同机器,通过TCP协议通信

注意:

  • :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系统或Windows系统)和一个树莓派(Linux系统)。现需要在树莓派的Linux系统里运行火狐浏览器,然后把浏览器的图形界面展现在笔记本电脑上。

  • 假设笔记本电脑的IP为192.168.142.181,仅有一块显示屏。

  • 笔记本电脑的系统里运行着一个0X server。该X server管理着一个0screen0screen的内容会展现在笔记本的显示屏中。
    若电脑为带有桌面的Linux系统,则应当默认开启了上述的X server。若电脑为Windows系统,可以使用自带X server的MobaXtermWindTerm终端模拟器。如下图所示,打开MobaXterm后,一个0X server将会自动运行。
    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.1192.168.142.181等)上来自6000 + 该服务器运行的第几号X server(即6000TCP端口的绘图请求。
  1. 树莓派开始运行火狐浏览器。火狐浏览器是一个图形用户界面GUI)程序,必须找到一个地方显示图形界面。
  2. 火狐浏览器此刻的身份是X client。X client为了找到自己应该“在哪里绘制和显示图形界面”,首先会获取当前Shell中DISPLAY变量的值192.168.142.181:0.0
  3. X client解析完DISPLAY的值后,会把GUI绘图请求通过TCP协议发送至192.168.142.181机器的6000 + 0(即6000)端口,请求“将绘制结果显示在该X server管理的第0screen上”。
  4. 192.168.142.181机器上,负责监听6000端口的0X server收到请求。X server解析绘图指令,并在指定的0screen中绘图。
  5. 火狐浏览器的图形界面出现在0screen对应的显示器中,也就是出现在了笔记本电脑的屏幕上。
    火狐浏览器

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程序:

  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

使用 X11 Forwarding 的优缺点

  • 优点:给X server与X client之间的通讯提供了一个加密信道。原本X server与X client之间的通讯是未加密的,有信息泄露与遭受中间人攻击的风险。
  • 缺点:双方机器需要进行加/解密任务。对于CPU性能较弱的嵌入式平台,加/解密可能会成为性能瓶颈,导致图形界面传输卡顿、延迟。

参考

What are X server, display and screen?
DISPLAY

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/
Linux图形技术栈

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值