天天看點

Linux圖形界面知識(介紹X、X11、GNOME、Xorg、KDE等之間的關系)

轉載:http://apps.hi.baidu.com/share/detail/11596555

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.(現在的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應用程式.

Xfree86伺服器的實作包括兩個部分,一部分是和顯示卡直接打交道的低層,一部分是和X應用程式打交道的上層。上層負責接收應用程式的請求和滑鼠 鍵盤的動作。而和顯示卡直接打交道的底層負責指揮顯示卡生成圖形,其實就是顯示卡驅動。上層接收到應用程式的請求後,将請求内容做适當處理,然後交給顯示卡驅動來 指揮 顯示卡完成畫圖的動作.另外,上層的捕捉鍵盤和滑鼠動作的部分會向應用程式提供滑鼠和鍵盤的狀态資訊,應用程式接收到這些資訊後決定是否再有相應的動作.

平時說的VESA,VGA ,fbdev等其實就是針對不同模式顯示卡的驅動程式.

VESA(Video Electronics Standards Association)

VGA (Video Graphics Array)

fbdev (FrameBuffer Device)

都是不同的顯示卡标準,不過這些标準都已經很老了.現在的顯示卡都相容這幾種模式.

framebuffer模式的顯示卡本身不具有任何運算資料的能力,他好比是一個暫時存放水的水池.CPU将運算後的結果放到這個水池,水池再将結果 流到顯示器.中間不會對資料做處理.在這中情況下,所有顯示任務都有CPU完成,CPU負擔很重.從frambuffer這個名字我們就能猜測到他的功能 了(資料偵緩沖).

在linux核心中有有framebuffer機制,摹仿framebuffer顯示卡的這種功能.他的好處是把顯示卡的硬體結構抽象掉,把所有的顯示卡都當做一個"水池"來用.應用程式也可以直接讀取這個水池的内容.framebuffer的裝置名是 /dev/fb

可以用指令:

#dd if=/dev/zero of=/dev/fb

清空螢幕.如果你的X用的是framebuffer的驅動,螢幕将全變黑.通過移動滑鼠,切換視窗等動作可以讓原先的内容重新顯示.

如果你不用framebuffer驅動,可以在字元模式下做這個試驗.螢幕将全部被清空.

以下的指令:

#dd if=/dev/fb of=fbfile

可以将fb中的内容儲存下來,以後可以重新寫回螢幕:

#dd if=fbfile of=/dev/fb

作用類似于螢幕截圖,但是截下的圖不能用普通圖檔浏覽器看.

現在知道linux中framebuffer裝置的神奇了吧.

linux字元界面在高分辨率下,啟動時會有一個小企鵝logo,這個logo就是用framebuffer功能寫上螢幕的.

VESA和VGA比FB要好很多,但是他的顯示能力也很有限.CPU仍舊要處理大部分的顯示任務.

現在的顯示卡就不一樣了,CPU幾乎不參數顯示任務,而專注于運算工作.我們平時在linux下裝顯示卡驅動,其實就是替換掉XFree86中底層的那 一部分. 使他有更強的顯示能力.比如你的顯示卡是nvidia的,XFree預設的驅動是"nv",他是一個nvidia顯示卡的通用驅動,但是他不能發揮 nvidia顯示卡的性能.這個"nv"驅動子產品可以在:

/usr/X11R6/lib/modules/drivers

目錄下找到,檔案名是:nv_drv.o

這個目錄下還有很多顯示卡驅動子產品.

apm_drv.o dummy_drv.o nsc_drv.o sis_drv.o

ark_drv.o fbdev_drv.o nv_drv.o tdfx_drv.o

ati_drv.o glint_drv.o r128_drv.o tga_drv.o

atimisc_drv.o i128_drv.o radeon_drv.o trident_drv.o

chips_drv.o i740_drv.o rendition_drv.o tseng_drv.o

cirrus_alpine.o i810_drv.o s3_drv.o vesa_drv.o

cirrus_drv.o linux s3virge_drv.o vga_drv.o

cirrus_laguna.o mga_drv.o savage_drv.o

cyrix_drv.o neomagic_drv.o siliconmotion_drv.o

fbdev vga evsa 等都在其中.

隻要在XF86Conf檔案中的Section module段中指定了什麼驅動,X就用哪個驅動.

代碼:

Section “Module”

Load “dbe”

Load “extmod”

Load “fbdevhw” #這裡用的是fbdev

Load “glx”

Load “record”

Load “freetype”

Load “type1”

Load “dri”

EndSection

這是XFree86 4.0以上版本的方法.即X主程式和驅動子產品是分開的.

主程式是/usr/X11R6/bin/XFree86 (即上層部分)

然後主程式啟動的時候根據配置檔案決定用哪一個驅動.

但是,在XFree86以前的版本(3.3.6)中, X主程式和驅動子產品是合在一起的,是以,以前的Xfree86 3.3.6 有很多針對不同顯示卡的版本.

另外其他的X伺服器如KDrive 也是驅動也主程式整合的,是以同樣是KDrive X伺服器會有 VESA ,SVGA ,和 fbdev的版本之分.因為這些都是輕量級的X伺服器,為了簡化結構他做成這樣.

Xfree86 4 做成驅動和主程式分離的好處是使用者可以自己添加更新驅動.

繼續閱讀