Linux X Windows 的理解
主要是因为下面的一些词条产生的困惑,然后了解来一下 X Windows 机制。
X, X11
Xorg
QT, GTK, GTK+
I3
Gnome, KDE
1. Linux 和图形界面的关系
Linux 只是个基于命令行的操作系统,本身没有图像界面,图像界面的实现只是 linux 下的应用程序实现的。Linux 内核为 linux 系统中的图形界面提供了显示设备驱动。
2. X 的概念
X 是协议,就像 HTTP 协议, IP 协议。一个基于 X 的应用程序需要运行并显示内容时,他就联接到 X 服务器,开始用 X 协议和服务器交谈。比如一个 X 应用程序( X client )要在屏幕上输出一个圆,那么他就用 X 协议对 X 服务器说: 喂,我需要在屏幕上画一个圆。
X 应用程序只负责告诉 X 服务器在屏幕的什么地方用什么,颜色画一个多大的圆,而具体的"画"的动作,比如这个圆怎样生成,用什么显卡的驱动程式去指挥显卡完成等等工作是由 X 服务器来完成的。
X Server 还负责捕获键盘和鼠标的动作。假设X Server 捕获到鼠标的左键被按下了,他就告诉X Client:我发现鼠标被按下了,您有什么指示吗。举个例子,X Client 就对 X Server 说:请再画一个正方形,当然他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画 -- 那是 Server 的事情。
3. X11 && X11Rn
X11 表示 X 协议的第 11 版,X11Rn 是 X 协议第 11 版第 n 次发行。
4. Xorg && XFree86
可以理解为这些都是 X Server 程序,有些甚至能够在 WINDOWS 上有 X Server 运行,这样能够在 linux 系统上运行一个 X Client,然后在另一台 windows 上显示。现在的 linux 大多用 Xorg 了。
当然上面说了可以理解为,其实并不全是这样,比如 XFree86 包括 X Server,字体,一个 X 下的终端程序(xterm),一个简单的窗口管理器(twm),很多有用的小工具,显示输出驱动和包括键盘鼠标在内的许多输入模块。
5. WM(window manager)(窗口管理器)
窗口管理器的作用就是最大化、最小化、移动、关闭窗口等。这些操作不是 X Server 来负责完成的,同样是有专门的程序来完成,比如平铺式管理器 i3wm。
6. KDE, GNOME
KDE 和GNOME是LINUX里最常用的图像界面操作环境,他们不但仅是个窗口管理器那么简单, KDE是K Desktop Environment 的缩写,他不但是个窗口管理器,更有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等。GNOME是GNU Network Object Model Environment 的缩写,和KDE相同,也是个功能强大的综合环境。
7. GTK, GTK+, QT
是图形界面开发库(GUI Toolkit),用户可以使用这些开发库编写 GUI 应用,其中 GTK+ 是 GTK 的升级版。
8. KDE, GNOME, Unity
是 Linux 下的桌面环境(Desktop Environment),其中 KDE 使用 QT 开发,GNOME 使用 GTK+ 开发。桌面环境一般具有一组实用程序,窗口管理器和设计规范来创建统一的桌面。Unity 是 Canonical 公司基于 GNOME 开发的一个桌面环境,它使用了GNOME的一些实用程序(Nautilus, RhythmBox等),并用于Ubuntu操作系统。
Q: i3wm 既然是 WM,那么它的颜色、Bar 是怎么完成的,而且为什么比如 Firefox 这样依赖 GTK 的程序却能够在 i3wm 环境下打开呢?
A:
1. 首先要明确 i3wm 就是一个应用程序,所以它也可以设置自己的颜色啦。
2. i3wm 的 Bar 有两种,一种是自带的,当然也可以通过和 X Server 打交道画出来。另一种是使用别的程序,比如 Polybar,本质上都是一样的,通过和 X Server 打交道画出来。
3. 最后就是为什么在 i3 下对 GTK 有依赖关系的软件仍然可以正常显示?按理来说,只有下载来 GNOME,此时安装来 GTK 才可以呀。实际上你查看 firefox 的依赖,在安装 firefox 的时候就已经安装来 GTK 库,所以就没问题来。