理解X协议和X11Forwarding

Last Updated: 2023-04-20 09:18:45 Thursday

-- TOC --

X11Forwarding功能,可以让我们通过SSH连接,直接运行对端Linux主机上的GUI程序。

x11forwarding

X协议简介

Linux Kernel是没有图形化界面的,所谓的图形化界面系统只不过中Linux下的一个应用程序。这一点和Windows系统很不一样。Windows从Windows95版本开始,图形界面就直接在系统内核中实现了,是操作系统不可或缺的一部分,这也就是为什么云服务器上装Windows系统,大多时候也是远程桌面来进行管理维护。Linux的图形化界面,底层基于X协议。

X协议也被称为X视窗,是用于UNIX和Linux图形显示的标准,它由X server和X client组成:

管理主机上与显示相关的硬件设置(如显卡、键盘,鼠标等),它负责屏幕画面的绘制与显示,以及将输入设置(如键盘、鼠标)的动作告知X client。

X应用程序,则主要负责输入事件的处理(即程序的逻辑)。

举个例子:如果用户在程序界面上点击了鼠标左键,因为鼠标归X server管理,于是X server会捕捉到了鼠标点击这个动作,然后它将这个动作告诉X client;X client负责程序逻辑,于是X client会根据程序预先设定的逻辑(例如画一个圆),告诉X server 说:“请在鼠标点击的位置,画一个圆”。最后,X server就响应X client的请求,在鼠标点击的位置,绘制并显示出一个圆。

更多信息:https://www.x.org/

X协议Server与Client的概念,刚好与现在很多远程桌面/云桌面是反过来的。X11Forwarding跟现在云应用倒是非常地相似。

什么是X11Forwarding

X11是指X协议的11号版本。下面来说说Forwarding:

许多时候X server和X client在同一台主机上,这看起来没什么,就是一个图形化的OS。但是,X server和X client也完全可以运行在不同的主机上,只要彼此通过X协议通信即可。于是,我们就可以用这种机制,做一些“神奇”的事情,在本地运行并显示(X server端)另一台主机上的GUI程序(X client端)。这样的操作可以通过SSH X11Forwarding来实现。

x11forwarding2

X server在本地,负责GUI的显示,X client在远端主机,负责程序逻辑运算。有了X11 Forwarding这个机制,通过支持此功能的SSH客户端连接并运行Linux上有GUI的程序,就像是在Windows下运行GUI程序一样方便。很多时候,这样的机制可以方便GUI程序的调试。

如何实现X11Forwarding

要实现X11 Forwording,需要具备X Server的SSH客户端,同时连接的Linux主机需要具备X client的能力。

我的推荐配置方案:

下图就是使用MobaXterm连接Ubuntu桌面系统后,运行xclock的效果:

x11forwarding3

在Linux中安装X Client

说先要说明,如果Linux中只有X Client,是没有图形界面的,需要X Server的配合才行。

我曾经尝试过自己在CentOS中装X Client,虽然成功,但还是相当费劲。首先:

$ sudo yum install  xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock

然后发现X11Forwarding可以工作了,但是显示出来的GUI界面,没有中文字体。

解决问题的办法,不是去安装什么软件包,只要把Win系统中的中文字体copy到/usr/share/fonts路径下即可。普通的Terminal能够显示中文,是因为传输的是UTF-8编码,由Terminal本地渲染出字体形状。而X11客户端需要在Linux本地渲染字体,然后传给X Server来显示,因此Linux系统中必须要有中文字体支持。

下面这个命令,可以查看Linux系统中的字体:

$ fc-list

个人工作场景,Ubuntu桌面足以!尽量别折腾。

More about X

X Window System,1984年由MIT研发,它的设计哲学之一是:提供机制,而非策略。

主要特点:1,Server/Client网络模型。2,通过扩展使它保持”与时俱进”。

Linux内核是没有GUI图形显示的,X Window的目标就是提供GUI的显示。为啥要命名为X呢,因为英文字母X就在W(indow)后面,戏称为下一版的新视窗之意。XFree86 『 X + Free software + x86硬件 』

***XWindow在推出之后快速演化,在1987年时候,其核心协议已经是第11版本了,简称:x11。这个版本已经将”提供机制,而非策略”这个哲学贯彻地非常彻底,以致于核心协议基本稳定,不需要特别大的改动。于是乎,你看到了,现在是2018年,整整31年了,X Window依然是X11。尽管31年过去了,基于X Window的GNOME、KDE,还能保持与同期Windows、Mac OS X竞争甚至某些方面更好,你就不得不佩服这些前辈在最初设计时定下的设计哲学是多么正确了。X11只定义了如何与内核通讯、如何与Client通讯,具体的策略,依然是交给开发者自己。 ***

本文链接:https://cs.pynote.net/sf/linux/sys/202109216/

-- EOF --

-- MORE --