这一切都非常模块化和灵活,然而这也导致了复杂性。
"X服务器"驱动显示设备,为客户端提供图形服务,而这些服务非常简单,例如:
"Give me a window frame to draw in"
"Put this bitmap here"
"Draw a horizontal black line 100px wide"
"Render the text 'hello' at (100,100)"
"Tell me if any mouse clicks or key presses have been aimed at my window frame"
有一个名为Xlib的库由X提供,它具有所有这些简单服务的标准接口。任何想要使用X服务器显示的程序最终都会使用此客户端库,并被称为X客户端。 Xlib知道如何连接到任意X服务器 - 在本地机器上,或通过LAN上的TCP / IP,或跨越世界各地 - 来调用这些服务。
窗口管理器只是另一个X客户端程序,负责桌面的“外观和感觉” - 如何移动和排列窗口等。因为窗口管理器绘制所有窗口装饰,所以它可以使桌面看起来像WindowsXP、Mac或NeXTSTEP。
X的哲学之一是定义“机制而非策略”,这意味着他们提供工具让你去做,但不告诉你如何使用这些工具。其中一个工具是窗口管理器,可以随意替换。
许多现代X应用程序编写成使用桌面环境,如Gnome或KDE。这为这些程序提供了一组一致的按钮和控件进行绘制,并提供了一种一致的界面来处理一些传统上未包含在X中但通常被视为桌面的一部分的事物 - 如如何响应拖放或如何呈现标准文件选择对话框。
桌面环境通常提供了一个对象模型或编程接口,以处理所有简单的X客户端请求,并允许程序处理更重要的事情。删除这些低级调用产生了另一个重要的好处 - 平台无关性。
许多桌面环境包括窗口管理器,使窗口控件和按钮的外观和感觉与环境提供的桌面隐喻一致并正常工作。但是通常仍然可以进行切换。
X服务器(运行显示)和X客户端(想要使用显示)的分离有一些影响:
- 图形系统与GUI程序分开,它们的分离程度与Web浏览器和Web服务器一样。
- 因此,GUI程序可能不会在本地机器上显示 - 就像Web浏览器不必指向本地机器上的Web服务器一样。
- 一台机器可以仅运行客户端,而X服务器位于其他位置。
- 具有显示的机器不必运行客户端 - 它可以仅运行X服务器,所有客户端都可以在专用机器上运行。这是最初的瘦客户端:在用户面前的桌上专用硬件处理图形用户交互。
- 您需要知道您的X服务器的网络地址,以便告诉GUI程序在哪里显示其GUI。(通常通过设置DISPLAY环境变量完成)
- 您可以在同一桌面上同时显示许多程序,这些程序来自许多不同的机器。它们全部无缝处理,包括剪切和粘贴。