LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1603|回复: 3

X, X11, XFREE, WM, KDE, GNOME等之间的关系

[复制链接]
发表于 2009-6-16 23:15:31 | 显示全部楼层 |阅读模式
最近在 Arch下安装 kdemod,被一系列关于 X 的知识的不了解而困扰,google  了一下发现一篇好文章,就转了过来,希望能对许多遇到此问题的新手有所帮助。放在此处,方便大家学习和讨论。

以下来自http://blog.chinaunix.net/u2/78601/showart_1918160.html

关于linux图形界面的基本知识

很多LINUX的初学者分不清除linux和X之间,X和Xfree86之间,X和KDE,gnome等之间是什么关系.常常混淆概念,我想以比较易于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限肯可能存在错误,请高手指正.

一,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.顺便说一句,苹果电脑的图形界面用的也是X协议,而且被认为是做的最好的X协议图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很多大型三维图形设计软件都是在苹果平台上的原因.

为了便于理解拿HTTP协议来比较:
协议是HTTP (hyper text transmission protocol)
实现这个协议的常用服务器有:apache IIS 等
请求这些服务器传输文件的客户有:IE ,MOZILLA ,NETSCAPE等.


四,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是KING DESKTOP ENVIRMENT (桌面环境之王)的缩写.他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等.

GNOME是GNU Network Object Model Envirment 的缩写.和KDE一样,也是一个功能强大的综合环境.

另外在其它UNIX系统中,常常使用CDE作为这样一个环境.

其它的小型窗口管理器有:
window maker,after step,blackbox,fvwm,fvwm2, 等等都是常用的优秀窗口管理器.REDHAT9中有 window maker 但是默认不安装,大家可以装来试试.只要xinit再 wmaker&就可以用windowmaker了.



七,linux图形界面层次关系总结

linux本身--> X服务器--> 窗口管理器(综合桌面环境)

-->X应用程序.


以上就是linux图形界面的大概情况.
本人也是从各种书籍和资料上看来的,难免有理解错和看错的地方.说的不对的地方欢迎大家交流.


大家有什么关于 X 的疑问,尽情讨论。
发表于 2009-6-17 07:24:55 | 显示全部楼层
貌似是随手都能上网找得到的资料,而且部份内容已过时
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-21 18:06:39 | 显示全部楼层
下面这篇文章看后感触很深,放在这里,方便大家学习。
以下引自:
http://doc.linuxpk.com/81068.html
X11R7

X11R7其实就是目前Ubuntu使用的X Server,它于2005年12月被释出,与之前的X11R6.9其实具有相同的源代码(Source Code)。不过X11R7的模块化设计,可提高开发时的容易度。
X11R重要目录

与X11R7有关的软件,大多放在/usr及其子目录中。以下是较为重要的目录的说明:

/usr/bin:存放X Server和不同的X Clients。

/usr/include:开发X Client和图形所需的文件路径。

/usr/lib:X Server和X Clients所需的函数库目录。

/usr/lib/X11:保存多项资源,如字体和文件等。

/usr/lib/xorg/modules:包含驱动程序与多种X Server模块。

/usr/X11/man:保存X11程序编写时的手册说明页。
/etc/X11/xorg.conf文件

在安装时如果没有设置X Window系统,之后必须先行设置鼠标、键盘、显示器以及显示卡等,这样才能成功启用X Window系统,而这些设置都记录在/etc/X11/xorg.conf文件中。这个文件的重要性可见一斑。

这个文件由数个Section/EndSection的区块组成,而每个区块的格式如下:

Section "Section名称"

          选项名称     "选项值"

           选项名称     "选项值"

          选项名称     "选项值"



EndSection

下面将说明/etc/X11/xorg.conf文件中使用的Section类型及每个类型可用的选项名称和选项值。
ServerLayout

“ServerLayout”Section主要用于建立X Server启动时的外观,如果文件中包含多个ServerLayout Section,则默认会使用第一个ServerLayout Section的设置。

以下是此区块的系统默认值,以及可供使用的选项说明:

Section "ServerLayout"

        Identifier                    "Default Layout"

        Screen                        "Default Screen"

        InputDevice                "Generic Keyboard"

        InputDevice                "Configured Mouse"

        InputDevice                "stylus" "SendCoreEvents"

        InputDevice                "cursor" "SendCoreEvents"

        InputDevice                "eraser" "SendCoreEvents"

EndSection

Identifier:此ServerLayout Section的惟一名称。

Screen:“Screen”Section指定的名称,此名称左侧的数字表示在Multi-head环境下的屏幕数量,如果使用标准的Single-head显示卡,则此值为0。在此名称右侧的数字分别代表屏幕左上角的X与Y绝对坐标,默认值为“0 0”。

InputDevice:在X Server中的“InputDevice”Section名称。通常在此仅有两行设置,即Mouse0和Keyboard0,也就是系统中的第一个鼠标和键盘,而其他的设备大多可以忽略。
Files

“Files”Section用于设置X Server服务的路径,如字体和颜色。以下是此区块的系统默认值,以及可供使用的选项说明:

Section "Files"

        FontPath         "/usr/share/X11/fonts/misc"

        FontPath         "/usr/share/X11/fonts/cyrillic"

        FontPath         "/usr/share/X11/fonts/100dpi/:unscaled"

        FontPath         "/usr/share/X11/fonts/75dpi/:unscaled"

        FontPath         "/usr/share/X11/fonts/Type1"

        FontPath         "/usr/share/X11/fonts/100dpi"

        FontPath         "/usr/share/X11/fonts/75dpi"

        FontPath         "/usr/share/fonts/X11/misc"

        # path to defoma fonts

        FontPath         "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"

EndSection

RgbPath:RGB数据库的路径。这个文件定义在X中所有有效颜色的名称,并且指定数值。

FontPath:设置X Server寻找字体时的路径。可以同时使用多个路径,但需用逗号隔开。
Module

“Module”Section主要用来告诉X Server应加载哪些模块。这些模块可以提供额外的服务功能,一般并不需要更改此处的值。此处使用的惟一选项为“Load”,它可用来加载模块。以下是此区块的系统默认值:

Section "Module"

        Load    "i2c"

        Load    "bitmap"

        Load    "ddc"

        Load    "dri"

        Load    "extmod"

        Load    "freetype"

        Load    "glx"

        Load    "int10"

        Load    "type1"

        Load    "vbe"

EndSection
InputDevice

“InputDevice”Section用于设置鼠标或键盘等输入设备,以便通过X Server提供信息给Linux系统,多数系统至少都存在两个InputDevice Section(鼠标和键盘)。

以下是此区块的系统默认值,以及可供使用的选项说明:

Section "InputDevice"

        Identifier         "Generic Keyboard"

        Driver                        "kbd"

        Option            "CoreKeyboard"

        Option            "XkbRules"     "xorg"

        Option            "XkbModel"    "pc105"

        Option            "XkbLayout"    "us"

        Option            "XkbOptions" "lv3:ralt_switch"

EndSection

Section "InputDevice"

        Identifier         "Configured Mouse"

        Driver                        "mouse"

        Option            "CorePointer"

        Option            "Device"                    "/dev/input/mice"

        Option            "rotocol"                  "ExplorerPS/2"

        Option            "ZAxisMapping"                    "4 5"

        Option            "Emulate3Buttons"      "true"

EndSection

Section "InputDevice"

    Driver        "wacom"

    Identifier    "stylus"

    Option        "Device"        "/dev/wacom"    # Change to

                                                  # /dev/input/event

                                                 # for USB

    Option        "Type"          "stylus"

    Option        "ForceDevice"   "ISDV4"         # Tablet PC ONLY

EndSection

Section "InputDevice"

    Driver        "wacom"

    Identifier    "eraser"

    Option        "Device"        "/dev/wacom"    # Change to

                                                # /dev/input/event

                                                # for USB

    Option        "Type"          "eraser"

    Option        "ForceDevice"   "ISDV4"        # Tablet PC ONLY

EndSection

Section "InputDevice"

    Driver        "wacom"

    Identifier    "cursor"

    Option        "Device"        "/dev/wacom"    # Change to

                                                  # /dev/input/event

                                                 # for USB

    Option        "Type"          "cursor"

    Option        "ForceDevice"   "ISDV4"         # Tablet PC ONLY

EndSection

Identifier:设置设备的名称。通常这些名称后面都会加上一个数字,第一个设备的数字为0。例如,第一个键盘的Identifier为Keyboard0。

Driver:告诉X Server应该从哪里加载驱动程序。

在大多数的InputDevice Section中,尚有为数不等以“Option”为首的选项,并且包含特定的选项值。如果要启用这些选项功能,只要将每行开头的注释符号“#”去除即可。
Monitor

“Monitor”Section用于设置系统使用的显示器类型,设置此处选项时应特别留意,因为不适当的设置可能会给显示器造成损害。

以下是此区块的系统默认值,以及可供使用的选项说明:

Section "Monitor"

   Identifier    "Generic Monitor"

   Option                            "DPMS"

   HorizSync             28-51

   VertRefresh                      43-60

EndSection

Identifier:显示器的惟一名称。在这些名称后面都会加上一个数字,而第一个显示器的代表数字为0(Monitor0)。

VendorName:显示器制造商名称。

ModelName:显示器类型名称。

HorizSync:与显示器兼容的水平刷新频率范围,其单位为kHz。这个设置值会同时指出是否在此显示器中使用特定的Modeline值。

VertRefresh:与显示器兼容的垂直刷新频率范围,其单位为kHz。这个设置值会同时指出是否在此显示器中使用特定的Modeline值。
Device

“Device”Section用于设置显示卡的信息内容,在此文件中至少需要包含一个以上的Device Section。如果系统中包含多张显示卡,或一张显示卡上有多种设置值,则可以使用多个Device Section设置。

以下是此区块的系统默认值,以及可供使用的选项说明:

Section "Device"

        Identifier                    "VMWare Inc [VMware SVGA II] PCI Display Adapter"

        Driver                        "vmware"

        BusID                        "CI:0:15:0"

EndSection

Identifier:显示卡的惟一名称。

Driver:用来告诉X Server应从何处加载显示卡的驱动程序。

VendorName:显示卡制造商名称。

BoardName:显示卡类型名称。

BusID:显示卡的总线位置,这个选项适用于多显示卡环境。
Screen

“Screen”Section合并了Device和Monitor的部分,以便能够形成成对的设置内容。在此文件中至少需要包含一个以上的Screen Section。

以下是此区块的系统默认值,以及可供使用的选项说明:

Section "Screen"

   Identifier           "Default Screen"

   Device                         "VMWare Inc [VMware SVGA II] PCI Display Adapter"

   Monitor            "Generic Monitor"

   DefaultDepth                 24

   SubSection                  "Display"

         Depth                     1

         Modes                    "1024×768" "800×600" "640×480"

   EndSubSection

   SubSection                   "Display"

         Depth                         4

         Modes             "1024×768" "800×600" "640×480"

   EndSubSection

   SubSection "                Display"

         Depth                         8

         Modes             "1024×768" "800×600" "640×480"

   EndSubSection

   SubSection                       "Display"

         Depth                         15

         Modes             "1024×768" "800×600" "640×480"

   EndSubSection

   SubSection                       "Display"

         Depth                        16

         Modes             "1024×768" "800×600" "640×480"

   EndSubSection

   SubSection                       "Display"

         Depth                         24

         Modes             "1024×768" "800×600" "640×480"

   EndSubSection

EndSection

Identifier:定义一个“Screen”名称,以便在“ServerLayout”Section中进行参照。

Device:指定“Device”Section中的名称。

Monitor:指定“Monitor”Section中的名称。

DefaultDepth:默认的色深(Color Depth)位数。
DRI

Direct Rendering Infrastructure(DRI)是一种接口,它让3D软件可以使用新型显示设备的3D硬件加速功能。除此之外,DRI也能改善2D硬件加速的性能。但通常并不使用这个选项功能,除非在“Module”Section中打开DRI设置。以下是此区块的系统默认值:

Section "DRI"

   Mode     0666

EndSection
回复 支持 反对

使用道具 举报

发表于 2009-6-30 16:56:27 | 显示全部楼层
Post by Speedx;2000102
下面这篇文章看后感触很深

                 
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表