Linux桌面概述
概述
跟Linux的其他部分(如存儲(chǔ)和網(wǎng)絡(luò))不同,桌面結(jié)構(gòu)沒(méi)有太多層級(jí)。桌面的每個(gè)組件都只對(duì)應(yīng)特定的任務(wù),只在必要時(shí)才與其他組件溝通。有些組件會(huì)共享通用的庫(kù)(特別是圖形工具庫(kù))
Linux開(kāi)發(fā)者往往有不同喜好,這使得開(kāi)發(fā)出來(lái)的產(chǎn)品有很多花樣。為了能協(xié)同工作,各種應(yīng)用就需要有一些共性,而在幾乎所有的Linux桌面組件中,這種共性就是X服務(wù)器(即X Window系統(tǒng)服務(wù)器)。你可以把它想象為桌面的“內(nèi)核”,管理著窗口功能和顯示配置,并處理來(lái)自鍵盤和鼠標(biāo)等設(shè)備的輸入。
X Window系統(tǒng)
一、網(wǎng)址
http://www.x.org/
二、功能
因?yàn)镚NOME和KDE等桌面環(huán)境的出現(xiàn),X發(fā)行版的角色也一直在變換?,F(xiàn)在它的關(guān)注點(diǎn)主要在核心服務(wù)器(即管理渲染和輸入設(shè)備的部分)和簡(jiǎn)化的客戶端庫(kù)。
三、介紹
X服務(wù)器的運(yùn)行不難識(shí)別。它就叫X

四、顯示管理器
一般你是不會(huì)從命令行啟動(dòng)X服務(wù)器的,因?yàn)檫@么做不會(huì)啟動(dòng)任何客戶端來(lái)連接到這個(gè)服務(wù)器,結(jié)果只會(huì)得到一個(gè)空白的屏幕。
通常的做法是用顯示管理器來(lái)啟動(dòng)X服務(wù)器,它會(huì)在屏幕上放置一個(gè)登錄框。當(dāng)你登錄之后,顯示管理器就會(huì)啟動(dòng)一系列的客戶端諸如窗口管理器和文件管理器,以便你使用機(jī)器。
顯示管理器有很多種,例如gdm(用于GNOME)和kdm(用于KDE)。

想從虛擬控制臺(tái)而非顯示管理器開(kāi)啟X會(huì)話,你可以運(yùn)行startx或xinit命令。然而,這樣獲取的會(huì)話相當(dāng)簡(jiǎn)單,與顯示管理器的會(huì)話完全不同,因?yàn)樗鼈兊臋C(jī)制以及啟動(dòng)文件都不同。
五、探索X客戶端
雖然一般人不會(huì)從命令行的角度來(lái)思考GUI的運(yùn)作,但還是有一些工具這么做。借助它們,你可以監(jiān)控客戶端的運(yùn)行。


X事件
X客戶端通過(guò)事件系統(tǒng)獲取輸入和服務(wù)器狀態(tài)等信息。X事件的工作方式類似于其他異步進(jìn)程間通信(如udev事件和D-Bus事件)



D-Bus
一、簡(jiǎn)介
D-Bus(即桌面總線)是Linux桌面系統(tǒng)的最重要的產(chǎn)物之一,它是一個(gè)消息傳遞系統(tǒng)。D-Bus之所以重要,是因?yàn)樗鳛橐环N進(jìn)程間通信的機(jī)制,使得各種桌面應(yīng)用能夠相互溝通。同時(shí),大多數(shù)的Linux系統(tǒng)都是用它來(lái)把系統(tǒng)事件(例如插入U(xiǎn)SB設(shè)備)通知給進(jìn)程的。
二、功能
D-Bus在Linux中正變得越來(lái)越重要,而且它的用途不只在桌面。systemd和Upstart也使用它來(lái)通信。然而,在核心系統(tǒng)中加入對(duì)桌面工具的依賴,這有違Linux的設(shè)計(jì)宗旨。
為了解決這個(gè)問(wèn)題,我們將dbus-daemon實(shí)例(進(jìn)程)分為兩種。一種叫系統(tǒng)實(shí)例,它在開(kāi)機(jī)時(shí)由init啟動(dòng),并帶上--system選項(xiàng)。這種實(shí)例通常作為D-Bus用戶來(lái)運(yùn)行,它的配置文件是/etc/dbus-1/system.conf(一般你不應(yīng)該修改這個(gè)文件)。進(jìn)程可以通過(guò)/var/run/dbus/system_bus_socket的Unix域套接字連接到該實(shí)例。另一種叫會(huì)話實(shí)例。與系統(tǒng)實(shí)例不同的是,會(huì)話實(shí)例只在你打開(kāi)桌面會(huì)話時(shí)才會(huì)運(yùn)行。你運(yùn)行的桌面應(yīng)用會(huì)連接這種實(shí)例。
三、監(jiān)視D-Bus消息

打印
一、步驟
1.打印程序通常會(huì)先將文檔轉(zhuǎn)成PostScript格式。不過(guò)也可以不這么做。
2.程序?qū)⑽臋n發(fā)給打印服務(wù)器。
3.打印服務(wù)器收到文檔后,將其放到打印隊(duì)列中。
4.當(dāng)輪到該文件時(shí),打印服務(wù)器會(huì)將其發(fā)送到打印過(guò)濾器。
5.如果發(fā)現(xiàn)該文檔不是PostScript格式,打印過(guò)濾器可以對(duì)其進(jìn)行轉(zhuǎn)換。
6.如果目標(biāo)打印機(jī)不能識(shí)別PostScript,打印機(jī)驅(qū)動(dòng)會(huì)將該文檔轉(zhuǎn)換成打印機(jī)能識(shí)別的格式。
7.打印機(jī)驅(qū)動(dòng)可在文檔上加一些額外的指令,例如紙匣和復(fù)件數(shù)。
8.最后打印服務(wù)器將文檔發(fā)給打印機(jī)。
這里面最讓人困擾的,就是要在PostScript上繞來(lái)繞去。其實(shí),PostScript是一種編程語(yǔ)言,所以如果你用它來(lái)打印文件,那么你實(shí)際上就是將一段程序發(fā)給了打印機(jī)。PostScript是類Unix系統(tǒng)中的打印標(biāo)準(zhǔn),就像.tar是打包標(biāo)準(zhǔn)一樣。(現(xiàn)在有些應(yīng)用用到的PDF格式,也是能轉(zhuǎn)成PostScript的。)
二、CPUS
1.介紹
http://www.cups.org/
CUPS是Linux和Mac OS X的標(biāo)準(zhǔn)打印系統(tǒng)。它的服務(wù)器守護(hù)進(jìn)程是cupsd,你可以用lpr命令作為客戶端來(lái)發(fā)送文件給這個(gè)守護(hù)進(jìn)程。
CUPS有個(gè)突出的功能是實(shí)現(xiàn)了互聯(lián)網(wǎng)打印協(xié)議(Internet Print Protocol,以下簡(jiǎn)稱IPP),使得它允許客戶端與服務(wù)器端通過(guò)TCP端口631進(jìn)行類HTTP的事務(wù)處理。事實(shí)上,如果你系統(tǒng)上運(yùn)行著CUPS,你就可以連接http://localhost:631/去看看你的打印配置和打印任務(wù)。大多數(shù)的網(wǎng)絡(luò)打印機(jī)和打印服務(wù)器都支持IPP,就連Windows也是。IPP簡(jiǎn)化了建立遠(yuǎn)程打印機(jī)的任務(wù)。

三、格式轉(zhuǎn)換與打印過(guò)濾器
很多打印機(jī),包括幾乎所有低端型號(hào)的,都無(wú)法識(shí)別PostScript或PDF。為使Linux支持這些打印機(jī),我們必須將文檔轉(zhuǎn)換成它們能識(shí)別的格式。CUPS把文檔送給RIP(即光柵圖像處理器)以生成位圖。而RIP幾乎總是使用Ghostscript(gs)程序來(lái)實(shí)現(xiàn)這個(gè)過(guò)程。但是,要讓生成的位圖能適應(yīng)打印機(jī)的格式,還是有點(diǎn)麻煩的。所以,CUPS使用的打印機(jī)驅(qū)動(dòng)會(huì)參考特定打印機(jī)的PostScript打印機(jī)定義(PostScript PrinterDefinition,以下簡(jiǎn)稱PPD)文件,以解決分辨率和紙張大小之類的問(wèn)題。
如果有建議和看法,可以在文末留言,謝謝。
