網誌存檔

2010年11月17日 星期三

「轉貼來源-http://xy0811.spaces.live.com/default.aspx」Linux的X窗口系統結構說明

一、說明
X Server為中心,簡要地分為四層,如圖所示

二、X方式與Framebuffer方式的差異

1. X方式

1) 什麼是X
我們常說的X WindowXX11(X協議的11版本)一般指X協議,或指是基於X協議的X服務端程序(X Server)

2) X ServerX Client

a) X協議指X ServerX 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. 應用程序的顯示方式
很多應用程序同時支持XFramebuffer兩種模式顯示,如gtkqt等,以下我們只討論它基本於X實現的部分

三、分層

1. 應用層(Application)
指X Window上運行所有帶圖形界面的應用程序,每個窗口都是一個X Client

1) X Lib app
直接使用X函數的應用程序,這種程序一般界面簡單,比較底層,比如很多窗口管理器直接寫在這層

2) Gtk app
gtk
又分為gtkgdk兩層,

gtk
為控件及主循環的實現
gdk
相對底層,控制底層繪圖部分,它支持framebufferX11DirectFb
應用程序可調用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) 具體實現
實現通常有兩種方式:一種是managertools在一個程序中實現,一種是分開兩個程序實現,使用時可以隨意組合

a) qvwm, blackbox等較早期的wm,都是managertools在一個程序中實現的

b) xfcemetacity等是分開的,例如:xfce包含toolsmanager,但不在一個程序中實現,它的managerxfwm,我們可在使用xfce時把xfwm替成metacity(metacity是一個manager,不帶tools)

3. X服務器層(X Server)
主循環控制顯示,讀取設備數據,與X Client通訊,事件循環,並把事件送給焦點窗口

1) 普通X Server
功能完整的X Server,代碼量大,支持全,常見的如XFree86,Xorg

2) Tiny X Server
一般用於嵌入式系統,資源佔用小,代碼少,功能及邏輯相對簡單,如KDriveXvesa/Xchips/Xfbdev/Xi810……

4. 系統底層(System)

1) Kernel
與硬件交互,獲得輸入設備的數據,向顯示設備輸出

2) Dev
文件系統中的設備文件,程序通過對它的讀寫和操作與kernel交互,控制硬件

3) 中間層
在程序和Dev層之間,有時還需要庫或程序處理設備數據,比如觸摸屏就使用libts去除噪點,過濾出更有效的數據

沒有留言:

張貼留言