慧中也要秀外 – X Window 体系的实现


X Window System 的发展

X Window System 是开源社区的典型项目,其发展过程极具特色。

X Window System 出自 Athena 项目,最初源于校园内网络化显示系统搭建的实际应用需求,随着商业企业的加入和项目的不断进展,逐步从高校转为产业界,并最终依托开源社区持续演化。发展至今,X Window System 已有 30 多年的成长历史,一路走来经历了起起伏伏,既有领导机构几经变更,也有开枝散叶后的辉煌与没落;有开发模式的转型,也有许可证变迁引发的连锁效应。X Window System 的发展历程,也是众多自由开源软件发展的一个典型缩影。

任何出色的成果都不是一蹴而就的,都需要前序成果的铺垫与借鉴,X 也不例外。在 X 出现之前,已有一些位图显示系统。

VENDOR DISPLAY SYSTEM
Xerox Alto (1973)
Xerox Star (1981)
Apollo Computer Display Manager (1981)
Apple Lisa (1983)
Apple Macintosh (1984)
Rob Pike Blit terminal (1982)
Carnegie Mellon University Alto Terminal
Carnegie Mellon University Andrew Project (1982)
Stanford University W window system (pre-1983)

1984 年 6 月,在 Athena 项目实际需求的驱动下,MIT 的 Bob Scheifler 在 W 窗口系统(最早用于 V Operating System)的基础上,进行了改良优化,创造了一种新的窗口系统。为便于区别,Scheifler 用英文字母表中 W 的后一个字母为这个新的窗口系统命名,即 X window system,也称为 X1。日后名震江湖的 X 系统就此诞生!

X 是当时第一个真正意义上实现了硬件独立和厂商独立的窗口系统环境,这一极具吸引力的特点,使得 X 一经发布,就得到了各方青睐,不断被移植到其他架构的计算机系统,拓展适用平台,与之伴随的是新功能也不断被加入到 X 中。X 进入全面发展期:

  • 从 1984 年 6 月到 1986 年底,短短 1 年半时间,经历了 X1 到 X10 的 10 个版本更新
  • 1987 年 9 月,X 迎来了里程碑版本 X11 的发布;X 以 X11 版本号一直发展延续至今
  • 随着 X 的发展,MIT 作为高校期望放弃对 X 系统的监管;经过与企业的沟通,成立 MIT X Consortium 继续管理 X
  • MIT X Consortium 之后,相继成立 X Consortium, Inc、The Open Group、X.Org 等组织对 X 进行管理,但 X 的发展中心已慢慢发生变化
  • 一个最初将 X 移植到 IBM PC 兼容机上的不那么显眼的分支 X386,悄然间不断发展。1992 年,它有了一个更为响亮的名字 — XFree86。随着 Intel 体系和 Linux 的流行,XFree86 随势得到了业界的关注,并逐步从一个特定平台上的 X 移植成长为 X 系统开发的主导力量和事实上的标准,在这个期间,XFree86 项目成为 X 系统的创新高地,而 X.Org 监管下的 X 开发基本处于停滞不前的状态
  • XFree86 项目的开发模式一直存在争议,但其真正的发展转折点出现在 2004 年 2 月发布的 4.4 版本。该版本采用了新的 XFree86 License,这个许可证被业界认为与之前许可证不兼容,并违背了 X 的初衷,从而直接导致后续 XFree86 开发和支持力量的流失。很多项目回退使用许可证未变更之前的版本,即 XFree86 4.4 RC2,原来支持 XFree86 项目的大多数操作系统转而重点支持 X.Org Foundation 监管下的 X.Org Server 项目,XFree86 项目自此没落
  • 得到支持 X.Org Server 顺利抓住 X 系统发展的接力棒,成长为 X 系统创新的新阵地
    • 2004 年 4 月,发布第一个版本 X.Org 6.7
    • 2005 年 12 月,发布 X.Org 7.0,从原来的源代码的统一体发布,更新为源代码的模块化发布;其中,X 系统中的 display server — xorg 第一个版本 1.0.1 独立发布
    • 2012 年 6 月,最后一个 X 系统的全量发布 — X11R7.7。未来,X 系统中的各个模块,都按照自身发展需求自行安排更新发布,不再统一版本的全量发布
  • 至今,X11 各个项目独立发展,不断更新迭代 ( releases / git repositories )

pic-1

从 X Window System 发展中得到的启示

X Window System 几十年的发展,为自由开源软件的发展积累了很多经验,启迪很多。

  • 许可证在自由开源领域非常关键,许可证(条款)的变化可能直接影响一个开源项目的起落
  • 聚焦于解决实际中重要问题而进行的深入开发,比起那些先聚焦技术提升而进行深入研发,再去寻求某个问题加以解决的情况,会取得更大的成功。工程领域研发一定要首先源于生产实践的问题,走一条 生产 --> 研发 --> 生产 之路
  • 一个真正且迫切的需求(问题)的解决,即使其 side-effect 都是带来大量真正有意义的突破和创新。创造 X 系统的 Athena 项目就是典型例子。除了满足项目实际需求,Athena 为计算机领域带来了一些系列前沿系统架构和设计创新:
    • 三层的服务器/客户端分布式计算架构
    • 瘦客户端桌面/无状态桌面
    • Kerberos 加密认证与授权
    • Hesiod 命名服务
    • X Window System
    • X tool kit
    • 即时通信 (Zephyr 实时通知服务)
    • Moira 服务管理系统
    • 在线帮助系统 (OLH)
    • BBS (Discuss)

X Window System 典型应用程序

经过多年的发展,X Window System 也发展出了蓬勃多样的软件生态体系。作为 X 发展的中心,X.Org Foundation 本身也构建并发布了一套丰富多样的软件体系。

X.Org Foundation 的软件体系中,最重要的当然是完成 GUI 任务最基本的 X Server 程序和各种 X Client 程序,除此之外,为 GUI 显示顺利完成的一系列配置和调试工具也是必不可少,比如针对字体进行配置和管理的工具、对 GUI 资源进行管理的工具、对键盘显示器进行管理的工具、对剪切板管理的工具、对 Server/Client 体系进行访问控制的工具、对网络代理和防火墙进行管理的工具等。

X.Org Foundation 发布的典型应用程序如下,

用途 名称
display server Xserver(X), Xorg
window manager twm
display manager xdm
terminal emulator xterm
clock xclock, oclock
mail interface xmh
bitmap editror bitmap
console redirect xconsole
access control xauth, xhost, iceauth
resource listing/manipulation appres, editres
font index creation (for a directory) mkfontdir
font index creation (for scalable font) mkfontscale
font displayer xfd
font server & related utilities xfs, fsinfo, fslsfonts, fstobdf
font complier bdftopcf
listing information(font, windows, displays) xlsfonts, xwininfo, xlsclients, xdpyinfo, xlsatoms, xprop
user preference setting xrdb, xcmsdb, xset, xsetroot, xstdcmap, xmodmap
screen image manipulation xwd, xwud, xmag
clipboard manager xclipboard
keyboard description complier & related utilities xkbcomp, setxkbmap, xkbprint, xkbbell, xkbevd, xkbvled, xkbwatch
terminate clients xkill
performance measurement x11perf
firewall security proxy xfwp
proxy manager proxymngr
find proxies xfindproxy
web browser plug-ins libxrx.so, libxrxnest.so
RX MIME-type helper xrx
screen to redrawn xrefresh

X Window System 的实现

X Server 的指令形式设计

X.Org Foundation 提供的 display server 解决方案很有特点。为了 display server 的多样性发展,并为后续不同 display server 提供更好的兼容性,对 display server 的指令实现采用分层设计。“外层(宏观)” 指令是一个 “虚” 指令,被设计为通用的 display server 指令,以此可以作为 display server 启动各种相关参数的统一接口;“内层” 指令则是 “实” 指令,是真正实际执行的某个具体的 display server 指令。通过某种机制(如链接或拷贝),将外层的 “虚” 指令与内层的 “实” 指令进行连接,如此,除了使用内层 “实” 指令直接启动 display server 外,也可以使用外层 “虚” 指令启动 display server,通过 “虚” 指令完成了指令接口的统一封装,无论真正实际执行的 display server 指令如果变化,接口层面的启动指令可以保持一致。

display server 的虚实指令设计,与抽象类/具体类设计思路非常相似,实现了指令层面的一种 “多态” 的能力

在 X.Org Foundation 中,承担 “虚” 指令的是 X 指令,其指令结构如下,

X [ option … ]

X 是一个 X 窗口系统 display server 的通用指令,在具体执行时,它需要转到真正某个具体的 X Server 指令,因此,X 指令有几个显著特点,

  • X 通常以一个链接(软链接)或者拷贝的形式关联到真正的 X Server,在 Linux 系统中,X 指令是 Xorg 指令的一个软链接
  • X 是 “虚” 指令,则它的命令输入参数是所有 X Server 都能接收的共性参数

xorg 指令是真正的 display server 的 “实” 指令,其指令结构如下,

Xorg [ option … ]

Xorg 是一个功能全面的 X Server,支持多种体系结构,如 Intel IA64、AMD64、SPARC、PowerPC、Compaq Alpha 等;支持类 Unix 操作系统,如 Linux、FreeBSD、Solaris 等。

X Server 多平台指令实例

X.Org Foundation 为多种平台提供了 X Server 的具体指令实现,

  • Xorg 是专门支持类 Unix 平台的 X Server 实现
  • Xquartz 是专门为 Mac OS 提供的 X Server 实现
  • XWin 是专门为 Win32/Cygwin 平台提供的 X Server 实现

X Window System 的常见启动方式

X Window System 的运行,需要 “X Server、X Client 以及相关的 X 程序” 的协调配合。首要任务是启动管理硬件和绘图的 X Server,其次是加载 X Server 环境下的各种 X Client 及其他 X 应用程序。启动 X Server 主要有两种常见方式,

图形化方式 — 通过 Display Manager 启动

Display manager 是一种图形化的 login manager,它作为进入 X 环境的前置任务,一般随着系统启动而启动,并通过 GUI 图形登录界面形式让用户输入 login 信息,如果信息检验正确,则启动 X Server 和相关的 X 环境软件。

这种方式无需做任何额外配置,简单直接,是最为普遍常见的 X Window System 启动方式。

命令行方式 — 通过 xinit 指令启动

除了图形化的 Display Manager,另一种比较常见的启动 X Window System 的方式就是使用命令行的 xinit 指令。

xinit 是为 X Window System 初始化专门设计的指令,其设计也体现了 X Window System 启动的所有要求,

  • xinit 指令运行,会同时启动 X Server 和 X Client,指令执行后,会生成一个完整的 X Window System 环境
  • 为了 X Window System 环境的多样性,xinit 提供了最大的灵活性,可以采用命令行脚本默认取值等多种方式分别设置 xinit 启动的 X Client 和 X Server 环境。
    • 使用脚本方式,可以对 X Client 和 X Server 环境分别进行灵活的定制,给了用户提供了最大的自由度
    • 如果在 xinit 命令行中不对 X Client 和 X Server 进行设置,xinit 也会提供默认的 X Client 和 X Server 搭建完整的 X Window System

xinit 指令格式及具体执行逻辑如下,

pic-2

xinit 的命令行参数体系由两部分组成,一部分代表 X Client 的启动设置,另一部分代表 X Server 的启动设置,两个部分之间用 -- 分割。

  • 对于 X Client 的环境设置
    • 采用 命令行指令 + 参数 的形式,则直接执行该设置
    • 采用 参数 形式,则执行 xterm + 参数
    • 没有设置输入,则读取 $HOME/.xinitrc 文件,按照文件的内容进行设置
    • 没有设置输入,也不存在 $HOME/.xinitrc 文件,则执行 xterm -geometry +1+1 -n login -display :0 作为默认 X Client 环境设置
  • 对于 X Server 的环境设置
    • 采用 命令行指令 + 参数 的形式,则直接执行该设置
    • 采用 参数 形式,则执行 X + 参数
    • 没有设置输入,则读取 $HOME/.xserverrc 文件,按照文件的内容进行设置
    • 没有设置输入,也不存在 $HOME/.xserverrc 文件,则执行 X :0 作为默认 X Server 环境设置

无论采用哪种参数设置,使用 xinit 都会构建出一个完整的 X Window System 环境。值得注意的是,xinit 指令中 X Client 和 X Server 设置如果没有提供参数,则会默认调用 $HOME/.xinitrc$HOME/.xserverrc 文件进行环境设置,这两个文件从名字上看像是资源配置文件,但本质上却是 shell 脚本文件!

当不使用 display manager 的时候、或运行环境中存在多种 window systems 的时候,通常使用 xinit 指令来构建 X 环境。

startx — 脚本式的 xinit 的前端

xinit 功能强大,参数灵活,但其复杂度对终端用户并不友好。为方便 xinit 指令的使用,往往对其进行再一次封装,提供一个更为便捷的使用接口,方便其指令参数配置,startx 就是这样一个 xinit 指令专门的前端程序。startx 本质是一个基于 xinit 的脚本文件。使用脚本,就可以在最终底层由 xinit 执行的基础上,在用户接口层面上提供更多灵活、用户体验更好的输入形式,比如,没有指令行输入情况下,startx 也会提供更多的脚本搜索路径去寻找 X 环境构建脚本,并将脚本最终传递给 xinit 来执行。

X 应用程序的典型命令行选项配置

X Window System 是图形显示系统,进行 GUI 展示,对众多 GUI 要素(如位置、颜色、字体等)进行设定是必需的。在 X 系统中,一些重要的设置设计为单独的 X 指令形式,其他要素一般都以 X 应用程序(X Client 和 X Server)的命令行选项及其参数形式进行设定。

(1) 显示系统位置信息 — display

X Window System 是网络化的图形显示系统,系统运行过程中,显示任务都是由 X Server 管控的某台主机上的显示设备来完成的,虽然 X Client 与 X Server 可能运行于网络中的不同节点,但启动时必须明确定位承载显示任务的主机和对应的显示器-display 选项即为此设计。

display 选项的基本格式为,

– display   [hostname] : displaynumber . [screennumber]

  • hostname 用于指定网络中运行 display server 具体主机位置
    • 指定网络主机,则 hostname 可以为服务器的主机名或者 IP 地址
      • 典型 display 选项字符串,如 x.org:0[::1]:0198.112.45.11:0hydra:0.1
    • 如果 hostname 内容为空,则默认为本地主机(local)
      • 典型 display 选项字符串,如 :0:1:0.1
  • displaynumber 用于指定显示设备(display)的编号
    • 在 X 系统中,对 display 的定义为,由一系列监视器(monitor)组成,这些 monitor 共享输入设备,如键盘、鼠标、输入手写板等
    • 有的主机只有一个 display,有的多用户主机可能有多个 display
    • 一个 X Server,只能对应唯一一个 display
    • 一个主机上的每个 display,都会以 0 为起始数字,被分配一个编号,displaynumber 就是指 X 系统中 display 的编号
    • 这个编号是 display 选项中最重要的值,也是 display 选项中的必填项
  • screennumber 用于指定显示设备的具体监视器或屏幕编号
    • 一个 display 是真正具有显示功能的 “画布”,而这块 “画布” 又被分为若干了区域(monitor)。一个 X Client 应用程序,可能在这个 “画布” 的某个特定的区域(monitor)显示,并且可能在不同区域间移动。display 中的每个区域,都会以 0 位起始数字,被分配唯一的编号,screennumber 就是用于指定区域的编号
    • screen (monitor) 的概念与平常的多屏(监视器)显示思路一致,多个屏幕逻辑上隶属与同一个 display
    • screennumberdisplaynumber 要求不同,它并非强制项,如不指定,默认取值为 0

display 选项是 X 系统中最重要的选项,无论是 X Server、还是 X Client 启动,都必须要指定 display 的位置。为了方便应用,在 POSIX 系统中,专门设置了一个环境变量 — DISPLAY 来存放这一信息。所有 X Client/X Server 应用,如果没有明确在启动项中指定 display 选项信息,都会默认使用 DISPLAY 环境变量中的值来设置 display server 的位置。

(2) X 应用程序的几何信息(屏幕尺寸与屏幕位置)– geometry

每个 X Client 都要在 display server 的屏幕上显示,其 GUI 设计一般遵照 WIMP 范式,以窗口的形式展示应用程序。其中,窗口的几何信息(大小、位置)是窗口显示的最基础数据,在 X 系统中,这些信息(窗口的布局,如位置、大小等)一般由 window manager 来控制;另外,这些窗口的几何信息也可以在 X Client 启动时,通过选项参数直接定制化给出。-geometry 选项就是为专门给出 X Client 的窗口几何信息(尺寸和位置)而设计。

geometry 选项的基本格式为,

– geometry   WIDTH x HEIGHT +/- XOFF +/- YOFF

geometry 的选项参数分为两个部分:一部分给出 X Client 的尺寸信息,由 WIDTHHEIGHT 参给出,一般以像素或是字符为单位;另一部分给出 X Client 在屏幕的位置信息,位置信息由 X Client 应用程序的窗口四条边距离显示屏幕的偏移量(offset)给出,以像素为单位。

pic-3

具体的偏移量参数含义如下,

  • +XOFF 表示 X Client 应用程序窗口的左边缘距离 screen 左边缘的偏移量
    • XOFF 为负值时,表明 X Client 在 screen 左边缘以左,即屏幕之外
  • -XOFF 表示 X Client 应用程序窗口的右边缘距离 screen 右边缘的偏移量
    • XOFF 为负值时,表明 X Client 在 screen 右边缘以右,即屏幕之外
  • +YOFF 表示 X Client 应用程序窗口的上边缘距离 screen 上边缘的偏移量
    • YOFF 为负值时,表明 X Client 在 screen 上边缘以上,即屏幕之外
  • -YOFF 表示 X Client 应用程序窗口的下边缘距离 screen 下边缘的偏移量
    • YOFF 为负值时,表明 X Client 在 screen 下边缘以下,即屏幕之外

X、Y 偏移量必须成对给出。四种不同的偏移量组合(+X+Y、+X-Y、-X+Y、-X-Y),标的出四种不同的 X Client 应用程序屏幕定位方法,再加上 X Client 应用程序的长宽数据,构成了 X Client 应用程序完整的屏幕几何信息。

(3) X 应用程序重要设置选项

除了几何信息外,X 应用程序还有很多重要数据可以通过命令行选项进行设置。

选项名称 说明
-bg color (-background color) 窗口背景颜色
-fg color (-foreground color) 文本或图形颜色
-bd color (-borderground color) 窗口边框颜色
-bw number (-borderwidth number) 窗口边框的宽度(像素单位)
-fn font (-font font) 显示文本的字体

(4) X Server 重要设置选项

作为 X 系统中最核心组件,X Server 也有专属的 display server 命令行设置选项;此外,每个特定的 X Server 实现也会有自己特定的命令行设置选项。

Xorg 的运行配置

X Server 完成最核心的显示任务,就要对 GUI 相关的所有要素进行合理配置,一个细节设置不当,都可能影响最终的显示效果,而 GUI 涉及的要素多、细节繁、范畴广,因此对其进行配置涉及大量繁琐的工作。X Server 也提供了多种手段对配置信息和参数进行设置。

xorg 作为 X Server 的典型实现,其提供了 5 中运行参数的配置手段,

  • 命令行选项
  • 环境变量
  • xorg.conf 配置文件
  • 自动探测
  • 回退默认设置(fallback defaults)

每种手段的优先级由高到低依次下降,当同一个配置信息有多个配置手段均提供时,优先级高的方式的配置数据优先使用。

X Window System 的访问控制设计

X Window System 是一个网络化的图形显示系统,运行时可能会有来自不同节点的 X Client 尝试连接 display server,只有经过 display server 认证的有效的 X Client 才能使用 display server 提供的显示服务,因此,对 X Server 进行访问控制功能的设计是必不可少的。

X Server 也支持多种访问控制类型,

访问控制种类 说明
Host Access Simple host-based access control
MIT-MAGIC-COOKIE-1 Shared plain-text “cookies”
XDM-AUTHORIZATION-1 Secure DES based private-keys
SUN-DES-1 Based on Sun’s secure rpc system
Server Interpreted (SI) Server-dependent methods of access control

X 系统将 display server 认证信息存放在专门的文件中,且使用专门的环境变量 -- XAUTHORITY 存放认证文件的地址,默认路径为 $HOME/.Xauthority

每一个 X server 都有自己特定的访问控制功能,X Client 要访问哪一个 X Server,就要在那个特定的 X Server 中添加访问权限

为方便管理认证信息,X 系统也提供了相关工具,

  • xhost

    xhost 是一个专门针对主机进行访问控制的工具,它可以对允许访问 X Server 的主机进行增加或删除操作。

  • xauth

    xauth 是一个可以对认证文件进行管理的工具。

X Window System 体系的概念验证

验证一 本地计算机建立 X Window System 环境

X 系统中,一个 X Server 对应一个 display。在本地计算机,利用 Linux 的“虚拟终端(virtual terminal)”可以构建多个 X 环境。

首先,查看系统现有 X Server 启动情况,

pic-4

使用虚拟终端,在另一个 display 启动 X Server,使用指令

sudo X vt6 :1 -auth /run/user/1000/gdm/Xauthority -retro -keeptty
  • -auth 选项,X Server 的通用选项。指定 X Server 的认证文件 /run/user/1000/gdm/Xauthoriy,这个认证信息与 display 0 上启动的 X Server 使用认证信息一致,也是 $XAUTHORITY 环境变量的内容
  • -retro 选项,X Server 的通用选项。该选项可以使 display server 启动时有经典的条纹背景,并且光标可见。默认情况不开启 -retro 选项,启动一个黑色的 root 窗口,且光标需要应用程序调用 XDefineCursor() 时才会显示出来
  • vtXX 选项,Xorg 的专用选项。指定 Xorg 使用的虚拟终端设备号。该选项只适用于支持虚拟终端的操作系统
  • -keeptty 选项,Xorg 的专用选项。保持 X Server 的最初的控制终端不掉线。当 Linux 的 init 程序变成 systemd 之后,启动 X Server 的时候就必须带上 -keeptty 参数。

pic-5

启动 X Client 应用程序,执行以下指令,用 -geometry 选项确定各个 X Client 的初始位置,

xclock -display :1 -geometry 200x200-100+0 -bg blue -fg white
oclock -display :1 -geometry 200x200-300+0
xedit -display :1 -geometry 300x400-300+200
xcalc -display :1 -geometry 200x300-600+300

pic-6

启动 X.Org Foundation 提供的 window manager — twm,

LANG=c twm -display :1

pic-7

twm 启动后,接管了整个 X 系统的布局管理任务,为各个 X Client 提供了 title bar 和菜单等资源,可以对各个 X Client 进行移动、放缩、最小化及恢复等操作。

tips: 两个不同的 X 环境运行与不同的 vt 之上,如直接用 Ctrl + Alt + Fn 进行切换,会造成系统死锁;可利用某个没有运行 X Server 的 vt 作为过渡,先利用 Ctrl + Alt + Fn 将一个 X 环境切换到过渡 vt 上,再次利用 Ctrl + Alt + Fn 将过渡 vt 切换到另一个 X 环境上。

验证二 网络环境建立 X Window System 环境

X Window System 是一个网络化的 GUI 显示系统,X Server 和 X Client 在网络中的不同节点也是其应用常见场景。一个典型的网络化的显示场景如下,

pic-network-veri

首先,在一个网络节点上启动 X Server,

sudo X vt7 :1 -auth /run/user/1000/gdm/Xauthority -retro -keeptty -listen tcp
  • -listen 选项,X Server 的通用选项。虽然 X 系统设计定位是一个网络化 GUI 显示系统,但 X Server 启动时,默认情况下是关闭网络连接的。使用 -listen 选项,可以开启 X Server 的网络连接。可以通过 ss 查看 X Server 专门的监听端口。

pic-v2-2

X Server 启动网络监听功能后,可以进行网络通讯。但每一个 X Server 本身有访问控制功能,默认情况下,外部网络节点的 X Client 未经授权,是无法访问 X Server 的显示服务的。

网络节点未授权情况下访问 display server,会出现错误提示:

No protocol specified
Error: Can't open display: XXX.XXX.XXX.XXX:1

可以利用 xhost 指令,为特定的 X Server 添加 X Client 节点的访问权限,则 X Client 可使用 display server 的显示服务。

  • X Server 访问权限添加方法 1:直接关闭刚刚启动 X Server 的访问控制功能,允许任意的 X Client 节点访问 X Server
    ### 在 X Server (vt7 :1) 上执行,可启动一个 xterm 运行程序
    xhost +
    
  • X Server 访问权限添加方法 2:为特定的主机添加 X Server 访问权限
    ### 在 X Server (vt7 :1) 上执行,可启动一个 xterm 运行程序
    xhost + IP address (172.16.225.1)
    

在不同的网络节点启动 X Client 应用程序,用 -geometry 选项确定各个 X Client 的初始位置。

在 172.16.225.1 节点,执行指令,

xedit -display 172.16.225.131:1 -geometry 300x500-350+0
xcalc -display 172.16.225.131:1 -geometry 300x500-650+0 -fg cyan -bg blue

在 X Server (172.16.225.131) 节点本机,也启动一个 X Client,

xclock -display :1 -geometry 200x200-100+0 -bg yellow -fg white

pic-v2-3

在 X Server 节点启动 window manager,

LANG=c twm -display :1

pic-v2-4

可见,启动的三个 X Client 应用程序来自于网络中的不同节点,但都实现了在同一个 display server 上进行显示。

验证三 SSH 的 X11 转发

作为一个远程连接软件,SSH 也可以利用 X 系统架构通过本地机器的 display server 来显示远程机器上的 X Client 程序,这就是 SSH 的 X11 Forwarding(X11 转发)功能。

X11 Forwarding 功能使用非常简单,就是在 SSH 原有连接命令基础上加上 -X-Y 参数即可。

SSH -X / -Y user@xxx.xxx.xxx.xxx

使用带有 X11 Forwarding 的 SSH 与基本 SSH 使用无异,只是远程的 GUI 程序可以在本机进行显示了。

pic-v3-1

如上图,gvim 是远程机器上的软件,它在本地计算机显示时,其标题中带有远程机器的标签 <@remote_host>

SSH 的 X11 Forwarding 是一个非常强大的功能。利用这一功能,可以把 Linux 中的图形界面显示到 Windows 中,只需要在 Windows 中运行一个 X Server 即可。

Reference

  1. 《鸟哥的私房菜》
  2. X Window System – Wikipedia
  3. X.Org Server – Wikipedia
  4. Project Athena – Wikipedia
  5. XFree86 – Wikipedia
  6. https://www.xfree86.org/
  7. https://www.x.org/wiki/
  8. man page – X(7)
  9. man page – Xserver(1)
  10. man page – Xorg(1)
  11. man page – xinit(1)
  12. man page – startx(1)
  13. man page – xhost(1)
  14. man page – xauth(1)
  15. X Window 的奥秘
  16. 一文详解Linux中终端界面(Console/Terminal)与图形界面之间的切换关系

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注