FreeBSD连载(48):X Window的基本概念

使用和配置X Window

设置好X服务器之后,就可以使用startx启动图形界面,以使用其他图形界 面的经验来使用X Window,但使用者常常会发现这个界面相当简单和粗糙。这是因 为X Window具有很大的灵活性和可配置性,其最基本的系统只提供了最基本设置, 如果要真正得到好用的界面,还需要进一步的设置。 为了设置和使用X Window系统,首先就需要了解相关的X Window概念。

  • X Window的基本概念

第一次接触X Window系统的使用者很容易混淆X Window系统中的客户机/服 务器的概念,初次接触X Window的使用者会认为X Window下的客户机/服务器的概念 与普通网络中的客户机/服务器的概念不太相同。通常的观念中,使用者使用客户工 作站,使用远端服务器提供的文件或打印服务,而在X Window下,使用者使用X服务 器进行操作,而客户程序可以运行在本地或者远端计算机上。 如果进一步理解客户/服务器的概念,就会了解客户/服务器的概念指的是具 体运行的进程,而非计算机或使用者。不是与使用者联系最密切的计算机就是客户, 而是首先要明确服务资源,然后再以资源提供者和资源占用者来进行区分。在一般 的客户/服务器方式的应用中,一般是客户程序直接与使用者交互,因此就容易造成 错误的概念,以使用者为中心来区分客户和服务器。 但在X Window下,服务资源为X服务器的显示处理能力,X客户程序要显示图 形图象,但它不能直接控制显示硬件,只能使用由用户面前的X服务器提供的显示资 源,同样它也不能接受用户输入,也只能使用X服务器控制的键盘或鼠标资源来接受 输入。在这里,X服务器是硬件的控制者,X客户只是单纯的执行程序,只能使用X服 务器提供的服务进行输入输出。

  • X服务器(X Server)是一个管理显示的进程,必须运行在一个有图形 显示能力的计算机上。理论上,一台计算机上可以同时运行多个X服务器,每个X服 务器能管理多个与之相连的显示设备。
  • X客户程序(X Client)是一个使用X服务器显示其数据的程序,它可以运行 在与X服务器不同的计算机上。
  • X协议(X protocol)是X客户程序和服务器进行通信的一套协议,X协议支持 网络,能在本地系统中和网络实现这个协议,支持的网络协议有TCP/IP、DECnet等。

X的这种任务划分有几个优点: 客户程序可以在远程计算机上执行计算任务,而使用的X服务器仅负责复杂的图形 显示,充分发挥X服务器在显示上的优势。 只有X服务器与硬件打交道,所有的客户程序都是硬件无关的,很容易在不同 的平台上移植。 客户程序可以在不同的计算机上运行,从巨型机到个人计算机,充分发挥网络 计算的优越性。 尽管每个X客户程序都可以对整个屏幕范围内进行显示操作,但标准的做法是先 创建一个显示窗口,此后客户程序的所有显示都相对于这个窗口进行操作。这样在同一 屏幕内,就能同时显示多个独立的客户程序,通过对窗口的管理在不同的程序之间进行 切换。每个窗口应该位于屏幕的哪个位置,何时显示,何时隐藏,以及窗口的标题、四 周如何显示,这些都不应该由产生这个窗口的客户程序自己控制和维护,否则就不能达 到简化设计的目的。X Window并没有自己实现这些任务,在X的设计原则中,这些代表 GUI风格的任务仍然是客户程序的任务,因此X将管理窗口的任务给予了一个特殊客户程 序 ── 窗口管理器,使用不同的窗口管理器将使X Window的外观看起来截然不同。 X系统只负责显示图形,并不限制显示和操作的风格,因此不同的X Window的风 格并不相同,使用者可以根据自己的喜好进行选择。 因此X Window上,所有的窗口形成了一个树状结构。X Window的窗口管理程序运 行在根窗口上,所有的其他窗口为根窗口的子窗口,而其他窗口上也有相应的按钮、对话 框等组件,这些是它的子窗口。 由于X Window系统只提供了最基本的系统调用,而具体的窗口都有很多共性,因 此要开发X应用程序,应该首先使用开发工具包,而没有必要直接使用最基本的X Window 的系统调用,以简化写作程序的工作量。不同的公司或组织开发了各种工具包来提供创建 和管理具体窗口的构件,例如Motif套件,OpenLook套件等。每种套件都提供了菜单、按 钮、对话框等图形界面的标准构件,还提供基本的窗口管理器。使用不同套件开发的程序 ,其显示风格也不相同,因此就在不同程序之间形成了不同的GUI风格。Motif和Openlook 就是两种不同的图形界面风格,当前Motif成为了商业X Window的一个标准,很多商业软 件均基于Motif进行开发,而Openlook则没有获得更普遍的支持。 未完,待续。。。

Published At
Categories with 服务器类
comments powered by Disqus