多年前認識幾位 unix 下的資深開發人員,例如老許,隨意兄等,當時正在對 windows 下的使用者介面相關領域做研究,比如 win32k.sys 裡面的東西,directui/netui 的實現原理,如何做外掛程式式的視窗風格切換器(類似於 windowblinds 那樣的機制在乙個應用內或者整個系統內的應用),為了做知識延展,曾經請教過他們 unix/linux 下 x 視窗系統的知識。儘管他們專注的領域並不在這方面,但還是解決了我不少疑問,很可惜的是,這麼多年過去後,那些曾經知道的東西又淡忘了。
從 2011 年末,又開始接觸 linux,了解了一些 shell 和 ssh 相關的粗淺知識,昨天下午突然又對 x 的體系結構和發展歷史產生了疑惑,因此 google 到深夜。以下為簡要的記錄,以作備忘。因為不是這個領域內的專家,而且有的資訊並沒有做嚴格的考證和驗證,所以不能保證所有資訊均正確無誤,歡迎指正和補充。
在 *nix 下,尤其是 linux 下,桌面環境是個籠統的稱呼,通常包括了乙個使用了某個圖形開發庫的視窗管理器,以及若干可供使用的常用軟體(例如終端模擬程式、文字編輯器、檔案管理器、控制中心、瀏覽器甚至開發工具等等)。
長期以來,*nix 系統的圖形化介面基礎是 x 視窗系統(x window system),這個系統主要由 x 伺服器(x server),x 客戶端(x client)和 x 協議(x protocol)組成。x 伺服器負責在繪圖裝置(通常是螢幕)上繪圖、與輸入裝置(通常是滑鼠和鍵盤)互動以及處理視窗的建立銷毀等。通常用到的 x 協議是 x11r6,意為 x protocol version 11 release 6(寫本文時最新的 release 是 x11r7.6)。x 視窗系統裡,視窗是個相對抽象的概念,其包含的資訊只是視窗的相關屬性,並不涉及到具體的視覺呈現方面等的細節。這後一部分的工作,由專門的元件負責,稱作視窗管理器(window manager)。
根據以上的基本資訊,我們來了解一下最常用的兩個桌面環境,kde 和 gnome。kde 的全稱是 k desktop environment,gnome 的全稱是 gnu network object model environment。kde 使用到了稱作 qt 的圖形開發庫(目前為 nokia 所有),它帶的視窗管理器叫做 kwin,檔案管理器實用工具是 dolphin;gnome 使用的圖形開發庫則是 gtk+,其自帶視窗管理器的名字是 metacity,檔案管理器是 nautilus。
除了上述的兩個桌面環境,還有兩個桌面環境也比較常用,分別是 xfce 和 lxde。相比較而言,它們要輕量級一些,因為它們在開發之時,選擇了乙個比較高的出發點,即使用和 gnome 相同的底層圖形開發庫 gtk+(其實 xfce 是後來才從 xforms 轉過來的),在此基礎上,提供了不同的視窗管理器以及少量應用。gtk+ 圖形庫(以及 qt)的底層,是 x11 的開發庫 xlib,直接使用 xlib 提供的 api 進行開發是一件繁冗的事情。
由於整個 x 體系架構的靈活性很強,因此除了像 kde、gnome、xfce、lxde 這樣的圖形化操作全面解決方案(即桌面環境)之外,還存在著大量單獨的視窗管理器可供使用。比較常見的如 icewm 和 fvwm 等等,還有現在風頭很勁的 enlightenment。後者基於的圖形庫也很有意思,並沒有選擇 gtk+ 或者 qt,而是乙個叫做 elementary 的庫。以 enlightenment 為視窗管理器的 e17 桌面環境也正在成長。 與之情形類似的還有 openbox 這個視窗管理器。這些視窗管理器往往可以代替 kde 或者 gnome 自己的視窗管理器進行工作。我們還經常看到,有的 linux 發行版的桌面有很多的顯示特效,這個是由乙個叫做 compiz 的視窗管理器(它的更精準的分類是組合型視窗管理器,compositing window manager,參見 做到的。它的獨特之處在於,底層依賴於乙個不同於傳統的 x 環境:xgl,更底層的繪圖等操作則使用了稱為 glitz 的 opengl。
x 體系裡還有個東西叫顯示管理器(x display manager,如 xdm、gdm、wdm),可以對本地的或遠端的多個 x server 進行管理。linux 系統如果以級別 5 啟動,進入的使用者登入介面就是顯示管理器,使用者輸入使用者名稱和密碼後,它就會啟動本地的 x server,初始化乙個 x 會話(x session),一般還會通過 x 會話啟動本地的視窗管理器和桌面環境。如果在配置檔案裡設定 xdmcp 為 true,顯示管理器就可以通過 xdmcp 協議管理遠端的 x server。當在 windows 機器上使用 x manager 登入 linux/unix 機器時,其實是用 xdmcp 協議登入的,使用者同樣輸入使用者名稱/密碼登陸,xdm 啟動乙個 x 會話,不過這次的 x server 是在遠端(相對於 x client 而言,也即 windows 上)的機器上。x 顯示管理器也有了新的發展,之前通常就是 xdm 或者基於 xdm 的變種,現在,乙個叫做 lightdm 的跨桌面顯示管理器正在試圖成為 x 伺服器的標準顯示管理器。
出於各種目的,有的人希望所使用的 linux 的外觀和 windows 或者 mac os x 保持一致。這樣做的初始目的可能是為了好玩,做到最後則往往是因為追求盡善盡美的信念。如果你希望桌面看起來像是 windows,有乙個叫做 win2-7 pack 的軟體可以做到(應用於 gnome),如果是想類似於 mac os x,則 macbuntu 可以應用 ubuntu 上。
很有意思的是,最近 *nix 上的變革有爆發的趨勢,可能是科技發展到一定程度時的必然現象吧。連 x 視窗系統的權威地位,目前也受到了後來者的挑戰和威脅。wayland(就是這樣的乙個後來者。
UNIX Linux 訊號相關知識
一 基本的概念 1 中斷 中斷概念 中止 暫停當前正在執行的程序,轉而去執行其它的任務。硬中斷 來自硬體裝置的中斷 軟中斷 來自其它程式的中斷 2 訊號 訊號是一種軟中斷,可以把他看作是程序與程序 核心與程序通訊的一種方式,它為程序的非同步執行,提供了技術支援。3 常見的訊號 sigint 2 終端...
Unix Linux環境程式設計學習總結
這段時間學習了unix環境高階程式設計,在這裡呢,先給大家推薦一本書 unix環境高階程式設計 這本書在這個領域可是聖經級別的。先說一下這段時間的學習感受,起初學習了幾天之後,休息了一段時間,於是自己照著那本聖經開始看了起來,有很多難懂的地方,看著看著,難免心態有點崩潰,但是還是咬著牙看了下去,雖然...
UNIX Linux程式設計相關工具和資源
linux程式設計所用的一些工具 gcc 中文手冊 gnu make 指南 autoconf 2.57手冊 英文 autoconf 2.13手冊 使用 automake 使用cvs進行版本管理 cvs用後感 linux下常用除錯工具 非常好的gdb教程,強烈推薦 gdb英文文件 gdb基本用法 gd...