几乎所有Linux的新用户都会认为Linux的图形界面是相当地绚丽又多彩。因为这毕竟是一种全新的体验,那种超脱Windows俗套的快感就会油然而生。对于刚刚翻开这本书的人来说,如果对Linux是抱有这样认识的,那就太棒了,因为咱们又多了一个洗脑的对象了:P。此时此刻,真正的亲密接触就要开始啦…… 1.2.1 没有图形的图形 虽然Linux的图形界面美轮美奂,但是有一个秘密却不得不告诉你:Linux本身是没有图形界面的。不管你信还是不信,事实就是这个样子。这么说的原因并不是因为Linux只是一个内核,其实所有类UNIX操作系统本身都没有图形用户界面。 那为什么我们能通过图形用户界面来使用Linux或者其他类UNIX操作系统呢?原因是有一个软件提供了这样的功能。是不是觉得很怪异?如果你有使用DOS和Windows 3.2 的经验,就一点都不奇怪了。因为那个时候Windows 3.2实际上就是一个DOS上的软件。而且我们所熟知的图形化操作系统Windows,直到Windows 95开始才能算得上是真正意义的操作系统。Linux上提供这个功能的软件以前是XFree86,现在是xorg(官方写法是X.Org,为了方便通常写作xorg)。虽然这两个软件名字上差别有些大,但实际上是一个软件的不同分支。1992~2004年间就只有XFree86,且跟Linux内核一样,以GPL许可证发行。但是2004年就发生了变化,XFree86的开发商XFree86® Project公司改变了许可证。这引起了GNU社区的极大不满,于是从XFree86 4.4 RC2衍生出了xorg。目前几乎所有开源的类Unix操作系统使用的都是xorg,让XFree86® Project抱着它的XFree86自己慢慢过吧:) 可能有些人会觉得奇怪。因为只听过有人在争论到底是KDE好还是GNOME好,并没有听说有xorg这东西,而且还有人说Unix的窗口系统是X提供的。那么X和xorg是什么关系呢?KDE、GNOME跟它们又是什么关系呢?嗯,这些的确是很好的问题,接下来就解答一下。 首先,X不是什么具体的软件,它是一种协议,跟我们平常所耳熟能详的那些什么HTTP协议、SOAP协议等是一样的。而xorg则是实现X协议的服务器软件,这跟实现HTTP协议的Apache是相同的概念。大家都知道Apache是可以通过HTTP协议来提供Web服务的,那么xorg通过X协议来提供什么服务呢?答案是图形用户界面服务。Apache的客户端请求Apache得到的结果是HTML内容,而xorg的客户端请求xorg的结果则是向屏幕上画图。它们之间还有一个很大的不同就是Apache只能被动地接受客户端请求,而xorg还需要主动将当前键盘按键和鼠标位置等信息通知给客户端。所以,Linux上的那些拥有图形用户界面的软件实际上都是xorg的客户端,它们利用X协议让xorg在屏幕上画出窗口或通过xorg获得键盘和鼠标事件。当然,为了运行这些软件也就需要一个前提,xorg这个服务,也就是通常所说的X服务器,必须是启动的。现代大多数Linux发行版的默认安装都是自动支持图形用户界面的,也就是说它们会在系统启动之后自动执行xorg。 可能有些人会意识到,如果系统中只有xorg是不可能有任何图形界面供大家使用的,至少还需要有个X客户端程序。而且这个X客户端程序还有一个专有名称——窗口管理器,英文叫做Window Manager,简称WM。WM也不是一个具体的软件,而是一类软件。诸如KDE、GNOME这些就是包括各自的窗口管理器,也有一些单独的窗口管理器,如FVWM、Openbox、IceWM等。它们控制窗口外观、位置和提供用户去操作这些窗口程序的方法。所以不同的窗口管理器会有不同的使用习惯。如果你当前使用的Linux系统没有配置成默认使用图形用户界面的话,可以使用命令: $ startx 来启动xorg和默认的WM。对于Cent OS 6.4来说,默认的WM应该是GNOME的Metacity窗口管理器(KDE的是KWin),而且默认情况下是使用图形用户界面的。 对于那些默认使用图形用户界面的Linux系统,还有一个十分重要的X客户端需要启动,就是显示管理器,英文叫做Display Manager,简称DM。这个是做什么的呢?它是专门负责图形界面的用户登录问题的。也就是说,系统启动之后第一个要启动的X客户端程序就应该是DM,而且没有人能关闭掉它。(你能猜到为什么要这样吗?)DM也是一类软件,具体的应该是XDM、KDM或GDM等。 好了,有关Linux图形用户界面的介绍到这里就差不多了,更深入的内容我们留在后面吧。现在我们要谈论另外一个话题,就是Linux怎么会把它的图形界面设计得这么乱! 1.2.2 架构设计 其实Linux系统的图形界面设计还是非常清晰的。让大家觉得乱的原因可能是有两个:一是我的写作水平有点问题,二是涉及的新鲜事儿太多。我总认为第一点是主要因素,所以干脆不写了,画个图给大家看看。下图展示了Linux界面的基本结构,同时提供了Windows图形界面基本结构进行对比。自我感觉画的比说的要好。 图 1.16 当结构清晰的时候,问题随之就会来,不知道你发现问题了没有?最大的问题就是从结构上看Linux的图形界面效率肯定比Windows的要差。因为Linux需要很多层的软件互相协作才能实现图形界面,而Windows则相当直接,不拖泥带水的就搞定了图形界面。在计算机科学领域很少有实践结果与理论预期出现相反结论的情况,但是,可是,可但是,但可是……小概率事件还是会发生的,偏偏这个就是典型的一例。众所周知的Mac OS X的图形效果是目前任何操作系统都无法比拟的,自然也包括Windows的任何版本。而Mac OS X是一种类Unix操作系统,采用的恰恰就是这种架构。只是Mac OS X的“X协议”与Linux所采用的X协议有很大不同,前者是二进制的,后者使用的是纯文本。从纯粹学术理论上来讲,纯文本虽然在效率上会有些损失,但在其他方面会更具优势。这个问题在本书的第4章将会继续探讨,这里就先说这么多。 正因为Linux的图形界面得益于这种优良的架构设计,虽然在效率上不及Mac OS X那样优秀,但是图像效果和功能的丰富程度绝对不会比Windows差,至少它拥有很多种桌面环境可以选择,可以说每一种都会让你有完全不一样的体验。看惯了Windows的“老气横秋”,不妨去感受一下Linux的小清新吧!