技术扫盲区:X 窗口系统

一:背景介绍
    图形界面一直是Linux用户头疼的问题,出了问题往往一片茫然,大多重装了事。本文试图从宏观的角度剖析一下X系统的简要原理,只有理解了原理才能在解 决问题时有的放矢。
    首先,要搞清楚X系统的构成。平时称呼的X图形界面,实际上是由几个重要部分构成的。它们分别是:
    1、X Server (Xorg)
    2、Display Manager (gdm, kdm, xdm)
    3、Window Manager (metacity, fluxbox, E17, fvwm etc.)
    4、X Client (其他各种图形应用程序,如natulis文件管理器)

    以及几个重要概念:
    1、X session:
       X server启动到X server关闭之间的时间段
    2、X库:
       GUI程序使用的库函数,如GTK+和QT

下 面我们就这几个重要构成的作用、相互关系进行展开,向你展示X的运行原理。

二:原理介绍

1、X Server
    X Server,译作X服务器,是X的核心。X Server是用来驱动硬件,提供基本的图形显示能力的。合理但并不十分科学的你可以把它看作视频卡的驱动程序。只有运行了X Server的Linux系统,X Client才能利用X Server绘出相应的图像。
    X Server早期使用的是XFree86,自4.4版本后,XFree86改用GPL发布,此后开始称为Xorg。X Server部分,主要关注两点:

     1.1 xorg.conf
    xorg.conf是X Server的主要配置文件,它包含一个当前系统的硬件资源列表。X Server就是根据这些硬件资源“组织”出基本的图形能力。xorg.conf文件在/etc/X11/xorg.conf,主要包含几个字段:
************************************************************
    Files:             X系统使用的字体存放目录(字体的具体使用由FontConfig工具主持)
    InputDevice:       输入设备,如键盘鼠标的信息
    Monitor:           显示器的设置,如分辨率,刷新率等
    Device:            显示卡信息
    Screen:            由Monitor和Device组装成一个Screen,表示由它们向这个Screen提供输出能力
    ServerLayout:      将一个Screen和InputDevice组装成一个ServerLayout
************************************************************
    在具有多个显示设备的系统中,可能有多个Screen和多个ServerLayout,用以实现不同的硬件搭配。
    在最近的xorg版本中,X Server已经开始自动侦测硬件,现在的xorg.conf已经都成了默认名称。具体细节还待查,但基本原理还是不变的。

     1.2 X session(X会话)
    前面已经说过,X session是指X server启动后直到X server关闭之间的这段时间。这期间一切跟X相关的动作都属于X session的内容。
    管理X session的程序称为Display Manager,常听说的 gdm 或 kdm 就是 gnome/kde 所分别对应的 Display Manager。
     开启一个X session,也就是开始了图形界面的使用。在开启的过程中,Display Manager会对用户进行认证(也就是用户名密码的输入),运行事先设置好的程序(比如scim输入法就是这个时候启动的)等等。
    这个开启过程要执行的一系列操作都可以在 /etc/X11/Xseesion 以及 /etc/X11/Xsession.d/ 目录下看到,其他还有一些配置文件如Xsession.options, Xresource等,都是执行的X session的初始化过程。仔细阅读这些脚本或配置文件,可以帮助你更好地理解X。

2、Display Manager
    上面说过,Display Manager(后简称DM)是管理X session的程序,常见的有gdm, kdm, xdm等。对于默认进入X界面的Linux系统,必须将DM程序在开机时执行,即:/etc/rc2.d/S13gdm。下面我们从手工启动X的过程,看 一下DM为我们做了哪些工作。
    如果没有设置DM在开机时运行的话,手动启动X使用startx命令。
    man startx
    可以知道,startx的作用可以看作是Display Manager的一种隐性实现。它使用xinit命令,分别根据 /etc/X11/xinit/xinitrc 和 /etc/X11/xinit/xserverrc 中所指定的设置唤起X。
    其中,xserverrc执行X server的运行任务;xinitrc则运行Xsession命令。从 /etc/X11/Xsession 脚本的内容可以看出,它也就是进入 /etc /X11/Xsession.d/ 目录轮询地执行所有脚本。很明显,这些也就是前面所说的Xsession初始化工作。
    综合起来说,Display Manager完成三个任务:
    2.1 X Server的启动;
    2.2 X session的初始化;
    2.3 X session的管理。

3、Window Manager
    X Server提供了基本的图形显示能力。然而具体怎么绘制应用程序的界面,却是要由应用程序自己解决的。而Window Manager(桌面管理器,后简称WM)就是用来提供统一的GUI组件的(窗口、外框、菜单、按钮等)。否则,应用程序们各自为政,既增加了程序开发的 负担,不统一的桌面风格对视觉也是不小的挑战。
    WM的启动由DM控制,在gdm的登录窗口,我们可以进行选择。常见的WM有:Metacity(Gnome默认的WM), fluxbox, fvwm, E17等。

4、X Clients
    最后,就是X Client了。
    X客户端程序,顾名思义,就是使用X服务的程序。firefox,gedit等等都属于X Client程序。
    X Client部分值得考虑一下的就是DISPLAY环境变量。它主要用于远程X Client的使用。该变量表示输出目的地的位置,由三个要素组成:
    [host]:display[.screen]
    host指网络上远程主机的名称,可以是主机名、IP地址等。默认的host是本地系统,你可以在自己系统上echo $DISPLAY看一下。
    display和screen分别代表输出画面的编号和屏幕的编号。具体细节由于硬件的缺乏,还有待进一步研究。

5、GNOME 与KDE
    光讲X却不提GNOME和KDE,对一些新手来说可能会更糊涂。所以简单解释一下,GNOME/KDE都是集成的工作环境,是完整X系统的一个组成部分。 换句话说, 它们提供的是一整套从DM到WM到一揽子X Client的程序集合。以GNOME为例:DM是gdm,WM是 metacity,X Client有gnome-terminal, gedit, rhythmbox等等。
    不过要注意到,即使没有这些组件,我们像前辈们一样用startx登录X,用fvwm做窗口管理器,用那些最最原始的应用程序,仍然可以实现一个高效的X 工作环境。GNOME/KDE的出现只是让这一切变得整合性更好而已。



zz:http://kongjian.baidu.com /wienerlee/blog/item/f49f570208d2e80a4bfb5196.html

技 术扫盲区:窗口管理器(WM)

一:什么是 X 视窗管理器
    X视窗管理器是 X Window系统中,用来控管视窗外观和放置方式的电脑软体视窗系统,主要用於类Unix系统。
    X视窗管理器和苹果公司的Macintosh和微软公司的Windows的操作环境不同。后两者都有长期固定的用户界面和操作模式,而这些都是由开发商决 定的,一旦选定无法更换或者只能作微小调整。X视窗管理器是一个完全开放的,和图像显示软体无关的用户界面。用户可以自由决定采用自己喜爱的第三方提供的 窗口管理器。这些管理器可以拥有完全不同的
    1、外观和功能的可配置性
       o 用於启动程序或者改变选项的文本化的菜单
       o 停靠栏或者是其他图形化的启动程序的样式。
       o 多桌面、虚拟桌面(比显示器尺寸要大的桌面)和用於切换桌面的桌面切换器(pager)。
    2、内存和系统资源的消耗
    3、和桌面环境的整合程度。提供更加完整的用户界面、系统软体和应用程序。

    和微软Windows系统不同的shell也大量涌现。例如,LiteStep可以将Windows 95,98或者NT的界面换成Afterstep样式的。OS/2自带Presentation Manager作为默认shell,但第三方公司资源提供了很多替代品。

     窗口管理器和桌面环境的区别:
    窗口管理器和桌面环境是用户在 X Window 系统里的主要界面. 窗口管理器只是个程序, 它控制窗口的外表,位置和提供用户去操作这些窗口程序的方法. 桌面环境为操作系统提供了一个较完整的图形操作界面, 和提供了一定范围和用途的实用工具和应用程序.

二:X 视窗管理器的运作原理
    当视窗管理器开始运作时,X 伺服器和客户端之间的互动,会重新导向到视窗管理器。每当要显示一个新视窗时,这个请求便会被重新导向到视窗管理器,它会决定视窗的初始位置。此外,大部 分较新的视窗管理器会改变视窗的亲属关系,通常会在视窗顶部加上标题列,并在视窗周围加上装饰性的框架。这两个部分皆由视窗管理器来控制,而不是其它程 式。因此,当使用者点击或拖曳那些元件时,视窗管理器会进行适当的动作(如移动或改变视窗的大小)。
    视窗管理器也负责处理图示,图示并不存在於X Window核心协议的层次中。当使用者将视窗图示化时,视窗管理器会取消视窗的映射(使其不可见),并完成适当的动作,将视窗改显示成图示。某些视窗管 理器并不支援图示功能。
    视窗管理器主要的目标,就如同其名,是用来管理视窗的。许多视窗管理器提供附加的功能,如处理滑鼠在根视窗上的点击,呈现出窗格以及其它的视觉化元件,处 理按键(例如 Alt-F4 可关闭视窗),判定哪一个应用程式在启动时执行等等。

三:特殊的视窗管理器
    几种特殊的视窗管理器如下。
    1、虚拟视窗管理器
       虚拟视窗管理器使用了虚拟的萤幕画面,其解析度可大於显示器的解析度。当希望有较多的视窗时,这个功能也很有用。虚拟视窗管理器包括有 FVWM、Tvtwm、HaZe 等等。
    2、铺砖式视窗管理器
       铺砖式视窗管理器是以不重叠画面的方式组织萤幕画面(故称为铺砖式),相对於传统的方式,它更近似於以坐标为基础的叠置物件(视窗),其尝试模仿办公桌的 式样。
       第一个砖式视窗管理器是 larswm,随后是 Ion。以下是铺砖式视窗管理器的列表:
       * Awesome
       * Larswm
       * Ion
       * TrsWM
       * Stumpwm
       * wmii
       * dwm
       * ratpoison
       * XWEM
       * Xmonad

四:主流X视窗管理器
    * AfterStep
    * Blackbox (minimalist)
    * evilwm
    * Enlightenment (window manager)|Enlightenment
    * Fluxbox (lightweight, based on Blackbox)
    * FVWM(a virtual window manager,derived from twm)
    * IceWM
    * Ion (window manager)|Ion tiling tabbed window manager designed with keyboard users in mind
    * Openbox( LXDE默认的窗口管理器)
    * KWin(最初叫 KWM, 是 KDE默认的窗口管理器)
    * Metacity( GNOME 2.2后成为默认的窗口管理器)
    * MWM (Motif (widget toolkit)|Motif Window Manager), Motif Window Manager
    * Sawfish (window manager)|Sawfish (a past default for GNOME, originally called Sawmill)
    * twm (default for the X Window System since version X11R4)
    * Window Maker
    * Xfwm, Xfce默认的窗口管理器

五: 其它X视窗管理器
    * 4dwm
    * 5Dwm (derived from mwm, true SGI look&feel)
    * 9wm [1](clone of the original windowing system of Plan 9)
    * aewm [2]
    * amiwm [3] Amiga workbench unix clone.
    * Compiz (a compositing window manager) and Beryl (window manager) an under development fork of it
    * CTWM
    * dwm
    * EvilPoison [4] (a fork of evilwm with Ratpoison-like keybindings)
    * FVWM95
    * HaZe
    * JWM (Joe's Window Manager)
    * Kahakai
    * larswm
    * Luminocity (experimentation in compositing)
    * LWM [5]
    * Matchbox [6]
    * OLWM(and OLVWM [7] with virtual desktops, OPEN LOOK window managers)
    * hackedbox [8]
    * Oroborus
    * PekWM
    * PLWM
    * PWM
    * Qvwm (Windows 95/98 look-alike) [9] (list of forks)
    * Ratpoison
    * Scwm (the Scheme constraints window manager)
    * Orion A nested (tiled or floating) window manager written in Scheme and scsh
    * swm (the original virtual desktop implementation)
    * Toy'd(HomePage GoogleProject a portable window manager for MS-Windows & UNIX / Linux platforms)
    * TrsWM
    * uwm
    * Waimea [10]
    * WindowLab
    * wm2
    * WMI
    * wmii
    * XPwm(for XPde,Windows XP Look alike)


zz:http://zh.wikipedia.org /wiki/X%E7%AA%97%E5%8F%A3%E7%AE%A1%E7%90%86%E5%99%A8
3月15日

你可能感兴趣的:(技术扫盲区:X 窗口系统)