一,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協議一樣.因為輸入設備和顯示設備不是同一個設備,而且他們需要相互配合,進行畫面顯示,所以需要一個交互協議,建立他們直接的溝通橋梁。
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)
實現這個協議的常用服務器有:apacheIIS 等
請求這些服務器傳輸文件的客戶有:IE,MOZILLA ,NETSCAPE等.
協議是X
實現這個協議的常用服務器有Xfree86,Xorg,Xnest等
請求這些服務器來完成顯示任務的客戶:所有的X應用程序.
只不過HTTP協議的服務器和客戶端通常都在兩台不同的電腦(服務器和客戶機)之間來實現,所以一般人對這個比較容易理解.而X協議的服務器和客戶端程序通常在同一台電腦上,因此很多用戶都感到對此很難理解.既然是協議,那么肯定和平台無關的,因此可以讓X應用程序顯示在任何裝有X服務器的遠程計算機上.甚至顯示在裝有Xnest服務器的windows系統上.只不過在大多數情況下,X應用程序都用本機的X服務器,然后X服務器將顯示結果輸出到本機的顯示器.這也是很多人不理解X是一種協議的原因.
四,X、X11和X11R6又是什么關系?
不知道初學者有沒有注意到/usr/X11R6這個目錄,這是XFree的默認安裝目錄
X11R6實際上是XProtocol version 11 Release6(X協議第11版第六次發行)的意思,就是說目前用的X協議是第11版的,然后經過了6次小的修正.不同版本的X協議是不能通信的.就象我們現在IPV4和IPV6不能通信一樣,不過不用擔心,現在的X服務器軟件和X應用程序都遵循X11R6.
另外XFree863.3.6 XFree86 4.3.6等這些版本是實現X協議的軟件XFree86的版本號.這是初學者經常高混淆的概念.
協議版本和實現協議的軟件的版本--這兩個概念的區別你分清楚了嗎?
一,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協議一樣.因為輸入設備和顯示設備不是同一個設備,而且他們需要相互配合,進行畫面顯示,所以需要一個交互協議,建立他們直接的溝通橋梁。
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)
實現這個協議的常用服務器有:apacheIIS 等
請求這些服務器傳輸文件的客戶有:IE,MOZILLA ,NETSCAPE等.
協議是X
實現這個協議的常用服務器有Xfree86,Xorg,Xnest等
請求這些服務器來完成顯示任務的客戶:所有的X應用程序.
只不過HTTP協議的服務器和客戶端通常都在兩台不同的電腦(服務器和客戶機)之間來實現,所以一般人對這個比較容易理解.而X協議的服務器和客戶端程序通常在同一台電腦上,因此很多用戶都感到對此很難理解.既然是協議,那么肯定和平台無關的,因此可以讓X應用程序顯示在任何裝有X服務器的遠程計算機上.甚至顯示在裝有Xnest服務器的windows系統上.只不過在大多數情況下,X應用程序都用本機的X服務器,然后X服務器將顯示結果輸出到本機的顯示器.這也是很多人不理解X是一種協議的原因.
四,X、X11和X11R6又是什么關系?
不知道初學者有沒有注意到/usr/X11R6這個目錄,這是XFree的默認安裝目錄
X11R6實際上是XProtocol version 11 Release6(X協議第11版第六次發行)的意思,就是說目前用的X協議是第11版的,然后經過了6次小的修正.不同版本的X協議是不能通信的.就象我們現在IPV4和IPV6不能通信一樣,不過不用擔心,現在的X服務器軟件和X應用程序都遵循X11R6.
另外XFree863.3.6 XFree86 4.3.6等這些版本是實現X協議的軟件XFree86的版本號.這是初學者經常高混淆的概念.
協議版本和實現協議的軟件的版本--這兩個概念的區別你分清楚了嗎?
五,WM(windowmanager 窗口管理器).
窗口管理器的作用就是實現窗口的最大化,最小化,移動,關閉等.而這些不是X服務器來負責完成的.如果不窗口管理器,X應用程序仍可以啟動,但它就在屏幕中間,不能移動,不能最小化,不能最大化,沒有邊框.
Xfree86自帶了一個簡單的窗口管理器:twm,同時窗口管理器還有GNOME和KDE等。為了更方便的了解窗口管理器的作用,我們可以做以下測試(因我使用的是ubuntu,無法確認以下操作和命令的正確性,請有條件的朋友測試以下並給與指正)。
1、系統(有界面的Linux)啟動后,進入圖形進面,我們打開一個XTERM,輸入init3就可以安全的回到字符界面.
2、再輸入#startx又返回到圖形界面,你看到的是一個和平時使用一樣的完整的圖形界面操作環境.你可以最大化,最小化,移動,關閉窗口等.
3、我們還是再次進入字符界面,看看吧,按ctrl+alt+backspace反回字符界面.輸入:#xinit(注:與第二步的命令startx不同),再次啟動圖形界面,你看到了什么,你看到一個XTERM.而且不能移動.但是你可以在這個XTERM中輸入命令打開X應用程序,如果我輸入:#mozilla。打開瀏覽器,你看到的瀏覽器和平時有什么不同嗎?他在屏幕中間,不能移動,不能最小化,不能最大化,沒有邊框.
為什么同樣一個X應用程序會有這樣的不同呢?因為我們用startx起動圖形界面的時候同時也啟動了一個默認的WM(即窗口管理器),如果你用KDE就起動了KDE,如果你用GNOME就起動了GNOME.但是你用xinit起動圖形界面的時候卻沒有起動WM.
現在你明白窗口管理器的作用了嗎?
4、如果你用xinit起動圖形界面並在xterm中輸入twm,看看會有什么?xterm被加上了一個邊框,你可以通過這個邊框移動,最大化,最小化這個xterm,twm就是XFree86中自帶的窗口管理器,是一個比較簡陋的最簡單的窗口管理器,但是他具有窗口管理器的全部特征.
5、如果你不輸入twm而輸入gnome-session就可以起動GNOME或者輸入startkde起動KDE.
通過以上的實驗你就可以清楚的明白他們之間的關系.
另:
其它的小型窗口管理器有:
windowmaker,after step,blackbox,fvwm,fvwm2,等等都是常用的優秀窗口管理器.REDHAT9中有windowmaker 但是默認不安裝,大家可以裝來試試.只要xinit再wmaker&就可以用windowmaker了.
六、X協議的Client端有時誰實現的呢?
XFree86是X協議的服務器軟件(注以軟件的形式實現),但Client端更多的是方便程序員更方便的使用X協議與服務器端的XFree86交互,故就產生了一個Xlib庫,封裝了X協議內容,如果你還覺得直接使用Xlib不方便,於是就產生了qt和gtk,對Xlib進一步封裝,提供了很多控件,可以可視化的使用X協議更方便程序員的開發。
Xlib、qt、gtk直接關系如下圖:
QT是直接使用xlib庫的,GTK並為直接使用xlib,而是使用更低層的函數庫GDK和Glib。這種結構使得Gtk可以更方便地移植到其它系統上,或使用與XWindows系統無關的圖形庫。
七、KDE、GNOME、QT和GTK直接關系。
KDE和GNOME是窗口管理器,啟動他們后我們進入了可視化操作(圖形界面),既然需要顯示圖形,自然少不了與X協議的服務器軟件打交道,既然QT和GTK進一步封裝了X協議,並且他們提供了更為豐富的窗口及控制機制,於是在QT基礎上實現的窗口管理器叫KDE,在GTK基礎上實現的窗口管理器叫GNOME.
再次提示:KDE和GNOME並不只是窗口管理器,同時提供了桌面、菜單等等。