5.2. 理解 X

对于那些熟悉其他图形环境,比如 Microsoft® Windows® 或者 Mac OS® 的用户来说,第一次使用 X 可能会感觉很惊讶。

尽管您不需要了解各种 X 组件的所有细节和它们是如何互相影响的; 然而, 了解一些基本的知识可以让您很好地利用 X 的强大功能。

5.2.1. 为什么要使用 X?

X 不是第一个为 UNIX®而开发的视窗系统,但它是最流行的。 X 的原始开发团队在开发 X 之前就已经在另外一个视窗系统上工作了。 那个系统的名字叫做 “W” (就是 “Window”)。X 只是罗马字母中 W 后面 的一个。

X 可以被叫做 “X”, “X Window 系统”, “X11”, 等等。把 X11 称做 “X Windows” 可能会冒犯某些人; 查看 X(7) 可以了解更多的信息。

5.2.2. X 客户机/服务器模型

X 一开始就是针对网络而设计的,所以 采用了 “client-server” 模型。在 X 模型中, “X server” 运行在有键盘,显示器,鼠标的计算机上。 服务器用来管理显示信息,处理来自键盘和鼠标的输入等。 每一个 X 应用程序 (比如 XTerm, 或者 Netscape®) 就是一个 “client”。 一个 client 给服务器发送信息,如 “Please draw a window at these coordinates”, 然后服务器就返回处理信息,如 “The user just clicked on the OK button”。

如果您在只有一台计算机的家里或小型办公环境中使用 FreeBSD,您就 需要在同一台计算机上运行 X server和 X client。然而,如果您有很多运行 FreeBSD 的机器,您可以在您的桌面计算机上运行 X server,而在比较高档 的服务器上运行 X 应用程序。在这样的环境中,X server 和 X client 之间的 通信就可以通过网络来进行。

这迷惑了一些人,因为 X 的术语和他们料想的有些不同。 他们以为 “X server” 是运行在功能强大的大型机上的,而 “X client” 是运行在他们桌面上的计算机上的。

记住,X server 是有键盘和显示器的那台计算机,而 X client 是那些显示窗口的程序。

并不需要 client 和 server 都运行在同一种操作系统上,或甚至运行在 同一种类型的计算机上。在 Microsoft Windows 或者 Apple 公司的 Mac OS 上运行 一个 X server 也是可以的,在它们上面也有很多免费的和商业化的应用程序。

从 FreeBSD 5.3-RELEASE 开始, 随 FreeBSD 一同安装的 X 服务改成了 Xorg, 它在类似 FreeBSD 的授权下可以免费使用。 此外, 也有一些针对 FreeBSD 的商业 X 服务器。

5.2.3. 窗口管理器

X 的设计哲学很像 UNIX 的设计哲学, “tools, not policy”。这就意味着 X 不会试图去规定任务应该如何 去完成,而是,只给用户提供一些工具,至于决定如何使用这些工具是用户自己的 事情。

这套哲学扩展了 X,它不会规定窗口在屏幕上应该是什么样子,要如何移动鼠标, 什么键应该用来切换窗体 (比如, Alt+Tab按键,在 Microsoft Windows 环境中的作用), 每个窗口的工具条应该 看起来像什么,他们是否应该有关闭按钮等等。

实际上,X 行使了一种叫做 “窗口管理器”的应用程序的职责。有很多这样的程序可用: AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, Window Maker,等等。每一个窗口管理器 都提供了不同的界面和观感;其中一些还支持 “虚拟桌面”;有一些允许您可以定制一些键来管理您的桌面; 一些有“开始” 按钮,或者其他类似的设计;一些有 “themeable”,通过安装一个 新的主题允许外观的完全改变。这些窗口管理器,还有很多其他的,都可以在 Ports Collection 的 x11-wm 分类目录里找到。

另外,KDEGNOME 桌面环境都有他们自己的窗口管理器 与桌面集成。

每个窗口管理器也有不同的配置机制;有些需要手工来写配置文件, 而另外一些则可以使用 GUI 工具来完成大部分的配置任务,至少 (Sawfish) 有一个用 Lisp 语言来写的配置 文件。

焦点策略: 窗口管理器的另一个特性是鼠标的 “focus policy”。 每个窗口系统都需要有一个选择窗口的方法来接受键盘的输入信息,以及当前 哪个窗口处于可用状态。

您通常比较熟悉的是一个叫做 “click-to-focus” 的焦点策略。 这是 Microsoft Windows 使用的典型焦点策略,也就是您在一个窗口上点击 一下鼠标,这个窗口就处于当前可用的状态。

X 不支持一些特殊的焦点策略。而是,窗口管理器控制着在什么时候哪个窗口 拥有焦点。不同的窗口管理器支持不同的焦点方案。它们都支持点击即获得焦点, 而且它们中的大多数都支持好几种方案。

最流行的焦点策略:

focus-follows-mouse

鼠标指示器下面的窗口就是获得焦点的窗口。这可以不是位于其他所有 窗口顶部的窗口。您可以通过将鼠标移到另一个窗口就可以来改变焦点,您 不需要在它上面点击。

sloppy-focus

这种方式是对 focus-follows-mouse 策略的一个小小扩展。对于 focus-follows-mouse,如果您在根窗口(或桌面背景)上移动鼠标,键盘的 输入也会丢失。对于 sloppy-focus,只有当指针在键入一个新窗口时,窗口 焦点才会发生变化,当退出当前窗口时是不会变化的。

click-to-focus

当前窗口由鼠标点击来选择。窗口被“突出显示” , 出现在所有其他窗口的前面。即使指针被移向了另一个窗口,所有的键盘输入 仍会被这个窗口接收。

许多窗口管理器支持其他的策略,与这些相比又有些变化。您可以看具体 窗口管理器的文档。

5.2.4. 窗口部件

提供工具而非策略的 X 方法使得在每个应用程序屏幕上看到的窗口部件得到了 大大的扩展。

“Widget” 只是针对用户接口中所有列举项目的一个术语,它 可以用某种方法来点击或操作;如按钮,复选框,单选按钮,图标,列表框等等。 Microsoft Windows 把这些叫做“控件”。

Microsoft Windows 和苹果公司的 Mac OS 都有一个严格的窗口部件策略。 应用程序开发者被建议确保他们的应用程序共享一个普通的所见即所得的用户界面。 对于 X,它并不要求一个特殊的图形风格或一套相结合的窗口部件集。

这样的结果是您不能期望 X 应用程序只拥有一个普通的所见即所得的界面。 有很多的流行的窗口部件集设置,包括来自于 MIT 的 Athena, Motif® (模仿 Microsoft Windows 的窗口风格),OpenLook, 和其他一些窗口部件集。

今天,绝大多数比较新的 X 应用程序将使用一个现代风格的窗口设计, 像 Qt, 用来设计 KDE, 或 GTK+,用来设计 GNOME。 在这样一种窗口系统下,UNIX 桌面的一些所见即所得特性作了一些收敛,以使 初学者感到更容易一些。