一、究竟什么是“桌面”
Linux中”桌面”的概念在初学者看来只能用”乱七八糟”来形容,好在那些试图解释清楚这件事情的人们也有同样的感受。这一节的内容有一点枯燥,更令人沮丧的是,读者可能在很长一段时间内都不会用到这些概念。
1. 可以卸载的图形环境
这句话在Windows专家们看来简直是不可思议的。”那我们还如何工作?”,他们会这样问。Linux不是一种基于图形环境的操作系统,40年前的UNIX用户在命令行下完成所有的工作,现在仍然可以。在内核眼里,图形环境只是一个普通的应用程序,和其他服务器程序(如Apache,NFS等)没有什么不同。
如果Linux发型版本的安装程序允许用户自己定制安装软件的话,那么从一开始就可以选择不要图形环境(参见2.2.3节),这样Linux启动后会把用户带至命令行。
2. X窗口系统的基本组成
X窗口系统(X Windows System)是Linux图形用户环境的基础。这个系统最初诞生于MIT的Athena项目,时间是20世纪80年代。X的发展经历了一段复杂曲折的过程,如今绝大多数Linux使用的是由X.org基金会维护的X.org。
X系统基于一种独特的服务器/客户机架构。作为起步,本节首先解释几个基本概念,这些概念现在看起来可能有点抽象,这样安排的用意是,如果读者被后面的内容弄糊涂了,那么还可以回到这里寻求帮助。
2.1 X服务器
X服务器用户实际控制输入设备(例如鼠标和键盘)和位图输出设备(例如显示器)。准确的说,X服务器定义了给X客户机使用这些设备的抽象接口。和大部分人的想法不同,X服务器没有定义高级实体的编程接口,这意味着他不能理解”画一个按钮”这样的语句,而必须告诉它:”嗯……画一个方块,这个方块周围要有阴影,当用户按下鼠标左键的时候,这些阴影应该消失……对了,这个方块上还应该有一些字……”
这种设计的意义在于,X服务器能够做到最大程度上的与平台无关。用户可以*选择窗口管理器和widget库来定制自己的桌面,而不需要改变窗口系统的底层配置。
2.2 X客户端程序
需要向X服务器请求服务的程序就是X客户端程序。具体来说,OpenOffice、geidt这些应用程序都是X客户端程序,它们运行时需要把自己的”长相“描述给X服务器,然后由X服务器负责在显示器上绘制这些应用程序的界面。
2.3 窗口管理器(Window Manager)
窗口管理器负责控制应用程序的各种行为,例如移动、缩放、最大化和最小化窗口,在多个窗口间切换等。从本质上来说,窗口管理器是一种特殊的X客户端程序,因为这些功能也都是通过向X服务器发送指令实现的。
2.4 显示管理器(Display Manager)
显示管理器提供了一个登录界面,其任务就是验证用户的身份,让用户登录到系统,可以说,图形界面的一切(除了它自己)都是由这个显示管理器启动的,包括X服务器。用户也可以选择关闭显示管理器,这样就必须通过命令行运行startx命令(或者使用.login脚本)来启动X服务器。
2.5 widget库
widget库定义了一套图形用户界面的编程接口。应用程序开发人员通过调用widget库来实现具体的用户界面,如按钮、菜单、滚动条、文本框等。程序员不需要理解X服务器的语言,widget库会把”画一个按钮”这句话翻译成X服务器能够理解的表述方式。
2.6 桌面环境
现在终于到了问题的关键,究竟什么事桌面环境?以KDE和Gnome为代表的Linux桌面环境是把各种鱼X有关的东西(除了X服务器)整合在一起的大杂烩,这些程序包括像gedit这样的普通应用软件、窗口管理器、显示管理器和widget库。但五路桌面环境如何复杂,最后处理图形输出的仍然是X服务器。
具体的X系统的启动过程、启动X应用程序以及配置X服务器等知识请参见书中45页-49页内容。