「X11」- X Window System | 基本概念 | 学习笔记

针对该部分笔记,其主要是 X Window System 的相关内容,学习这些内容是为了了解它工作原理、实现某些操作。

认识

X Window System,X11,X,是用于位图显示的窗口系统,是在 UNIX 环境中经常使用的 Client-Server 显示协议。而我们常说的 X、X11 为其简写。

X 为图形界面环境提供基本框架:在显示设备上,绘制和移动窗口;与鼠标、键盘进行交互。但是 X 不负责用户界面,因此不同桌面环境之间的差异非常大;

组成

架构概览

X Window System/Software architecture

X Server / X Client 与我们日常理解的 Server / Client 有些相反:
1)X Server:运行在”客户端“。这个”客户端“指的是本地电脑(笔记本、台式机、Whatever…);
2)X Client:运行在”服务端“。这个”服务端“指的是远程主机;(也可以是”本地“(同一台主机),但是从网络上来看,X Client 依旧是运行在远程);

之所以会出现这个情况是因为:X 是从应用的角度来看,即 X Server 为 X Client 提供显示和 I/O 设备服务;

详细说明

X 采用 Client / Server 架构。特殊的地方在于,Server 运行在本地(用户)主机中,而 Client 运行在远程主机中;

Client 是应用程序,比如 Firefox XTerm XClock 等等。负责与 Server 交流,发出请求,并接收 Server 信息;

Server 是服务端实现,比如 Xorg Server、XFree86 等等;

Server 比较特殊,Server 独占显示控制权,并服务来自 Client 的请求,并负责与用户交互(鼠标、键盘)。因此 Client(应用程序)无需关心显示细节,只需要向 Server 发送指令,比如“绘制从这里到那里的直线”、“渲染字符串”;

这样带来的好处就是 Client 与 Server 可以运行在不同的主机上,我们在本地运行 Server,但是通过 TCP/IP 网络,我们可以运行 Host A 主机上的 Firefox 程序,运行 Host B 上的 Chrome 程序,运行 Host C 上的 Thundbird 程序,而本地运行 Server 只是负责显示这些程序界面(Client 会告诉 Server 显示什么、如何显示),实际的程序运行及资源占用则是发生在远程主机上的;

当然,大多数情况下,我们是单台主机,所以 Client 与 Server 在同个主机上;

性质

在远程主机中运行应用,但在本地主机中显示应用界面 run remote application in local

server – x11 forwarding fails with some apps opening in remote display and some in local display – Ask Ubuntu

根据 X.Org 特性,我们可以:在远程服务器的命令行中(其无图形界面),运行 xterm 命令,但是却是在本地显示 XTerm 的终端界面。

该笔记将记录:如何使用这一特性。实际的用途,请自行挖掘 :-)

环境概述:

  • Local Machine: laptop-01 XTerm
  • Remote Server: server-01 X Window System

执行命令:

laptop-01 # ssh -X root@server-01
server-01 # su - root
server-01 # xterm

// 稍后(取决于网络质量),我们便可在本地(laptop-01)看到打开的 XTerm 终端

构建

XFree86,XF86,其为是 X Window System 协议的实现。

X.Org,同样是是 X Window System 的开源实现,其由 XFree86 4.4 RC2 分叉出来的。The X.Org project provides an open source implementation of the X Window System.

参考

X Window System – Wikipedia https://en.wikipedia.org/wiki/X_Window_System
The X Window System Architecture: overview
Wikipedia/XFree86
Wikipedia/Root Window
ArchWiki/Display Manager
X.Org/Wiki https://www.x.org/wiki/