3. X 窗口系统架构:概述

X 被设计为客户端-服务器架构。应用程序本身是客户端;它们与服务器通信并发出请求,同时还从服务器接收信息。

X 服务器保持对显示的独占控制权并为客户端请求提供服务。此时,使用此模型的优势非常明显。应用程序(客户端)只需要知道如何与服务器通信,而无需关心与实际图形显示设备对话的细节。在最基本的层面上,客户端告诉服务器诸如“从这里到那里画一条线”,或“使用此字体,在此屏幕位置渲染此文本字符串”之类的内容。

这与仅仅使用图形库来编写我们的应用程序没有什么不同。然而,X 模型更进一步。它不限制客户端与服务器在同一台计算机中。用于在客户端和服务器之间通信的协议可以通过网络工作,或者实际上,任何“提供可靠字节流的进程间通信机制”。当然,首选方式是使用 TCP/IP 协议。正如我们所见,X 模型非常强大;这方面的经典例子是在 Cray 计算机上运行处理器密集型应用程序,在 Solaris 服务器上运行数据库监视器,在小型 BSD 邮件服务器上运行电子邮件应用程序,并在 SGI 服务器上运行可视化程序,然后在我的 Linux 工作站的屏幕上显示所有这些。

到目前为止,我们已经看到 X 服务器是处理实际图形显示的那一个。此外,由于 X 服务器在用户正在使用的物理、实际计算机上运行,因此 X 服务器有责任执行与用户的所有实际交互。这包括读取鼠标和键盘。所有这些信息都会传递给客户端,客户端当然必须对此做出反应。

X 提供了一个库,恰如其分地称为 Xlib,它处理所有低级客户端-服务器通信任务。听起来很明显,客户端必须调用 Xlib 中包含的函数才能完成工作。

此时,一切似乎都运行良好。我们有一个服务器负责视觉输出和数据输入,客户端应用程序,以及它们之间相互通信的方式。在设想客户端和服务器之间的一个假想交互时,客户端可以要求服务器在屏幕上分配一个矩形区域。作为客户端,我不关心我显示在屏幕上的位置。我只是告诉服务器“给我一个 X 乘 Y 像素大小的区域”,然后调用函数来执行诸如“从这里到那里画一条线”、“告诉我用户是否在我的屏幕区域中移动鼠标”等操作。