2.1 Linux图形界面
Linux提供文本与图形两种使用环境。大多数Linux专业人员倾向于文本(命令行)界面,但是初学者往往更喜欢图形界面(GUI)。上一章介绍了Ubuntu特有的桌面环境Unity,这里进一步讲解Linux图形界面基本原理。
微软Windows是基于图形界面的操作系统,图形环境与内核紧密结合,如图2-1所示。Linux操作系统本身并没有图形界面,由X Window System为它提供图形界面解决方案,整个架构如图2-2所示。对Linux系统而言,X Window System并不是必需的,只是一个可选的应用程序组件,目前使用的是第11版,通常称之为X11。Linux的图形界面更灵活,可以根据需要选用不同的桌面环境。
图2-2 Linux图形架构
2.1.1 X Window System
X Window System本身基于客户/服务器(C/S)模式,具有网络操作的透明性。如图2-3所示,X Window System由以下3部分构成。
图2-3 X Window System示意图
● X Server:响应X Client程序的“请求”,建立窗口以及在窗口中绘出图形和文字。每一套显示设备只对应一个唯一的X Server。X Server只是一个普通的应用程序。
● X Client:作为X Server的客户端,向X Server发出请求以完成特定的窗口操作。X Client无法直接影响窗口或显示,只能请求X Server来完成。X Client是使用操作系统窗口功能的一些应用程序。
● 通信通道:负责X Server与X Client之间的通信。X Server和X Client可能位于同一台计算机上,也可能位于不同的计算机上,这需要通过网络进行通信,由相关网络协议提供支持。
X Client将希望显示的图形发送到X Server,X Server将图形显示在显示器上,同时为X Client提供鼠标、键盘的输入服务。
2.1.2 窗口管理器(Window Manager)
X Window System只是提供了建立窗口的一个标准,具体的窗口形式由窗口管理器决定。窗口管理器是X Window System的组成部分,用来控制窗口的外观,并提供与用户交互的方法。作为在X Server上运行的应用程序,窗口管理器为用户提供操作窗口程序的方法,主要用于管理应用程序窗口,如窗口移动、缩放、开关等,当然还要管理键盘和鼠标焦点。
窗口管理器是与X Server进行交互控制的服务器端程序,也可以将它看作是一种特殊的X客户端程序,其功能都是通过向X服务器发送命令来实现的。
窗口管理器不是一个具体的软件,而是一类软件。GNOME、KDE这样的桌面环境包含自己的窗口管理器。也有一些单独的窗口管理器,如FVWM、IceWM。不同窗口管理器有不同的使用习惯。GNOME默认的窗口管理器是Mutter,KDE使用的是KWin。在X Window System上可使用各种窗口管理器,常用的有TWM、FVWM、MWM、IceWM、Windows Maker、Sawfish等,可根据需要选择。
Metacity曾经是GNOME桌面环境下默认的复合窗口管理器。它由GTK+实现,能够与其他GTK+应用程序相融合。虽然Metacity是GNOME工程的一部分,并且被设计为集成进GNOME桌面,但它并不需要GNOME就能运行。同样GNOME也可以使用各种不同的窗口管理器,只要它们支持ICCCM规范。2011年,GNOME 3发布,Metacity被Mutter代替。
2.1.3 显示管理器(Display Manager)
显示管理器提供图形界面用户登录,用于验证用户身份,让用户登录到系统。图形界面由显示管理器启动,包括X Server。可以选择关闭显示管理器,通过命令行运行startx命令(或使用登录脚本)来启动X Server。系统启动之后第一个要启动的X Client程序是DM,DM也是一类软件,如XDM、KDM、GDM。
2.1.4 Widget库
Widget库定义一套图形用户界面的编程接口。应用程序开发人员通过调用该库来实现具体的用户界面,包括按钮、文本框、菜单、滚动条等。程序员不需要理解X Server的语言,由Widget库将调用提交给X Server即可。
2.1.5 桌面环境(Desktop Environment)
对于使用操作系统图形环境的用户来说,仅有窗口管理器提供的功能是不够的。为此,开发人员在窗口管理器的基础上,增加各种功能和应用程序,提供更为完善的图形用户环境,这就是桌面环境。作为一个整体的环境,它包括应用程序、窗口管理器、登录管理器,桌面程序、设置界面等。桌面环境将除X Server以外的各种与X有关的部件整合起来,用于呈现整个图形界面,不过图形输出处理却是由后台的X Server实现的。
Linux桌面环境实际上由一系列程序组成,工具条、面板等其实都是程序。一个完整的图形桌面环境至少包括一个会话程序、一个窗口管理器、一个面板和一个桌面程序。会话程序用于保证X图形组件的正常运行,用于启动窗口管理器等程序的运行,并作为这些程序的主进程。Linux通过xinit启动会话程序,在用户执行注销、重启、关机等操作之前它会一直保持运行。窗口管理器是提供管理窗口的显示隐藏、前后位置和大小的后台程序。面板提供用户交互,便于用户运行程序。桌面程序显示背景,位于显示的最底层,窗口和桌面上的各种面板控件都在其上一层显示。
目前主流的Linux桌面环境包括GNOME(GNU网络对象模型环境)、KDE(K桌面环境)、CFCE和LXDE。GNOME桌面环境具有很好的稳定性,是多数Linux发行版本(如RedHat)的默认桌面,它由桌面(包括其图标)、应用程序窗口、面板(包括顶部或底部面板)组成,如图2-4所示。KDE桌面环境与Windows界面比较接近,更加友好。Ubuntu现在默认使用的桌面环境是Unity。
图2-4 GNOME桌面环境
2.1.6 Unity桌面环境
Unity是基于GNOME桌面环境的用户界面,由Canonical公司开发,主要用于Ubuntu操作系统。Ubuntu原来使用的是完整的GNOME桌面环境。由于Ubuntu创始人Mark Shuttleworth对用户体验的理念与GNOME团队不同,从Ubuntu 11.04起,Ubuntu使用Unity作为默认的用户界面,但Ubuntu仍然可以通过PPA(个人软件包档案)来安装GNOME。
与GNOME、KDE不同,Unity并非一个完整的桌面程序安装包,主要实现的是桌面环境的面板部分,窗口管理器等其他桌面环境要素采用了现有的方案。
Unity一开始基于和Gnome Shell相同的Mutter窗口管理器和Clutter图形工具库开发。Gnome Shell是GNOME 3的主要元件,它改革了GNOME桌面环境的操作,包括窗口管理、应用程序启动和工作空间管理的方式,为使用者提供一个全新方便易用的桌面管理方式。虽然底层的技术相似,但Unity用户界面完全是不同的实现,它并没有使用来自GNOME Shell的任何代码。后来Ubuntu Unity开始移植到Compiz,自Ubuntu 11.04之后,Ubuntu Unity桌面的基础就是Compiz。Compiz是基于OpenGL的混合型窗口管理器,可以在Linux桌面系统内提供3D桌面效果,以及类似于Mac OS X操作系统中所提供的许多桌面特效。这样,目前的Unity变成了Compiz窗口管理器的一个插件。
Unity主要被设计得可更高效地使用屏幕空间,与传统的桌面环境相比,消耗的系统资源更少。Unity环境打破了传统的GNOME面板配置。它的左边包括一个类似停靠栏(Dock)的启动器(Application Launcher)和任务管理面板,而顶面板则由应用程序指示器(Indicator)、窗口指示器和活动窗口的菜单栏组成。Unity桌面环境如图2-5所示。
图2-5 Unity桌面环境