FreeBSD連載(50):定制X Window的基本方法
與其他圖形界面相比,X Window是高度可配置的,這是因?yàn)閄 Window本身只是定義了一系列最基本的顯示功能調(diào)用,而并沒(méi)有規(guī)定圖形窗口應(yīng)該是什么樣子的,因此大批程序員為X Window開(kāi)發(fā)了各種不同風(fēng)格的開(kāi)發(fā)工具包和窗口管理程序,使得X Window的風(fēng)格多種多樣。因此X Window的使用者有多種選擇,可以根據(jù)自己的喜好來(lái)定制工作站的圖形界面。
顏色深度、分辨率與字體配置:
在前面的設(shè)置過(guò)程中可以設(shè)置X服務(wù)器使用多種色彩深度,如8bpp、16bpp、24bpp和32bpp,一般來(lái)講色彩深度越大,所能表現(xiàn)的色彩越豐富,而24bpp就被稱為真彩色,能真實(shí)的表現(xiàn)圖象的色彩(32bpp實(shí)際也只是24bpp,它是為了讓每個(gè)象素都占據(jù)獨(dú)立的32位雙字,以對(duì)齊象素邊界,加速處理速度)。缺省的色彩深度為對(duì)應(yīng)于256色的8bpp,顯然這不足于表現(xiàn)圖象的色彩,在硬件能力滿足的條件下應(yīng)該使用更高的色彩深度(要受顯存大小和分辨率大小的限制)。例如要設(shè)置X服務(wù)器工作在16bpp的準(zhǔn)真彩色下,可以使用帶參數(shù)的startx或xinit。
$ startx -- -bpp 16
其中前面的兩個(gè)--線表示將后面的參數(shù)不加改變的傳遞給X服務(wù)器。另一種設(shè)置缺省色彩深度的方法是在X的設(shè)置文件XF86Config中設(shè)置DefaultColorDepth選項(xiàng)。
由于X Window中的色彩深度是可以改變的,為了幫助客戶程序使用具體的色彩,X客戶程序中使用的色彩將通過(guò)X服務(wù)器映射為真實(shí)的色彩。X中還定義了多種標(biāo)準(zhǔn)色的名字,在X程序或資源定義文件中直接使用色彩名字,如Red、Blue,就得到常用的顏色。
X服務(wù)器也可以同時(shí)支持多種分辨率,并能夠在運(yùn)行時(shí)刻動(dòng)態(tài)切換它所支持的分辨率。在前面XF86Setup設(shè)置程序中的顯示器設(shè)置選項(xiàng)中,有部分顯示器能同時(shí)設(shè)置了幾個(gè)顯示模式,然而這些分辨率并不是該顯示器能支持的分辨率的全部,如果是使用xf86config或者手工更改設(shè)置文件,還能設(shè)置更多的分辨率。當(dāng)設(shè)置了多個(gè)分辨率模式的時(shí)候,就能在XWindow下使用熱鍵、和向后切換模式,使用、和向前切換分辨率模式,其中和是小鍵盤(pán)上的鍵,主鍵盤(pán)上的并不能用來(lái)切換分辨率。
雖然存在不同的分辨率模式,但是X服務(wù)器顯示的虛屏大小仍然相同,虛擬顯示屏大于實(shí)際顯示屏,但可以通過(guò)鼠標(biāo)的移動(dòng),在實(shí)際顯示屏上顯示虛擬顯示屏的不同部分。因此在有多個(gè)分辨率的時(shí)候,虛擬顯示屏至少應(yīng)該等同于最大分辨率的大小,這樣不論切換到哪個(gè)分辨率,應(yīng)用程序的窗口仍然保持原有的樣子,只是窗口有可能位于真實(shí)的顯示屏外,需要通過(guò)移動(dòng)鼠標(biāo)來(lái)移動(dòng)虛擬顯示屏,看到應(yīng)用程序窗口的全貌。由于移動(dòng)虛擬顯示屏是通過(guò)直接控制顯示卡上的寄存器來(lái)進(jìn)行的,不需要在顯存或內(nèi)存中進(jìn)行額外的移動(dòng)或復(fù)制操作,因此幾乎不消耗資源,也不影響任何顯示速度。
雖然XFree86缺省已經(jīng)支持了相當(dāng)豐富的字體,但是還是有可能需要安裝新的字體,例如某種中文字體。X Window的字體應(yīng)該在配置文件中設(shè)置其搜尋路徑,但在啟動(dòng)X Window之后,也可以使用xset命令來(lái)重新設(shè)置字體的搜尋路徑。
xset fp+ :增加一個(gè)字體搜尋目錄。
xset fp- :刪除一個(gè)字體搜尋目錄。
xset fp= :重新設(shè)置字體搜尋目錄。
xset fp rehash:更改某個(gè)字體目錄中的內(nèi)容后,強(qiáng)迫系統(tǒng)刷新字體搜尋路徑。
要想使用一些使用者自己設(shè)置的字體,就要按下面的步驟將這些字體加入到X Window的搜尋路徑。
將這些字體單獨(dú)放在一個(gè)目錄下,或者放到系統(tǒng)原有的字體目錄下。
運(yùn)行 “mkfontdir 該字體目錄” ,構(gòu)建這個(gè)字體目錄(將按照所有的字體,重新生成fonts.dir文件)。
使用 “xset fp+ 該字體目錄” 或 “xset fp rehash” ,使設(shè)置生效。
fonts.dir文件中包含該字體目錄下所有字體的名字,以下為一個(gè)例子的部分內(nèi)容,該文件每一行都給出一個(gè)字體的名字。
gb16st.pcf.gz -isas-song ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0gb24st.pcf.gz -isas-song ti-medium-r-normal--24-240-72-72-c-240-gb2312.1980-010x20.pcf.gz -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-1gb16fs.pcf.gz -isas-fangsong ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0可以看出font.dir中的內(nèi)容分為兩部分,第一部分為字體文件的名字,第二部分為字體的名字。每個(gè)字體的名字用 “-” 將不同的部分分隔開(kāi)了,這些相互分隔的部分包括字體的開(kāi)發(fā)者、字體的類(lèi)別、字體本身的尺寸(磅數(shù))、傾斜度和點(diǎn)的大小,字符間距的類(lèi)型、字體所為的字符集,以及字符的風(fēng)格。
可以看出,每個(gè)字體的名字相當(dāng)復(fù)雜,然而可以通過(guò)定義別名的方式來(lái)簡(jiǎn)化具體字體的名字,在一個(gè)字體目錄下,都有一個(gè)對(duì)應(yīng)的fonts.alias的文件,這里就登記了很多字體的別名,使用者也可以自己根據(jù)需要增添。
fixed-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1variable -*-helvetica-bold-r-normal-*-*-120-*-*-*-*-iso8859-15x7-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso8859-15x8-misc-fixed-medium-r-normal--8-80-75-75-c-50-iso646.1991-irv上面就是某個(gè)font.alias的一部分,它的第一列就為簡(jiǎn)單易記的別名。在運(yùn)行X Window時(shí),可以使用xlsfonts來(lái)查看系統(tǒng)中可以使用的字體信息,使用xfontsel來(lái)查看每種字體的外觀。
定制客戶桌面基本方法
根窗口的特征可以使用xsetroot命令來(lái)設(shè)置,可以使用它來(lái)定制窗口的顏色(背景色和前景色),或者使用一個(gè)位圖作為背景等。也可以使用”xset s seconds”來(lái)定義屏幕保護(hù)的激活時(shí)間,”xset s default”將屏幕保護(hù)設(shè)為系統(tǒng)的缺省配置。
還有很多更強(qiáng)大的X程序能用來(lái)定制X的根窗口,設(shè)置壁紙和屏幕保護(hù)。例如可以使用xv來(lái)將gif或jpg等類(lèi)型的圖片設(shè)置為壁紙,這些程序都可以在FreeBSD的Packages Collection和Ports Collection中找到。
X客戶程序通常使用標(biāo)準(zhǔn)的構(gòu)件,通常這些構(gòu)件都有一些標(biāo)準(zhǔn)的參數(shù)來(lái)定義它們使用的字體、文字的前景色、背景色、滾動(dòng)條等。這些參數(shù)可以通過(guò)更改構(gòu)件的資源設(shè)置,來(lái)改變其設(shè)置。一般使用用戶個(gè)人目錄下的.Xdefaults或.Xresoures作為用戶的個(gè)人資源文件,資源文件在啟動(dòng)時(shí)在.xinitrc文件中由xrdb命令載入系統(tǒng)。
除了資源設(shè)置之外,標(biāo)準(zhǔn)X客戶程序中的構(gòu)件也支持標(biāo)準(zhǔn)的命令行選項(xiàng),可以用來(lái)改變窗口構(gòu)件的屬性:
-borderwith或-bw,框架的寬度,以像素為單位
-foreground或-fg,前景色
-background或-bg,背景色
-display,客戶程序要使用的X服務(wù)器的顯示位置
-font或-fn,顯示特殊文字使用的字體
-geometry,窗口的幾何結(jié)構(gòu),包括位置和大小
-iconic,以圖標(biāo)方式啟動(dòng)
-title,標(biāo)題欄的標(biāo)題
選擇窗口管理器和桌面環(huán)境
在FreeBSD安裝好XFree86之后,缺省的窗口管理器是twm,這是一個(gè)比較簡(jiǎn)單的窗口管理器,會(huì)使得第一次接觸X Window的使用者對(duì)X Window產(chǎn)生不好的印象,但是如果進(jìn)一步了解X Window系統(tǒng),就會(huì)知道X Window本身并沒(méi)有包括真正好用的窗口管理器,但是卻存在很多種優(yōu)秀的窗口管理器能達(dá)到這個(gè)目的,使X Window變得更華麗、更易用。
因此必須從Packages Collection中選擇安裝相應(yīng)的窗口管理器或桌面環(huán)境,可供選擇的有fvwm95、AfterStep、KDE等。
fvwm95是從另一個(gè)窗口管理器fvwm2的進(jìn)行改進(jìn)之后的版本,它被設(shè)置為與Windows95的桌面非常相似,因此習(xí)慣于Windows95界面的個(gè)人計(jì)算機(jī)使用者常常會(huì)選擇這個(gè)窗口管理器,然而既然使用的是X Window,沒(méi)有必要一定還要使用Window95的顯示風(fēng)格,使用fvwm2、AfterStep等其他窗口管理器來(lái)嘗試其他風(fēng)格更為有益。一般情況下使用者還是會(huì)安裝一個(gè)fvwm95,fvwm95使用的配置文件是用戶主目錄下的.fvwm2rc95文件,而缺省配置文件為/usr/X11R6/lib/fvwm95/system.fvwm2rc95文件。使用fvwm95時(shí)最簡(jiǎn)單的啟動(dòng)文件.xinitrc應(yīng)包括:
/usr/X11R6/bin/fvwm95
AfterStep是模仿NextStep的窗口管理器,這個(gè)窗口管理器精巧而且漂亮,如果不是過(guò)于沉迷于Windows95的操作方式,不妨使用這個(gè)窗口管理器,它還有幾個(gè)派生的管理器,如WindowMaker、enlightenment等。為了充分發(fā)揮AfterStep的華麗,X的顯示屏應(yīng)該大于800x600的分辨率,并至少使用16bpp的色彩深度。AfterStep的所有配置文件均放置在用戶主目錄下的GNUStep目錄中,相應(yīng)的啟動(dòng)文件為:
/usr/X11R6/bin/AfterStep
與前面兩者不同,gnome和KDE不僅僅是一個(gè)窗口管理器,還包括大量的應(yīng)用程序和相關(guān)工具(gnome使用enlightenment作為其缺省窗口管理器)。這些桌面環(huán)境包括各種應(yīng)用程序、控制條、圖形化的設(shè)置程序等,使用它們能夠全面享受到圖形桌面環(huán)境的優(yōu)點(diǎn),但它們占用的系統(tǒng)資源也相對(duì)較多。如果是將安裝FreeBSD的計(jì)算機(jī)用做一臺(tái)工作站,那么就應(yīng)該選擇其中一種桌面環(huán)境,用戶可以根據(jù)自己的喜好來(lái)選擇安裝gnome或者KDE。
如果選擇安裝了KDE時(shí),在.xinitrc及.xsession中應(yīng)該包含的相應(yīng)啟動(dòng)命令為:
/usr/local/bin/startkde
在3.2=RELEASE之后,F(xiàn)reeBSD能通過(guò)Sysinstall來(lái)設(shè)置不同的桌面環(huán)境,Sysinstall能安裝相應(yīng)的軟件包,并在/usr/share/skel中添加dot.xinitrc和dot.xsession文件,這樣在生成用戶時(shí)就自動(dòng)生成.xinitrc和.xsession文件。
配置和使用KDE
KDE不單單是一個(gè)窗口管理程序,它包括了使用X Window圖形界面進(jìn)行操作所需要的各種應(yīng)用程序。它的主要部分為一個(gè)擁有任務(wù)條、工具條、快捷圖標(biāo)的桌面環(huán)境,并包括可用于瀏覽WWW網(wǎng)頁(yè)的文件管理器、編輯器、計(jì)算器、CD播放器、郵件處理程序、新聞組閱讀程序等等大量的應(yīng)用程序。
KDE的另一個(gè)特點(diǎn)就是包括了對(duì)圖形界面外觀的定制程序,一般情況下Unix中進(jìn)行配置需要修改對(duì)應(yīng)的配置文件,雖然這種方式提供了很大的靈活性,但對(duì)于很多不重要的設(shè)置,并不需要這么靈活的方式,而要求方便、簡(jiǎn)易。在KDE下不需要使用手工更改配置文件,而是通過(guò)圖形界面的設(shè)置程序進(jìn)行設(shè)置,因此更容易使用。下面為一個(gè)KDE界面的例子:
由于KDE是為了高性能的圖形界面開(kāi)發(fā)的,因此為了獲得較好的觀感,至少應(yīng)該以800x600分辨率運(yùn)行X Window,建議使用1024x768以上的分辨率,以充分發(fā)揮KDE的顯示效果。
KDE圖形桌面由桌面背景、快捷圖標(biāo)、工作欄和任務(wù)條組成,每個(gè)可以點(diǎn)擊的位置上通常使用左鍵一次點(diǎn)擊啟動(dòng)相應(yīng)的功能,使用右鍵點(diǎn)擊出現(xiàn)一個(gè)菜單,可以進(jìn)行相關(guān)設(shè)置。上圖為進(jìn)行工作欄和任務(wù)條的外觀設(shè)置,設(shè)置它們顯示的不同的大小和位置。此外,在桌面上使用右鍵可以配置桌面外觀,包括墻紙和屏幕保護(hù)。點(diǎn)擊左下角的K圖標(biāo)可以彈出一個(gè)菜單,菜單中包括了KDE環(huán)境提供個(gè)多種應(yīng)用程序,也可以添加對(duì)其他應(yīng)用程序的連接。
與MS Windows不同,KDE(以及大部分X窗口管理器),使用一次點(diǎn)擊啟動(dòng)應(yīng)用程序,而不是雙擊。KDE下切換窗口的熱鍵與Windows相同為Alt-Tab。
KDE界面低部工作欄上的各個(gè)按鈕都對(duì)應(yīng)一個(gè)相應(yīng)的應(yīng)用程序,而其中并列的四個(gè)按鈕,對(duì)應(yīng)四個(gè)不同虛擬屏幕,每個(gè)屏幕上的內(nèi)容各不相同,可以分別配置。KDE最多可支持八個(gè)虛擬屏幕,每個(gè)窗口只顯示在一個(gè)屏幕上,除非使用鼠標(biāo)將窗口左上角的圖釘標(biāo)志打開(kāi),這樣操作之后這個(gè)窗口總顯示在屏幕上,而不管如何切換虛擬屏幕。
KDE的配置工作全部可以通過(guò)KDE配置中心(KDE Control Center)來(lái)完成。點(diǎn)中左下角的 “K” 圖標(biāo),在菜單中選中KDE Control Center或使用工作欄上的快捷圖標(biāo),就可以啟動(dòng)它對(duì)KDE的外觀進(jìn)行配置。
KDE控制中心可以設(shè)置KDE桌面環(huán)境的排列方式,如工作欄、任務(wù)欄的大小和位置,窗口的風(fēng)格,使用的顏色,屏幕保護(hù)以及其他一些應(yīng)用程序的相關(guān)設(shè)置。這些設(shè)置也可以在KDE桌面環(huán)境中,使用鼠標(biāo)右鍵彈出的菜單中的選項(xiàng)來(lái)啟動(dòng)。
由于KDE是一種國(guó)際化的應(yīng)用程序,因此可以使用上面的設(shè)置程序?qū)DE使用的字符設(shè)置為中文。當(dāng)將KDE使用的語(yǔ)言設(shè)置為中文時(shí),那么所有KDE的菜單都使用中文,但是這需要中文X服務(wù)器或其他中文系統(tǒng)的中文顯示能力的支持,否則KDE雖然顯示的是中文字符,但是顯示的卻會(huì)是亂碼。
對(duì)于使用XDM登錄方式的系統(tǒng),需要使用xdm以提供系統(tǒng)登錄。雖然用戶登錄后可以從.xsessin中啟動(dòng)KDE,但仍然擺脫不了xdm過(guò)于簡(jiǎn)陋的登錄畫(huà)面。而KDE的另一個(gè)特點(diǎn)就是提供一個(gè)xdm的替代程序kdm,這使得系統(tǒng)管理員可以替換掉簡(jiǎn)單的xdm界面,使用kdm來(lái)提供更漂亮的XDM登錄界面,這使得X Window系統(tǒng)表現(xiàn)得更為華麗。
上圖就是一個(gè)kdm的外觀,它同樣也是在KDE控制中心中來(lái)進(jìn)行配置的,只是由于kdm屬于系統(tǒng)程序,因此只有root運(yùn)行的KDE控制中心才能選擇這一項(xiàng)配置功能。設(shè)置KDM,需要選擇KDE配置中心的第一個(gè)選項(xiàng)Desktop Manager。
這個(gè)選項(xiàng)中可以設(shè)置kdm的圖標(biāo)、出現(xiàn)在kdm的用戶列表中的用戶、或者不出現(xiàn)在kdm的用戶列表中的用于,以及在會(huì)話結(jié)束時(shí)用于關(guān)閉系統(tǒng)的指令等。
將工作站用作專用X終端
專用機(jī)房中常常使用X終端為公共使用者提供服務(wù),使用者可以通過(guò)這些終端以XDM方式登錄到機(jī)房中的Unix主機(jī)上去。X終端不允許使用者登錄到自己系統(tǒng)中,而只能使用本地X服務(wù)器的處理能力,登錄到其他主機(jī)上進(jìn)行使用。
由于個(gè)人計(jì)算機(jī)硬件更為便宜,并且由于硬件的發(fā)展其性能也并不落后,使用個(gè)人計(jì)算機(jī)作X終端也是一種在使用專用X終端之外很不錯(cuò)的選擇。可以使用FreeBSD作操作系統(tǒng),Xfree86支持X Window系統(tǒng),就能將FreeBSD系統(tǒng)用作專用X終端,這樣的優(yōu)勢(shì)是所有的軟件都可以免費(fèi)得到,就使得在實(shí)現(xiàn)幾乎同樣的性能的條件下,卻減少了大量的資金投入。
同樣也可以通過(guò)設(shè)置使得用戶不能登錄進(jìn)本地系統(tǒng),而是直接登錄到網(wǎng)絡(luò)上的其他Unix主機(jī)中去。這需要那臺(tái)提供登錄服務(wù)的Unix主機(jī)運(yùn)行xdm,這樣X(jué)終端就能通過(guò)xdmcp協(xié)議在網(wǎng)絡(luò)中通過(guò)廣播或者直接查詢的方式,查找到運(yùn)行xdm的主機(jī),并連接上來(lái)提供登錄登錄畫(huà)面,就如同在本地系統(tǒng)一樣。用作X終端的FreeBSD系統(tǒng)需要以使用特別的參數(shù)運(yùn)行X,以查找XDM主機(jī)。
如果運(yùn)行XDM的Unix主機(jī)和用作X終端的FreeBSD系統(tǒng)在同一個(gè)以太網(wǎng)段上,可以使用廣播的方式尋找運(yùn)行XDM的主機(jī),此時(shí)啟動(dòng)X的命令為:
# /usr/X11R6/bin/X -broadcast
這樣系統(tǒng)上將列出本地所有運(yùn)行XDM的Unix主機(jī),供使用者選擇登錄。或者可以直接查詢方式,通過(guò)query參數(shù)直接與某臺(tái)Unix主機(jī)相連接,這可以用在客戶機(jī)和服務(wù)器不在同一個(gè)網(wǎng)段上的時(shí)候。
# /usr/X11R6/bin/X -query Unixhost
為了使系統(tǒng)一啟動(dòng)就進(jìn)入這個(gè)登錄狀態(tài),可以將這個(gè)命令寫(xiě)入shell腳本,并放入系統(tǒng)啟動(dòng)目錄/usr/X11R6/etc/rc.d中。然而此時(shí)使用ttys文件進(jìn)行設(shè)置更佳,因?yàn)榇藭r(shí)可能同時(shí)想關(guān)閉虛擬控制臺(tái),以防止X終端使用者切換到虛擬控制臺(tái)上。
未完,待續(xù)。。。
