红联Linux门户
Linux帮助

X Window是什么

发布时间:2010-08-21 16:42:18来源:红联作者:fzj968
  对于普通用户来说,操作系统最重要的功能,恐怕就是能让用户方便地享用电脑硬件提供的各种资源,完成日常的工作了。绝大多数用户对于Windows系统都非常熟悉,那么从用户接口上而言,Linux到底有什么吸引人的地方呢?答案是它拥有X Window。下面就让我们进入X Window的缤纷世界,真正体会Linux的眩目光彩。
  1.X Window的简史
  X Window于1984年在麻省理工学院(MIT)电脑科学研究室开始开发的,当时Bob Scheifler正在发展分散式系统(distributed system),同一时间 DEC公司的 Jim Gettys 正在麻省理工学院做 Athena 计划的一部分。两个计划都需要一个相同的东西----一套在UNIX机器上运行优良的视窗系统。因此合作关系开始展开,他们从斯坦福(Stanford)大学得到了一套叫做W的实验性视窗系统。因为是根据W视窗系统的基础开始发展的,当发展到了足以和原先系统有明显区别时,他们把这个新系统叫做X。
  严格地说,X Window系统并不是一个软件,而是一个协议(protocal),这个协议定义一个系统成品所必需具备的功能(就如同 TCP/IP, DECnet 或IBM的 SNA,这些也都是协议,定义软件所应具备的功能)。任何系统能满足此协议及符合X协会其他的规范,便可称为X。

  2.X的基本部件
  X系统不像早期的视窗系统是把一堆同类软件集中在一起,而是由3个相关的部分组合起来的。
  (1)Server(服务器)
  Server是控制显示器和输入设备(键盘和鼠标)的软件。Server可以创建视窗,在视窗中画图形和文字,回应Client程序的“需求”(requests),但它不会自己动作,只有在Client程序提出需求后才完成动作。
  每一套显示设备只对应一个惟一的Server,而且Server一般由系统的供应商提供,通常无法被用户修改。对于操作系统而言,Server只是一个普通的用户程序而已,因此很容易更换新的版本,甚至是第三方提供的原始程序。
  (2)Client(用户端)
  Client是使用系统视窗功能的一些应用程序。在X下的应用程序称做Client,原因是它是Server的客户,要求Server回应它的需求完成特定的动作。
  Client无法直接影响视窗或显示,它们只能送一个请求(request)给Server,由Server来完成它们的请求。典型的请求通常是“在某个视窗中写‘Hello World’的字串”,或者从A到B划一条直线。
  Client的功能大致可分为两部分:向Server提“需求”只是它的一部分功能,其他的功能是为用户执行程序而准备的。例如输入文字信息、作图、计算等等。通常,Client程序的这一部分是和X独立的,它对于X几乎不需要知道什么。通常,应用程序(特别是只大型的标准绘图软件、统计软件等)对许多输出设备具有输出的能力,而在X视窗中的显示只是Client程序许多输出格式中的一种,所以,Client程序中和X相关的部分在整个程序中只占非常小的一部分。
  用户可以通过不同的途径使用Client程序:通过系统提供的程序来使用;使用来自于第三方的软件;或者是用户自己为了某种特殊应用而编写自己的Client程序。
  第一次接触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的视窗管理程序运行在根视窗上,所有的其他视窗为根视窗的子视窗,而其他视窗上也有相应的按钮、对话框等元件,这些是它的子视窗。如图7-2所示。
  由于X Window系统只提供了最基本的系统调用,而具体的视窗都有很多共性,因此要开发X应用程序,应该首先使用开发工具包,而没有必要直接使用最基本的X Window 的系统调用,以简化编写程序的工作量。不同的公司或组织开发了各种工具包来提供创建和管理具体视窗的构件,例如Motif套件、OpenLook套件等。每种套件都提供了菜单、按钮、对话框等图形接口的标准构件,还提供基本的视窗管理器。使用不同套件开发的程序,其显示风格也不相同,因此就在不同程序之间形成了不同的GUI风格。Motif和Openlook 就是两种不同的图形接口风格,当前Motif成为了商业X Window的一个标准,很多商业软件均基于Motif进行开发,而Openlook则没有获得更普遍的支持。
  (3)通信通道
  有了Server和Client,它们之间就要传输一些信息,这种传输信息的媒介就是我们所要介绍的X的第3个组成部件:通信通道。凭借这个通道,Client传送“需求”给Server。而Server回传状态(status)及其他一些信息给Client。
  Client是通过函数库来使用通信通道的。在系统或网络上支持通信形态需求的是内建于系统的基本的X视窗函数库(library)。只要Client程序利用了函数库,自然就有能力使用所有可用的通信方法。这时通道本身就变得不再重要了,而只是一个概念而已。

  3.Server和Client之间的通信
  Server和Client通信的方法大致有两类,对应于X系统的两种基本操作模式。
  第一类,Server和Client在同一台机器上执行,它们可以共同使用机器上任何可用的通信方法做互动式信息处理。在这种模式下,X可以同其他传统的视窗系统一样高效工作。
  第二类,Client在一部机器上运行,而显示器和Server则在另一部机器上运行。因此两者的信息交换就必须通过彼此都遵守的网络协议进行,最常用的协议为TCP/IP。这种通信方式一般被称为网络透明性,这也几乎是X独一无二的特性。

  4.X的用户接口
  X的设计目标之一就是能创建许多不同形式的用户接口。其他的是视窗系统提供具体的交互方法,而X只提供一般的架构,让系统创建者建造所需的交互风格。这种特性使得开发者可以在X的基础上建造全新的接口,并且可以在任何时刻根据自己的需要选用适当的接口。
  一般来说,用户接口可以分为两部分。管理接口也就是视窗管理器,是命令的最高层,它负责在屏幕上建构或重建视窗,改变视窗的大小、位置,或者将视窗改变成图示等。
  应用接口确定了用户和应用程序之间的交互风格,即用户如何利用视窗系统的设备程序来控制应用程序并输入资料给它。例如,如何用鼠标来选定一个选项。

  5.X独立于操作系统
  X不是内置于操作系统,它只是比用户层次稍高一些。在系统中也是一个相对独立的元件。这样做有如下优点:
  l 易于安装和改版,甚至去除。这种工作不需要重启系统,也不会对其他应用程序造成干扰。
  l 第三方很容易支持并加强它的功能。例如你的制造厂商提供的系统不够好,你可以向别人买更好或更快的版本。
  l X不会制定操作系统,因此成为一种标准,这也是第三方发展软件的原动力。
  l 为了开发者。在Server上进行工作时,如果程序异常中断,只会影响到视窗系统,不会造成机器的损坏或操作系统内核的破坏。
文章评论

共有 11 条评论

  1. 杨度 于 2010-10-07 12:53:46发表:

    有点复杂,新手,慢慢体会把!{:2_91:}谢谢诶楼主

  2. jounywu 于 2010-10-07 11:02:57发表:

    我正学习,感激楼主指导!

  3. jounywu 于 2010-10-07 11:01:39发表:

    我正学习,感激楼主指导!

  4. 木头128 于 2010-10-07 08:29:34发表:

    我正学习,感激楼主指导!

  5. shampoo 于 2010-08-22 13:59:12发表:

    于X windows的架构,
    执行《 C语言式子 {C = A + B; printf("%d", C);} 》这个运算的机器叫X client(IP 15.5.4.3)。
    把C的值打印到屏幕那部电脑叫X server(IP 7.1.2.3)。

    X client有个环境变量DISPLAY,它决定所有的显示动作将被扔到哪个X server去,默认就是本机。

    例如,
    一。 X client下如此命令
    export DISPLAY=7.1.2.3:0
    /usr/bin/xterm
    然后,在X server(IP 7.1.2.3)的第一个屏幕就会出现一个图形终端机xterm,
    这种做法就像IP 7.1.2.3的用户远端登录到client(IP 15.5.4.3)的电脑一样。

    二。当然,X server(IP 7.1.2.3),可以用很多方法来控制某些电脑或某些人是否能够把xterm之类的东西扔过来。

  6. shampoo 于 2010-08-22 13:46:16发表:

    [i=s] 本帖最后由 相思爱文 于 2010-10-7 19:50 编辑 [/i]

    WWW是分散计算,X window是集中计算。

    例如,
    有个C语言式子 {C = A + B; printf("%d", C);}

    在WWW的做法是把整个式子送到用户的IE或火狐,让用户的电脑计算,然后显示。
    X window,则是让运算主机计算出C的值,然后指导用户的电脑如何把《C的值打印到屏幕》。

    这两种做法,各有利弊,也就是在某些特殊场合,能够明显区分出两者的优劣。

  7. ll123456 于 2010-08-22 09:34:40发表:

    现在还需要多久呢?

  8. ll123456 于 2010-08-22 09:34:27发表:

    。。。真让人伤心

  9. paladin0 于 2010-08-22 06:11:57发表:

    简而概之,X-window就是一个协议啦

  10. vastmy 于 2010-08-21 23:48:53发表:

    我正学习,感激楼主指导!

  11. vastmy 于 2010-08-21 23:44:36发表:

    原来如此!