关于 linux 图形界面的基本知识

很多 LINUX 初学者分不清楚 linux 和 X 之间,X 和 Xfree86 之间,X 和 KDE,GNOME 等之间是什么关系. 常常混淆概念, 我想以比较易于理解的方式说明一下 X,X11,XFREE,WM,KDE,GNOME 等之间的关系. 由于本人水平有限可能存在错误, 请高手指正.

linux 本身没有图形界面,linux 现在的图形界面的实现只是 linux 下的应用程序实现的

图形界面并不是 linux 的一部分,linux 只是一个基于命令行的操作系统,linux 和 Xfree 的关系就相当于当年的 DOS 和 WINDOWS3.0 一样,windows3.0 不是独立的操作系统, 它只是 DOS 的扩充, 是 DOS 下的应用程序级别的系统, 不是独立的操作系统, 同样 XFree 只是 linux 下的一个应用程序而已. 不是系统的一部分, 但是 X 的存在可以方便用户使用电脑.WINDOWS95 及以后的版本就不一样了, 他们的图形界面是操作系统的一部分, 图形界面在系统内核中就实现了, 没有了图形界面 windows 就不成为 windows 了, 但 linux 却不一样, 没有图形界面 linux 还是 linux, 很多装 linux 的 WEB 服务器就根本不装 X 服务器. 这也 WINDOWS 和 linux 的重要区别之一.

X 是协议, 不是具体的某个软件

X 是协议, 就像 HTTP 协议,IP 协议一样. 这个概念很多初学者甚至学习 LINUX 有一定时间的人都混淆, 一个基于 X 的应用程序需要运行并显示内容时他就联接到 X 服务器, 开始用 X 协议和服务器交谈. 比如一个 X 应用程序要在屏幕上输出一个圆那么他就用 X 协议对 X 服务器说: 喂! 我需要在屏幕上画一个圆.X 应用程序只负责告诉 X 服务器在屏幕的什么地方用什么颜色画一个多大的圆, 而具体的 “画” 的动作, 比如这个圆如何生成, 用什么显卡的驱动程序去指挥显卡完成等等工作是由 X 服务器来完成的.X 服务器还负责捕捉键盘和鼠标的动作, 假设 X 服务器捕捉到鼠标的左键被按下了, 他就告诉 X 应用程序: 亲爱的应用程序先生, 我发现鼠标被按下了, 您有什么指示吗? 如果 X 应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X 应用程序就对 X 服务器说: 请再画一个正方形, 当然他会告诉服务器在什么地方用什么颜色画多大的正方形, 但不关心具体怎么画–那是服务器的事情. 那么协议是需要具体的软件来实现的, 这就是下面我要讲的:

X 和 XFree86 的关系

有了协议就需要具体的软件来实现这个协议. 就好比我们有了交通法规就需要交警去根据法规维护交通秩序一样.Xfree86 就是这样一个去根据法规实现协议的 “交警”. 他按照 X 协议的规定来完成 X 应用程序提交的在屏幕上显示的任务. 当然不仅仅是某个特定的交警才可以去维护和实现这个法规, 比如还可以由交通协管员来实现交通法规, 必要的时候警察也可以介入, 当然前提是他们都要懂得交通法规, 也就是要懂得协议. 所以实现 X 协议的软件也并不只有 XFree86, XFree86 只是实现 X 协议的一个免费 X 服务器软件. 商业上常用 MOTIF, 现在还有 XORG, 还有很多很小的由爱好者写的小的 X 服务器软件. 甚至可以在 WINDOWS 上有 X 服务器运行, 这样你可以在 linux 系统上运行一个 X 应用程序然后在另一台 windows 系统上显示. 多么神奇. 你可以用 google 找到这样的 X 服务器软件. 只不过在 LINUX 上最常用的是 XFree86.(现在的 linux 发行版都用 Xorg 了)顺便说一句, 苹果电脑的图形界面用的也是 X 协议, 而且被认为是做的最好的 X 协议图形界面, 并且他对 X 协议的实施是做在系统内核里的, 所以性能明显好很多, 这就是为什么很多大型三维图形设计软件都是在苹果平台上的原因. 为了便于理解拿 HTTP 协议来比较:

协议是 HTTP (hyper text transmission protocol)
实现这个协议的常用服务器有:apache IIS 等
请求这些服务器传输文件的客户有:IE ,MOZILLA ,NETSCAPE 等.

协议是 X
实现这个协议的常用服务器有 Xfree86 ,Xorg ,Xnest 等
请求这些服务器来完成显示任务的客户: 所有的 X 应用程序.
 
只不过 HTTP 协议的服务器和客户端通常都在两台不同的电脑 (服务器和客户机) 之间来实现, 所以一般人对这个比较容易理解. 而 X 协议的服务器和客户端程序通常在同一台电脑上, 因此很多用户都感到对此很难理解. 既然是协议, 那么肯定和平台无关的, 因此可以让 X 应用程序显示在任何装有 X 服务器的远程计算机上. 甚至显示在装有 Xnest 服务器的 windows 系统上. 只不过在大多数情况下,X 应用程序都用本机的 X 服务器, 然后 X 服务器将显示结果输出到本机的显示器. 这也是很多人不理解 X 是一种协议的原因.

X 和 X11R6 又是什么关系?

不知道初学者有没有注意到 /usr/X11R6 这个目录, 这是 XFree 的默认安装目录 X11R6 实际上是 X Protocol version 11 Release 6 (X 协议第 11 版第六次发行)的意思, 就是说目前用的 X 协议是第 11 版的, 然后经过了 6 次小的修正. 不同版本的 X 协议是不能通信的. 就象我们现在 IPV4 和 IPV6 不能通信一样, 不过不用担心, 现在的 X 服务器软件和 X 应用程序都遵循 X11R6.
 
另外 XFree86 3.3.6 XFree86 4.3.6 等这些版本是实现 X 协议的软件 XFree86 的版本号. 这是初学者经常高混淆的概念.
协议版本和实现协议的软件的版本–这两个概念的区别你分清楚了吗?

X 服务器和 WM(window manager 窗口管理器)之间是什么关系

平时大家起动图形界面是怎么启动的呢? 如果你是一开己就进入图形界面那就太遗憾了. 应为你错过了了解 X 服务器起动过程的好时机. 不过没关系. 你打开一个 XTERM 输入: init 3 就可以安全的回到字符界面.
 
好了, 等做完以下实验你就完全明白 X 和 WM(window manager 窗口管理器)之间是什么关系了.
 
先输入以下命令:

1
#startx

起动图形界面, 你看到的是一个和平时使用一样的完整的图形界面操作环境. 你可以最大化, 最小化, 移动, 关闭窗口等. 按 ctrl+alt+backspace 反回字符界面.
 
输入:

1
#xinit

再次启动图形界面, 你看到了什么, 你看到一个 XTERM. 而且不能移动. 但是你可以在这个 XTERM 中输入命令打开 X 应用程序, 如果我输入:

1
#mozilla

打开浏览器, 你看到的浏览器和平时有什么不同吗? 他在屏幕中间, 不能移动, 不能最小化, 不能最大化, 没有边框.
 
为什么同样一个 X 应用程序会有这样的不同呢? 因为我们用 startx 起动图形界面的时候同时也启动了一个 WM(即窗口管理器), 如果你用 KDE 就起动了 KDE, 如果你用 GNOME 就起动了 GNOME. 但是你用 xinit 起动图形界面的时候却没有起动 WM.
 
现在你明白窗口管理器的作用了吗? 他的作用就是最大化, 最小化, 移动, 关闭窗口等. 而这些不是 X 服务器来负责完成的.
 
如果你用 xinit 起动图形界面并在 xterm 中输入 twm, 看看会有什么?
 
xterm 被加上了一个边框, 你可以通过这个边框移动, 最大化, 最小化这个 xterm,twm 就是 XFree86 中自带的窗口管理器, 是一个比较简陋的最简单的窗口管理器, 但是他具有窗口管理器的全部特征.
 
如果你不输入 twm 而输入 gnome-session 就可以起动 GNOME 或者输入 startkde 起动 KDE.
 
通过以上的实验你就可以清楚的明白他们之间的关系.

关于 KDE 和 GNOME

KDE 和 GNOME 是 LINUX 里最常用的图形界面操作环境, 他们不仅仅是一个窗口管理器那么简单,
 
KDE 是 K Desktop Environment 的缩写. 他不仅是一个窗口管理器, 还有很多配套的应用软件和方便使用的桌面环境, 比如任务栏, 开始菜单, 桌面图标等等.
 
GNOME 是 GNU Network Object Model Environment 的缩写. 和 KDE 一样, 也是一个功能强大的综合环境. 另外在其它 UNIX 系统中, 常常使用 CDE 作为这样一个环境.

其它的小型窗口管理器有: window maker,after step,blackbox,fvwm,fvwm2, 等等都是常用的优秀窗口管理器.REDHAT9 中有 window maker 但是默认不安装, 大家可以装来试试. 只要 xinit 再 wmaker& 就可以用 windowmaker 了.

linux 图形界面层次关系总结

linux 本身–> X 服务器 <-[通过 X 协议交谈]-> 窗口管理器(综合桌面环境)–> X 应用程序.