Home > News > linux圖形界面編程基本知識

linux圖形界面編程基本知識

April 4th, 2011

壹,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.
    通過以上的實驗妳就可以清楚的明白他們之間的關系。

News , ,

Comments are closed.