親手打造自己的Linux桌面環境
譯文【51CTO.com快譯】試問:Linux的最大好處是什么?安全性、穩定性、高性能,還是它帶來的自由?它在所有這些方面都表現不賴,但是我們想著重強調的另一個特點是其模塊性。作為一款深受Unix影響的操作系統,GNU/Linux被設計成容易拆開來,又容易裝回去,如果一切順利的話。系統的各個主要組件都是用小組件起來的,這些小組件可以忽略或更換,這就是為什么我們會有如此多不同的Linux發行版的原因之一。
當然,這種模塊性有時增添了復雜性。不過它也增添了可靠性,因為各組件被設計成可以獨自運行;如果某個組件崩潰或遇到了某種軟件錯誤,其余組件在理想情況下會繼續正常運行。所以,你可以用另一個外殼來代替Bash,或者改用一個替代的SSL庫,或者甚至更換整個init系統――我們從主要的發行版遷移到Systemd見到了這一幕。
但是桌面環境方面又如何呢?KDE、Gnome和Xfce不都是大型的整體式項目嗎?實則不然。它們是用彼此高度依賴的較小的程序和庫組建起來的,但是可以去掉某些組件,或者把它們換成其他組件。如果更進一步,還可以完全從頭開始構建一個桌面環境,你只要精心挑選幾個特定的程序,把它們連接起來,然后確保它們可以同時運行。
從頭開始構建一個桌面環境其實相當好玩,也是一次很好的學習過程,所以我們在下面就介紹這方面。你可以選擇適合自身工作流程的組件,最終結果就是,比像Gnome和KDE這些“重量級”桌面環境輕盈得多、快速得多。另外,你在參加下一次Linux用戶組會議時可以向朋友吹噓,你才不用哪個普通的預包裝桌面環境,而是構建了自己的定制桌面,顯擺一下你在Linux這條路上比別人走得更遠。
下面是我們將要使用Openbox、PCManFM和Docky創建的定制桌面,但是可以把所有組件完成其他的東西!
一、桌面環境是什么?
啟動你的常規桌面,看一下:上面可能有面板、通知區、窗口標題欄以及其他界面元素。這些都是桌面環境所提供的,但是如果我們更深入地探究一下,還會找到其他功能。桌面環境還處理實現應用程序之間切換和關閉應用程序等操作的鍵盤快捷方式,另外還處理桌面墻紙、小應用程序(比如處理器監視工具)和花哨的窗口效果。
現在,這些特性并不是由單單一個程序提供的,而是由一批程序提供的。比如在Xfce中,在終端中運行ps ax | grep xfce會顯示名稱中有xfce的所有進程,這樣的進程有好多個。大多數名稱顯而易見,所以你可能明白,xfce4-panel提供了位于屏幕邊緣的面板,而xfce4-power-manager監視你的電池電量,處理電源事件(比如合上蓋子)。
Gnome和KDE的工作方式幾乎如出一轍。你忍不住想使用來自每個桌面的一個個組件,然后組合起來,以此構建某種極其出色的混合桌面,但是最終結果實際上不是那么理想。如上所述,每個桌面環境下的程序旨在協同工作,具體來說是在那些桌面環境下工作,所以如果你使用來自KDE的面板、來自Xfce的電源管理器,以及來自Gnome的窗口管理器,最后得到的將是一種大雜燴式的桌面,耗用大量內存。畢竟,你要裝載來自每個桌面環境的庫及其他進程,所以這就好比同時在運行這三個桌面環境。
我們可不想這樣。我們要做的是,選擇小巧的、占用內存少的獨立式組件,它們不依賴其他東西,但是可以順利地協同運行。如往常一樣,在自由軟件領域有一大堆組件可供選擇,所以不妨看一下主要的組件。
二、選擇窗口管理器
盡管我們要使用單個的獨立式程序來打造定制的桌面環境,但是X Windows System(桌面的基本圖形層)里面還是有一些標準,可以確保它們能夠順利地協同運行。首先,不妨看一看窗口管理器方面的幾個選擇。
1.名稱:Openbox
網址:http://www.openbox.org
Openbox被設計成小巧、快速,大概是最出色的全面的獨立式窗口管理器。完全可以單獨使用它,但通常與其他工具結合使用。拿LXDE來說:這是一種使用Openbox來管理窗口的輕量級桌面環境,也是流行的ubuntu發行版的桌面。Openbox還是現已銷聲匿跡的CrunchBang發行版(憑借CrunchBang++迎來了新生)和ArchBabg的默認窗口管理器。
甚至可以在Gnome或KDE里面使用Openbox,更換其原生窗口管理器。Openbox出現在幾乎各大發行版的軟件庫中,可以用“crunchbang”命令,從腳本來啟動(后文會有介紹)。
2.名稱:i3
網址:http://i3wm.org
Openbox是一種傳統的鼠標操作的窗口管理器,相比之下,i3完全離不開鍵盤快捷方式。這讓用戶一開始有點難以掌握,因為你得花點時間閱讀說明文檔,才能適應它。不過一旦你記住了鍵盤快捷方式,就會愛不釋手。i3在想要經常使用鍵盤、而不是操作鼠標的編程人員當中特別受歡迎。
另外,i3是一種平鋪式窗口管理器。不像傳統的窗口管理器:窗口散布于屏幕四周,一些窗口覆蓋在另一些窗口上,在i3中,你可以將窗口組織整理成屏幕上不同大小的圖塊(區域)。所以在寬屏顯示器上,你可以讓火狐占用屏幕左邊50%的區域,兩個終端窗口占用右邊的上下兩部分。如果你有一塊大屏幕,會發覺平鋪式方法的效果確實很好。
3.名稱:Awesome
網址:http://awesome.naquadah.org
Awesome是另一種設計時就想到鍵盤使用的輕量級窗口管理器。它還旨在與各種X標準兼容,可通過Lua腳本語言來進行擴展。其開發人員稱之為“框架窗口管理器”――換句話說,你可以在此基礎上,使用Lua定制及其他附件,定制一個功能更強大的窗口管理器。
4.名稱:JWM
網址:http://www.joewing.net/projects/jwm/
JWM是用普通C編寫而成的,使用基本的X庫,所以它的依賴項非常少,很容易編譯。它旨在最大限度地利用內存有限的舊計算機,但是如果你就想挑戰一下自己,它是個不錯的選擇。JWM含有自己的簡單面板,但是你可能想要更易配置、外觀更漂亮的面板,稍后我們會探討。
好了,以上就是市面上幾個最出色的窗口管理器。不過還有更多的窗口管理器值得探究,如往常一樣,Arch Linux維基(https://wiki.archlinux.org/index.php/Window_manager)是個很好的資源,值得一讀。
三、面板、文件管理器和額外組件
一旦你選擇好了窗口管理器,就需要為它添加一些額外組件來美化,比如漂亮的面板(用于啟動和管理程序),以及文件管理器。如果你是個經驗豐富的Linux用戶,可能很高興在終端上處理所有的文件工作,但是我們還是會介紹幾個選擇。
1.名稱:Cairo-Dock
網址:http://glx-dock.org
Cairo-Dock提供的面板在外觀上酷似Mac OS X的停靠欄――至少,在10.10(Yosemite)采用扁平化設計之前是這樣。它的“3D平面”模式看起來很眩,光滑的圖標駐留在玻璃托盤上;你將鼠標移到圖標上后,它們的大小會稍稍變大。右擊圖標,就可以定制圖標,或者選擇一直存在的Cairo-Dock子菜單,該子菜單讓你可以配置整個面板。默認情況下,Cairo-Dock顯示了最流行的FOSS程序(假設你已安裝)的對應圖標,比如火狐和Thunderbird等程序。
如果你要在虛擬機中測試定制桌面,請注意:首次啟動后,Cairo-Dock會詢問你是否想使用OpenGL。這在物理硬件上很有用,讓??繖诘男Ч@得更流暢,但是在VirtualBox里面,它會帶來問題,所以最好還是讓它處于被禁用的狀態。
Cairo-Dock隨帶豐富的漂亮效果,非常酷似Mac OS X。
#p#
2.名稱:Docky
網址:http://wiki.go-docky.com
Docky非常類似Cairo-Dock,不過它使用Mono,因此增添了一點額外開銷。但是它也非常完善和漂亮,能夠獲得上述類似OS X的3D外觀。Docky出現在各大發行版中;安裝完畢后,只要在命令提示符下輸入“docky”,就可以啟動它。其默認配置相當簡單;你只會看到用來配置docky的錨圖標,以及用來運行程序的圖標。不過,可以將這些圖標變成啟動器,只需右擊圖標,選擇將它們固定到??繖谏稀H缓?,即便程序沒有運行,它們也依然在那里。
有了Docky,還可以添加額外組件,比如天氣小應用程序和電池監視工具――點擊錨圖標,即可調出配置方框,然后選擇Docklets標簽即可顯示列表。選擇一個你喜歡的,然后點擊加號(+)按鈕,就可以將它添加到停靠欄的右邊。
3.名稱:PCManFM
網址:http://wiki.lxde.org/en/PCManFM
文件管理器在Linux界多得可以抓一把挑挑;大多數提供了很少的功能。PCManFM用于LXDE桌面中,它是名氣最大的文件管理器之一:它比Gnome和KDE中所用的“重量級”文件管理器來得輕便,但是功能仍相當強,能夠處理你需要的99%的任務。它在設計方面也不想試圖過于標新立異,而是選擇了一種熟悉的布局,誰都可以迅速上手。另外,它幾乎無所不在,出現在各大發行版中。
4.名稱:XFE
網址:http://roland65.free.fr/xfe/
這與Xfce沒有半毛關系;它其實是一種非常輕巧的文件管理器,使用FOX圖形化工具包。開發人員稱之為“所有喜歡輕巧快速的Unix愛好者首選的文件管理器”;雖然與同樣占用很少資源的其他程序相比,XFE并不提供許多功能特性,可是它有一個好處:仍在開發之中。因而,它不難編譯,也不難在主流的Linux發行版中找到。
XFE是一款結實又小巧的文件管理器,外觀并不特別出彩,但是很實用。
四、額外組件:合成器和背景......
可以使用主題,給我們剛才提到的一些窗口管理器(比如Openbox)增添一點吸引力;但是如果你確實很想要大量的視覺效果,有必要添加一個合成管理器。這樣一來,窗口出現時,就能夠獲得陰影和微妙動畫之類的效果。最出色的一個合成管理器就是Compton(https://github.com/chjj/compton)。它還非常易于使用:只要啟動你的窗口管理器,然后啟動Compton,即可開始使用特效。
要考慮的另一個方面就是桌面墻紙。大多數輕量級窗口管理器并不直接提供添加桌面墻紙的方法,所以你需要找到另一個墻紙工具。這方面一個特別有用的工具就是Feh(http://feh.finalrewind.org),這個命令行驅動的圖像查看器還能設置“根窗口”(root window)圖像。沒錯,這是“根”在Unix用語中的另一種用途,另外還有超級管理員用戶和文件系統頂層。用X術語來說,根窗口實際上就是背景,所以如果你為其應用一個圖像,就可以設置桌面墻紙。
五、把一切組件連接起來
好了,不妨開始做有意思的部分!我們現在要把這一堆組件變成一個完全實用的桌面環境。在這里,我們將使用Openbox作為窗口管理器、Docky作為面板、PCManFM作為文件管理器,然后添加Compton和Feh,讓桌面環境看起來可愛、漂亮。
由于這些都是獨立的程序,我們需要創建一個腳本,讓它們都按正確的順序來運行。以根用戶身份,在/usr/local/bin/mydesk下創建一個文件,比如:
- sudo nano -w /usr/local/bin/mydesk
輸入下列內容,使用Ctrl+O組合鍵保存,然后按Ctrl+X組合鍵,退出Nano編輯工具。
- #!/bin/sh
- docky &
- pcmanfm &
- feh --bg-fill /home/user/desktop.jpg
- compton -c --shadow-exclude 'n:e:Docky' &
- openbox
你還需要讓這個文件成為可執行文件,為此使用sudo chmod +x /usr/local/bin/mydesk。該腳本啟動一堆程序,先從Docky和PCManFM開始。這些程序后面的“&”符號表明,我們想要在后臺運行這些程序,而不是讓腳本等待每個程序關閉。就Feh而言,應該更改桌面圖像的位置,以便與主目錄下的圖片相匹配;請注意,Compton這一行排除了在Docky窗口上繪制陰影(因為Docky窗口已經有自己的特效)。
現在,在平常的Linux桌面會話中,我們根本無法運行這個腳本,指望一切都可以正常,因為我們已經在運行窗口管理器、面板及其他組件。相反,我們需要告訴登錄管理器(輸入用戶名和密碼的那個屏幕):我們的腳本啟動其自己的桌面環境,我們稱之為MyDesk。以根用戶身份,創建含有下列內容的文本文件/usr/share/xsessions/mydesk.desktop。
- [Desktop Entry]
- Name=MyDesk
- Comment=Custom desktop
- Exec=/usr/local/bin/mydesk
- TryExec=/usr/local/bin/mydesk
- Type=XSession
一旦你為會話創建好了啟動腳本和.desktop文件,它就會出現在登錄管理器中。
六、是時候測試一下了
現在退出當前桌面,在登錄屏幕,選擇MyDesk作為你的會話。輸入你的用戶名和密碼,哇!你的定制桌面環境就會出現!看一下示例屏幕截圖:在這里,我們點擊了左下方的錨圖標,選擇了選項中的“面板模式”(讓它占用屏幕的整個寬度),然后應用了Matte主題。我們還在右邊添加了一個工作空間切換器Docklet。
請注意:Docky并不包括一個傳統的“開始”程序菜單;相反,可以在桌面上右擊鼠標,選擇“終端”,打開命令行窗口。輸入你想添加到面板中的某個程序(比如“firefox”或“libreoffice”),該程序啟動后,相應圖標就會出現在面板上。右擊圖標,選擇“固定”,那樣即使該程序沒有運行,啟動器也依然在那里。想要退出定制桌面,只要在桌面上任何地方右擊鼠標,選擇“退出”。(想對Openbox窗口管理器實行精細控制,有必要安裝Obconf,然后從右擊桌面菜單中選擇它。)
而這僅僅是個開始!這只是你能創建的桌面的一個例子。你可以試著在/usr/local/bin/mydesk腳本中運行cairo-dock &,而不是docky &,嘗試另一種??繖?,或者更換窗口管理器。這點很重要:窗口管理器是腳本中的最后一行,并不以“&”符號結束,那樣你退出窗口管理器時,它同時退出了整個會話,讓你回到登錄屏幕。
好好試一試窗口管理器、面板、文件管理器及其他工具的不同組合;如果你打造了特別出色的桌面環境,歡迎留言交流。說不定哪一天某個Ubuntu分支就基于你定制的桌面,天曉得。
原文標題:CREATE YOUR OWN DESKTOP ENVIRONMENT,作者:Mike Saunders
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】