一:背景介绍
图形界面一直是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
一:什么是 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和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