一、說明
以X Server為中心,簡要地分為四層,
二、X方式與Framebuffer方式的差異
1. X方式
1) 什麼是X
我們常說的X Window,X,X11(指X協議的11版本)一般指X協議,或指是基於X協議的X服務端程式(X Server)
2) X Server與X Client
a) X協議指X Server及X Client組成的c/s架構,及其通訊協議的實現
b) X Server有主事件迴圈,由它來處理使用者輸入、顯示及與X Client通訊
c) X Client即X案頭上啟動並執行普通應用程式
應用程式如果想顯示資料,需要利用X Lib庫建立X視窗(X Client),它通過X協議與X Server通訊,讓X Server完成顯示;X Server會把接到鍵盤滑鼠事件,傳給焦點所在的X Client處理
2. Framebuffer方式
Framebuffer方式相對簡單,它由核心直接支援,通常用於嵌入式系統。應用程式可以得到螢幕顯示地區的指標,然後對其寫資料來進行顯示,其中視窗的概念不強,它自身不帶視窗管理,需要應用軟體自己管理視窗。比如qtopia基本於framebuffer顯示時,qtopia自身實現了視窗管理功能
3. 應用程式的顯示方式
很多應用程式同時支援X和Framebuffer兩種模式顯示,如gtk,qt等,以下我們只討論它基本於X實現的部分
三、分層
1. 應用程式層(Application)
指X Window上運行所有帶圖形介面的應用程式,每個視窗都是一個X Client
1) X Lib app
直接使用X函數的應用程式,這種程式一般介面簡單,比較底層,比如很多視窗管理器直接寫在這層
2) Gtk app
gtk又分為gtk和gdk兩層,
gtk為控制項及主迴圈的實現
gdk相對底層,控制底層繪圖部分,它支援framebuffer、X11、DirectFb等
應用程式可調用gtk函數,也可直接調用gdk函數
gtk常和cairo一起實現二維特效
3) Qt app
Qt也通過調用X Lib實現圖形介面
Qt的優勢在於它是C++實現的,使用起來程式結構更好,也有較成熟的嵌入式版本
4) SDL app
SDL也通過調用X Lib實現圖形介面
SDL更底層,代碼少,沒有控制項,但做特殊效果很好用
2. 視窗管理器層(Window manager簡稱wm)
Window manager是特殊的X Client,也通過X Lib庫與X Server互動,與一般應用不同的是:它負責控制各個視窗的動作,及操作主視窗
WM的功能分為管理(manager)和工具(tools),
1) Manager
負責各個視窗的建立銷毀/顯示隱藏/最大最小化/移動縮放,管理視窗隊列,設定焦點視窗,視窗轉場效果等
2) Tools
實現案頭工具條,案頭菜單等基本介面及小工具
3) 具體實現
實現通常有兩種方式:一種是manager和tools在一個程式中實現,一種是分開兩個程式實現,使用時可以隨意組合
a) qvwm, blackbox等較早期的wm,都是manager和tools在一個程式中實現的
b)
xfce、metacity等是分開的,例如:xfce包含tools和manager,但不在一個程式中實現,它的manager是xfwm,我們可在使用xfce時把xfwm替成metacity(metacity是一個manager,不帶tools)
3. X伺服器層(X Server)
主迴圈控制顯示,讀取裝置資料,與X Client通訊,事件迴圈,並把事件送給焦點視窗
1) 普通X Server
功能完整的X Server,代碼量大,支援全,常見的如XFree86,Xorg等
2) Tiny X Server
一般用於嵌入式系統,資源佔用小,代碼少,功能及邏輯相對簡單,如KDrive(Xvesa/Xchips/Xfbdev/Xi810……)
4. 系統底層(System)
1) Kernel
與硬體互動,獲得輸入裝置的資料,向顯示裝置輸出
2) Dev
檔案系統中的裝置檔案,程式通過對它的讀寫和操作與kernel互動,控制硬體
3) 中介層
在程式和Dev層之間,有時還需要庫或程式處理裝置資料,比如觸控螢幕就使用libts去除噪點,過濾出更有效資料