X Window系统采用主从式架构,其中主要的组成组件为X Server和X Client。前者负责驱动显示卡和各种图形的显示,同时也会驱动其他输入设备,使客户端可以通过这些输入界面与应用程序沟通。而后者指实际执行的应用程序,它会向X Server提出服务请求,以得到响应的显示画面。
X Server控制了实体的显示器和输出入装置如键盘和滑鼠等。它的主要工作有资源的管理及控制,事件的处理,错误信息的处理等。
所谓的 X 资源主要包括了色彩,字型等。 X Window 中这些都由X Server来取得与使用,因此减轻了 client的负担,也使得X Window的可携性更高。
X Server 取得资源后便会依照client的要求加以回应,通常是将其显示在屏幕上,例如使用不同的字型,改变颜色等。
在X Window 中如滑鼠的移动、键盘的输入、视窗是否被覆盖等动作的变化我们称之为X事件。X Server 第二项重要的工作就是将这些发生的事件通知client,client才能根据这些信息作出适当的反应。
另一个X Server 的任务是错误信息的处理。诸如当X Server无法完成 client的请求,或者是系统有错误的状况发生,X Server也都会将这些信息告诉client。
一般我们启动X Window即是启动X Server,然后再根据需要执行client程序。我们经常使用的X terminal实际上也就是一个专门执行X Server的机器,它所有的client都是来自远方的host。同样的,我们在PC上执行一个X Window 模拟器 (emulator) 也就是执行一个X Server,这就是为什么安装一个 XWindow模拟器的同时也得安装字型、色彩等资源的原因。
Client就是X Window中的应用程序,它会要求X Server执行各种特定的动作,如“将视窗背景颜色改成绿色”等等。很多其它视窗中属于系统的功能在X Window中都只是一个client,例如前面提到过的视窗管理,以及桌面管理 (desktop manager),档案管理(file manager) 等。由于X Window 系统的这种特殊架构,使得软件开发者有了更大的弹性空间。
X Window系统一开始就是针对网络而设计的,所以采用了“client-server”模型。这可能会让一些人感到困惑, 因为X的术语和他们想像的有些不同。他们以为“X server”是运行在功能强大的大型机上的,而“X client”是运行在他们桌面上的计算机上的。
与你想像相反,请记住:X server是有键盘和显示器的那台计算机,而 X client是那些显示窗口的程序。如果你只有一台使用 Debian的计算机,就只能在同一台计算机上运行X server和X client了。而你如果要在另外一台电脑中远程操作图形程序,你桌面计算机上运行的是 X server,而你远程打开的一个一个X应用程序(比如 XTerm, 或者FireFox)就是一个X Client(客户程序)。
Client和server不一定都要运行在同一种操作系统上,它们甚至不需要在同一种类型的计算机上运行。在Microsoft Windows或Apple公司的Mac OS上运行X server也是可以的,在它们上面也有很多免费的和商业化的应用程序。
除了X Server和X Client之外,在X Window系统中还包含其他组成组件,如图所示。
以下是这些组件的说明:
X Protocol:介于X Server和X Client间用于沟通的通信协议,因为基本的X Window系统并不提供用户界面,如按钮和菜单等组件,因此必须依靠X Protocol中的程序库来提供这类功能,否则单纯的X Window系统无法满足客户端的要求。
X Library:最底层的程序界面。它的主要功能是存取X Protocol服务,这对于图形程序编写非常重要,常见的X Library有Xlib、Motif、Qt和Gimp library等。
X Toolkit:包含在X Library中的应用程序发展工具。它提供了X Window设计时需要的基本函数,避免了程序开发时必须自行设计所有组件的不便,如滚动条和功能钮,这些组件也称为widgets。目前X Toolkit的种类有很多,较常见的有Motif Development Toolkit、OpenLook Toolkit、Gimp Tool Kit(GTK)、TCL/TK、XForms和X Toolkit(Xt)等。