Chinaunix首页 | 论坛 | 博客
  • 博客访问: 685861
  • 博文数量: 130
  • 博客积分: 2192
  • 博客等级: 大尉
  • 技术积分: 1410
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-31 15:37
文章分类

全部博文(130)

文章存档

2013年(1)

2012年(4)

2011年(27)

2010年(97)

2009年(1)

分类: 嵌入式

2010-06-29 20:23:33

一:背景介绍
    图形界面一直是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: /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: /wiki/X%E7%AA%97%E5%8F%A3%E7%AE%A1%E7%90%86%E5%99%A8
3月15日

技 术扫盲区:linux图形界面的基本知识

一:linux本身没有图形界面
    linux现在的图形界面的实现只是linux下的应用程序实现的。
    图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统。linux和Xfree的关系就相当于当年的DOS和WINDOWS3.0 一样,windows3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样XFree只是 linux 下的一个应用程序而已.不是系统的一部分,但是X的存在可以方便用户使用电脑.WINDOWS95及以后的版本就不一样了,他们的图形界面是操作系统的一 部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形界面linux还是   linux,很多装linux的WEB服务器就根本不装X服务器.这也WINDOWS和linux的重要区别之一。

二:X是协议,不是具 体的某个软件:      
    X 是协议,就像HTTP协议,IP协议一样.
    这个概念很多初学者甚至学习LINUX有一定时间的人都混淆,一个基于X的应用程序需要运行并显示内容时他就联接到X服务器,开始用X协议和服务器交谈.
    比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.X应用程序只负责告诉X服务器在屏幕的什么地方用什 么颜色画一个多大的圆,而具体的"画"的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工作是由X服务器来完成的.
    X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先生,我发现 鼠标被按下了,您有什么指示吗?如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正方形,当然 他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画--那是服务器的事情.

    那么协议是需要具体的软件来实现的,这就是下面我要讲的:

三:X和XFree86的关系.      
    有了协议就需要具体的软件来实现这个协议.就好比我们有了交通法规就需要交警去根据法规维护交通秩序一样.
    Xfree86就是这样一个去根据法规实现协议 的"交警".他按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务.当然不仅仅是某个特定的交警才可以去维护和实现这个法规,比如还可以由交通协 管员来实现交通法规,必要的时候警察也可以介入,当然前提是他们都要懂得交通法规,也就是要懂得协议.
    所以实现X协议的软件也并不只有XFree86, XFree86只是实现X协议的一个免费X服务器软件.商业上常用MOTIF,现在还有XORG,还有很多很小的由爱好者写的小的X服务器软件.甚至可以 在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示.多么神奇.你可以用 google找到这样的X服务器软件.只不过在LINUX上最常用的是XFree86.(现在的linux发行版都用Xorg了)顺便说一句,苹果电脑的 图形界面用的也是X协议,而且被认为是做的最好的X协议图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很多大型三 维图形设计软件都是在苹果平台上的原因.      
  为了便于理解拿HTTP协议来比较:
  
  协议是HTTP(hyper   text   transmission   protocol)      
  实现这个协议的常用服务器有:apache IIS 等      
  请求这些服务器传输文件的客户有:IE, MOZILLA, NETSCAPE等.

  协议是X      
  实现这个协议的常用服务器有Xfree86, Xorg, Xnest等      
  请求这些服务器来完成显示任务的客户:所有的X应用程序.

  只不过HTTP协议的服务器和客户端通常都在两台不同的电脑(服务器和客户机)之间来实现,所以一般人对这个比较容易理解.而X协议的服务器和客户端程序 通常在同一台电脑上,因此很多用户都感到对此很难理解.既然是协议,那么肯定和平台无关的,因此可以让X应用程序显示在任何装有X服务器的远程计算机上. 甚至显示在装有Xnest服务器的windows系统上.只不过在大多数情况下,X应用程序都用本机的X服务器,然后X服务器将显示结果输出到本机的显示 器.这也是很多人不理解X是一种协议的原因.

四:X和X11R6又是什么关系?      
  不知道初学者有没有注意到/usr/X11R6这个目录,这是XFree的默认安装目录      
  X11R6   实际上是   X   Protocol   version   11   Release   6      
  (X协议第11版第六次发行)的意思,就是说目前用的X协议是第11版的,然后经过了6次小的修正.不同版本的X协议是不能通信的.就象我们现在IPV4 和IPV6不能通信一样,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6.      
  另外XFree86   3.3.6   XFree86   4.3.6   等这些版本是实现X协议的软件XFree86的版本号.这是初学者经常高混淆的概念.      
  协议版本和实现协议的软件的版本--这两个概念的区别你分清楚了吗?      
   
五:X服务器和 WM(window manager 窗口管理器)之间是什么关系.      
    平时大家起动图形界面是怎么启动的呢?      
    如果你是一开己就进入图形界面那就太遗憾了.应为你错过了了解X服务器起动过程的好时机.不过没关系.你打开一个XTERM输入:       init   3      
    就可以安全的回到字符界面.      
    好了,等做完以下实验你就完全明白X和WM(window manager 窗口管理器)之间是什么关系了.      
    先输入以下命令:      
    #startx      
    起动图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境.      
    你可以最大化,最小化,移动,关闭窗口等.      
    按ctrl+alt+backspace反回字符界面.      
    输入:      
    #xinit      
    再次启动图形界面,你看到了什么,你看到一个XTERM.而且不能移动.但是你可以在这个XTERM中输入命令打开X应用程序,如果我输入:     #mozilla      
    打开浏览器,你看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框.
     
    为什么同样一个X应用程序会有这样的不同呢?因为我们用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),如果你用KDE就起动了 KDE,如果你用GNOME就起动了GNOME.但是你用xinit起动图形界面的时候却没有起动WM.      
    现在你明白窗口管理器的作用了吗?他的作用就是最大化,最小化,移动,关闭窗口等.而这些不是X服务器来负责完成的.      
    如果你用xinit起动图形界面并在xterm中输入twm,看看会有什么?      
    xterm被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个xterm,twm就是XFree86中自带的窗口管理器,是一个比较简陋的最 简单的窗口管理器,但是他具有窗口管理器的全部特征.      
    如果你不输入twm而输入gnome-session就可以起动GNOME      
    或者输入startkde起动KDE.      
    通过以上的实验你就可以清楚的明白他们之间的关系.

五:关于KDE和GNOME      
    KDE和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单。
    KDE是K Desktop Environment 的缩写.他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等.      
    GNOME是GNU Network Object Model Environment 的缩写.和KDE一样,也是一个功能强大的综合环境.      
    另外在其它UNIX系统中,常常使用CDE作为这样一个环境。

    其它的小型窗口管理器有:      
    window maker、after step、blackbox、fvwm、fvwm2,等等都是常用的优秀窗口管理器。REDHAT9中有 window maker 但是默认不安装,大家可以装来试试.只要xinit再wmaker&就可以用windowmaker了.
     
六:linux图形界面层次关系总结      
  linux本身-->X服务器<-[通过X协议交谈]->窗口管理器(综合桌面环境)-->X应用程序


zz: /t/20061030/16/5119702.html
阅读(3527) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~