X Window 系統(tǒng)使用指南--視窗系統(tǒng)
X Window System 是一套在各種位元映像顯示器 (bitmapped dispalys) 上具有極大可攜性 (portable) 的視窗系統(tǒng) (window system), 它是由麻省理工學(xué)院 (MIT)所發(fā)展出來. X Windows System ( 本書以後部 份簡稱為X) 可在許多系統(tǒng)上執(zhí)行. 由於它和生產(chǎn)者無關(guān)、具可攜性、對彩 色掌握的多樣性及對網(wǎng)路之間的操作透通性 (operate transparently), 使 得X成為一個工業(yè)的標(biāo)準(zhǔn). 由於原始程式可自由使用, 所以它也是一個優(yōu)良 的研究媒介.
X視窗系統(tǒng)是一個讓程式設(shè)計師發(fā)展可攜性圖形使用者介面的工業(yè)軟體 標(biāo)準(zhǔn), X最重要的特徵之一是它獨特的與設(shè)備無關(guān)結(jié)構(gòu).任何硬體只要提供 X協(xié)定 (Protocol),便可以執(zhí)行應(yīng)用程式顯示一群包含圖文的視窗,而毋需 重新編譯和連結(jié).這種與設(shè)備無關(guān)的特性,使得只要是根據(jù)X標(biāo)準(zhǔn)所發(fā)展的 應(yīng)用程式,均可在不同的環(huán)境下如大型電腦,工作站,個人電腦上執(zhí)行,因 而奠定了X成為工業(yè)標(biāo)準(zhǔn)的地位.
X可以在一些 Unix 系統(tǒng)的電腦上執(zhí)行, 如 Alliant, Apollo, DEC, IBM, Hewlett-Packard, Sun等, 也可在 DEC的 VAX/VMS, MS-Dos及一些其它的系 統(tǒng)上執(zhí)行. 其它的一些廠商如 AT&T, Adobe, Control Data, Data General , Fujitsu, Prime, SIEmens, Silicon Graphics, Sony, Texas Instruments, Wang, Xerox 均曾表示支援X.
1.1 X有什麼特點?
以下四個特徵說明了X大部分的能力及其受大眾歡迎的原因:
.X具有網(wǎng)路透通性(Network Transparent): 透過網(wǎng)路,應(yīng)用程式在 其他機(jī)器輸出顯示就和在自己機(jī)器上一樣容易.此種通訊架構(gòu)和網(wǎng)路 上另一端的它種機(jī)器完全語言無關(guān)和機(jī)器無關(guān),甚至不需相同的作業(yè) 系統(tǒng).總結(jié)一句,程式可以在另一種不同的顯示器型態(tài)下執(zhí)行而毋需 重新編譯(re-compilation)和重新連結(jié)(re-linking).
.可支援許多不同風(fēng)格的使用者介面,管理視窗的功能例如視窗的擺放 ,大小及顯示順序等等并不包含於系統(tǒng)中,而是由應(yīng)用程式來控制, 因此可輕易的更換.不同風(fēng)格的介面關(guān)系於不同的應(yīng)用程式,利如卷 動視窗中的文字和選擇視窗中的一個物體,彼此間不會互相限制.
.X不是電腦作業(yè)系統(tǒng)的一部分:對作業(yè)系統(tǒng)而言,X只是一個應(yīng)用程 式而已,因此,X很容易在不同的系統(tǒng)上裝設(shè).
.視窗是階層性的 (hierarchical): 應(yīng)用程式可以直接利用視窗系統(tǒng) 已有的設(shè)施 (facilities) 便可滿足大部分的需求,而毋需藉助其他 的輸入或控制結(jié)構(gòu) (mechanisms). (例如:選單(menu)可利用一個分 支的子視窗來產(chǎn)生.)
所有的特徵均會在以下的章節(jié)中作進(jìn)一步詳述.
1.2 什麼是視窗系統(tǒng)?
本節(jié)討論一般視窗系統(tǒng)的一些基本概念, X視為其中一個特例, 如果你 已熟悉其它的視窗系統(tǒng), 本節(jié)內(nèi)容僅需快速瀏覽即可.
X是一個在位元映像顯示螢?zāi)簧辖⒑凸芾硪暣暗南到y(tǒng), 它可以在擁有 位元映像顯示器、鍵盤和一些可以指示螢?zāi)簧咸囟ㄎ恢没蛭锛难b置的工作 站或他種型式擁有位元映像顯示器的終端機(jī)上執(zhí)行. X把指示位置的裝置叫 做指標(biāo) (pointer), 通常為滑鼠(mouse),X支援現(xiàn)今電腦上常見的視窗使用 者介面.
使用視窗系統(tǒng)常常拿來和在普通辦公桌上的工作比較, 你的桌面上通常 放了一些紙, 信件和手邊相關(guān)的工作, 一些有用的工具 (如時鐘, 日歷, 計 算器等),當(dāng)進(jìn)行到工作的另一個部份, 你會從新安排桌面上的紙, 你可能把 工具集中放在一起, 也可能不時參考桌上仍然看得到的紙的內(nèi)容, 過了一陣 子, 你可能把其中的一些資料暫時擺到一邊, 或者通通從桌面上移走.
上述是一個人的工作模式, 把它搬到電腦, 如果能提供相同的功能是很 理想的, 很不幸地, 老式的終端機(jī)或 CRT限制了你一次只能在螢?zāi)簧献鲆患? 工作, 而且只能看見一小部份的文字資料 (通常為24行),圖形的工作就更別 提了, 現(xiàn)在視窗系統(tǒng)試圖克服這點, 通常它提供你一個較大的螢?zāi)? 允許你 同時看到幾件工作項目, 可以顯示圖形, 甚至有彩色.
X便是依照上述視窗的工作模式發(fā)展出來的, 在X的環(huán)境下、一個視窗 是螢?zāi)簧系囊粔K長方形區(qū)域, 且平行於螢?zāi)坏倪? 通常, 每一個視窗 (注1) 被一個獨立的應(yīng)用程式所專用, 數(shù)個應(yīng)用程式可以' 同時' 在它自己所擁有 的視窗上顯示輸出結(jié)果,X允許視窗重疊. 見圖 1 - 1
注 1: 嚴(yán)格地說, 應(yīng)該說成' 一個最高層 (top level)的視窗',因為X允許 視窗有階層, 所以, 一個典型的應(yīng)用視窗可以包含許多子視窗 (sub-window)分別用來做控制、輸入及顯示等功能.
┌——————————————┐ │ page 6. Fig 1.2 │ │ │ │ │ │ │ │ │ │ 圖 1 - 1 重疊的視窗 │ └——————————————┘
但即使視窗的部份或全部被其它視窗遮蓋, 應(yīng)用程式仍然可以對它自己 所擁有的視窗做輸出. 設(shè)備程式 (facilities) 提供在螢?zāi)簧弦苿右暣啊⒏? 變視窗大小、把視窗放在最上一層或最下一層等功能。即便是視窗可以重疊 , 為了方便而在同一螢?zāi)婚_了許多視窗仍然非常費時, 因此, 就如同其它的 視窗系統(tǒng)一般,X提供表徵圖 (icon), 我們在螢?zāi)簧嫌靡粋€表徵圖代表一個 應(yīng)用視窗, 當(dāng)我們對應(yīng)用視窗表徵圖化 (iconify)後, 視窗被從視窗上移走 , 代之以表徵圖, 而空出了較多的螢?zāi)豢臻g, 相反的動作為解除表徵圖化 ( de-iconify),也就是以原先的視窗取代表徵圖。
一些便利的功能, 例如時鐘或日歷, 并非內(nèi)建於系統(tǒng), 而是由許多小的 應(yīng)用程式所提供.
對於輸出, X提供了許多寫文字和畫圖形到視窗上的功能選擇, 許多種 的字型 (FONTS)可以非常容易并且做一致性的處理, 有許多圖形的結(jié)構(gòu)和繪 圖的基本方法, 例如點, 線, 弧線, 區(qū)域 (areas)被提供, 色彩的掌握更是 豐富, 這些復(fù)雜的部份對使用者而言是隱藏起來的, 使用者可以簡單和方便 的使用它們,例如, 在應(yīng)用上, 你可以用 '*times-bold-i*'表示要使用加倍 粗的斜體字型 (italic),你需要使用彩色時, 你只要用日常的名稱, 例如 'yellow(黃色)' 或 'navy blue (天藍(lán)色)'.
對於輸入功能的提供, X也是多樣化的, X可以連結(jié)不同形式的鍵盤, 如傳統(tǒng)的QWERTY鍵盤或Dvorak Style鍵盤, 或者是不同國家的特殊規(guī)定. 處 理使用者介面是輸入功能很重要的一個部份, 鍵盤和滑鼠的指令告訴系統(tǒng)如 何架構(gòu)一個視窗和處理視窗的內(nèi)容.
由於X的視窗處理功能并非內(nèi)建於系統(tǒng), 而是建在使用者層次, 因此容 易於修改或更換, 所以X能提供不同形態(tài)的使用者介面。換個角度來說,使 用者介面所必需具有的彈性幾乎完全可由X獨立提供.
1.3 X簡史
X於1984年在麻省理工學(xué)院 (MIT)電腦科學(xué)研究室開始發(fā)展, 當(dāng)時 Bob Scheifler 正在發(fā)展分散式系統(tǒng) (distributed system),同一時間 DEC公司 的 Jim Gettys 正在麻省理工學(xué)院做 Athena 計畫的一部份, 兩個計畫都需 要一個相同的東西 ------ 一套在 UNIX 機(jī)器上優(yōu)良的視窗系統(tǒng). 因此合作 關(guān)系開始展開, 他們從史丹佛 (Stanford) 大學(xué)得到了一套叫做W的實驗性 視窗系統(tǒng), 因為是根據(jù)W視窗系統(tǒng)的基礎(chǔ)開始發(fā)展,當(dāng)發(fā)展到了足以和原先 系統(tǒng)有明顯區(qū)別時,他們把這個新系統(tǒng)叫做X.
工作持續(xù)地進(jìn)行, 新的版本 (version)不斷地產(chǎn)生 (當(dāng)軟體和前一版不 相容時, 新的版本便產(chǎn)生了),在1985年中期, 任何人只要付版權(quán)費便可使用 X的基本政策被決定. 以下為一些最近的記事:
第10版: 1985年底. 直到此時, 在 MIT以外的人和組織, 才開始對X有 實質(zhì)的貢獻(xiàn).
第一套商業(yè)化的X產(chǎn)品: DEC 於 1986 年 1月推出 VAXstation-II/GPX.
第10版第 3次發(fā)行: 1986年 2月. 從此時起, X開始流傳於世, 人們把 它移植到許多新的系統(tǒng)上.
第10版第 4次發(fā)行: 1986年11月.
第一次X技術(shù)會議: 1987年 1月於 MIT.
在1986年間, 第10版X?zé)o法滿足所有的需求已非常明顯, MIT 和 DEC便從事於 完整協(xié)定 (protocal) 的重新設(shè)計, 這就是X第11版.
第11版第 1次發(fā)行: 1987年 9月.
X協(xié)會成立: MIT X協(xié)會成立, 目的是為了研究發(fā)展及控制標(biāo)準(zhǔn), 目前有 30個以上的機(jī)構(gòu)加入.
第二次X技術(shù)會議: 1988年 1月.
第11版第 2次發(fā)行: 1988年 3月.
第11版第 3次發(fā)行: 1988年10月.
1.4 X的成品
嚴(yán)格地說, X視窗系統(tǒng)并不是一個軟體, 而是一個協(xié)定 (protocal),這 個協(xié)定定義一個系統(tǒng)成品所必需具備的功能 (就如同 TCP/IP, DECnet 或 IBM的 SNA,這些也都是協(xié)定, 定義軟體所應(yīng)具備的功能).任何系統(tǒng)能滿足此 協(xié)定及符合X協(xié)會其他的規(guī)□, 便可稱為X.
簡單地說, 從現(xiàn)在起本書不再區(qū)分協(xié)定和成品的分別, 我們提到X, 意 指一個完整且適當(dāng)?shù)南到y(tǒng)成品.
1.5 MIT 發(fā)行的X
MIT 所發(fā)行的X可以提供許多廠牌的電腦, 目前的版本 (第11版第 3次 發(fā)行) 支援以下的系統(tǒng):
. Apple A/UX . Apollo Domain/IX . 4.3 + tahoe . Digital Equipment Coporation Ultrix . Hewlett Packard HP-UX . IBM AOS . Sun Mircosystems SunOS
此外尚有更多的商業(yè)化產(chǎn)品.
當(dāng)系統(tǒng)一直在發(fā)展, 而且有更多的人使用它, 由第三集團(tuán)(third party) 發(fā)展的軟體逐漸增加, 而使得系統(tǒng)版本一分為二:
. core版 -- 軟體由MIT X協(xié)會提供.
. corelib 版 -- 軟體由使用者或第三集團(tuán)提供.
為了方便, core和corelib 軟體儲存在不同的磁帶上發(fā)行.
本書說明幾乎以core版為主, 偶而因core版沒有提供的功能或大家較有 興趣的部份, 會參考到corelib 版本.
1.5.1 MIT 版包含了什麼
這個版本包含了文件說明, 原始碼, 建構(gòu)檔 (configuration file) 和 公用程式 (utilities)和其它一些建立完整工作系統(tǒng)所必需的東面,(沒有任 何目的檔或二進(jìn)位檔提供, 系統(tǒng)必需由原始碼建立),在此我們只討論從使用 者觀點看這個系統(tǒng), 所以只描述那些視窗系統(tǒng)程式本身或一些使用者所需的 工具程式, 省略裝設(shè)公用程式、建構(gòu)工具程式、本版需知等, 這些東西可參 考附錄.
core版的程式可分為以下幾類:
1. X視窗系統(tǒng)本身的程式.
2. 使用視窗系統(tǒng)必備的工具和設(shè)備程式:
. 日常的視窗相關(guān)功能的工具程式 (例如將視窗內(nèi)容傾印至列表機(jī))。
. 一些你常常保持在 '案頭' (desktop) 的便利程式 (例如時鐘, 日歷). 3. 從視窗環(huán)境獲得效益的一般應(yīng)用程式.
4. 展示(Demo)程式和游戲程式.
5. 資訊和狀態(tài)報告程式.
6. 定制 (customise)你自己的環(huán)境的工具程式.
我們將在以下的章節(jié)討論它們.
1.5.2 系統(tǒng)程式
以下的程式包含了所有基本系統(tǒng)的相關(guān)程式.
X - 顯示server -- 這個軟體控制了你的工作站的鍵盤、滑鼠和螢?zāi)? 這是X的心臟, 此程式可以建立、去掉視窗, 實際的應(yīng)其它 client 程式的 Request (需求)做寫 (write)和畫(draw)的動作.
這個server程式在各種硬體上有不同的程式提供, 例如:
Xapollo - 針對Apollo顯示器.
Xhp - 針對Hp 9000/300 的Topcat顯示器.
Xibm - 針對IBM 的APA16 和Megapel 顯示器.
XMacll - 針對Apple 的Macintosh II.
Xplx - 針對Parallax圖形控制器.
Xqdss - 針對DEC 的GPX 顯示器 (VAXstation II/GPX).
Xqvss - 針對DEC 的QVSS顯示器.
Xsun - 針對Sun/2, Sun/3, Sun/4 和Sun/386i工作站.
Xinit - 初始(initialization)程式, 啟動系統(tǒng)和設(shè)定Server執(zhí)行.
Xdm - X顯示管理器(display manager),一個提供便利和彈性地啟動系統(tǒng) , 使系統(tǒng)啟動成個別需求的程式, 可以和 Xinit兩者擇一.
Uwm - X視窗管理器(Window Manager), 此程式?jīng)Q定如何管理你的 '案頭'、 移動視窗、重定視窗大小等等, 你可以利用選單結(jié)合滑鼠的按鈕 或鍵盤完成視窗操作.
只有Server程式是絕對必需的, 不需其它的程式, 你就可以在X系統(tǒng)上 跑其它的應(yīng)用程式 (雖然笨了一點). (Xinit 等程式可由其它相同功能程式 替代.)
以上程式包含了視窗系統(tǒng), 但除了在視窗上移動游標(biāo)外, 什麼事也不能 做. 因此實際上, 你需要更多的公用程式和應(yīng)用程式.
1.5.3 視窗系統(tǒng)公用程式
以下的工具程式并不是視窗系統(tǒng)的一部份, 但它們是你要更方便的使用 系統(tǒng)或利用系統(tǒng)做更多的事所不可或缺的, 它們分為以下兩個部份:
1. 視窗系統(tǒng)操作常用工具程式
只要你用視窗系統(tǒng)代替一般的電腦終端機(jī), 這些程式幾乎是天天需 要的:
xterm - X終端機(jī)模擬器 (terminal emulator), 你的系統(tǒng)內(nèi)大多 數(shù)的程式并非特別為使用視窗系統(tǒng)設(shè)計. 舉例來說, 一些 最普通的系統(tǒng)程式 -- 列出檔案目錄, 編輯器, 編譯器等, 它們在普通的終端機(jī)可以正常的執(zhí)行, 可是它們?nèi)绾卧谶B 視窗系統(tǒng)是什麼都不知道的情況下, 在X下操作? Xterm 就是建立一個X的視窗, 且允許這些普通的 '笨啞終端機(jī) (dumb terminal)'程式能夠在這個視窗中執(zhí)行的工具程式. 這些普通程式會認(rèn)為它們是在 '真的' 終端機(jī)上執(zhí)行. 當(dāng) 然, 你也可以用xterm 去啟動其它的X程式而并非一定是 那些普通程式.
xhost - 讓你控制網(wǎng)路上那些被允許存取你的顯示螢?zāi)坏钠渌鳈C(jī)。
xkill - 一個可殺掉不想要之應(yīng)用程式的工具程式。
xwd - 將你視窗內(nèi)目前的影像傾印 (dump) 到一個檔案中,使得你可 以在稍後重建這個視窗、列印它或做一些你想做的事。
xpr - 將先前 xwd所抓取 (capture)的視窗影像轉(zhuǎn)換成適合硬拷貝 (hardcopy)印出的格式.
xdpr - 結(jié)合了 xwd和 xpr,允許你在一個步驟就印出視窗的內(nèi)容.
xmag - 將螢?zāi)簧媳贿x取的一部份影像加以放大。
xwud - 將先前 xwd所抓取的視窗影像重新顯示於螢?zāi)簧稀?
x10tox11 - 將能在第10版X執(zhí)行的程式轉(zhuǎn)換成可在第11版執(zhí)行。
xrefresh - 更新 (refresh)顯示, 將某些或全部的視窗全部重畫 一遍。
2. 便利的程式
xclock - 一個指針或數(shù)字型的時鐘。
xclac - 一個計算器,可模擬科學(xué)工程型的計算器。
xload - 用累計圖 (histogram)來顯示目前機(jī)器的負(fù)載分布。
xbiff - X版的 biff,信件到達(dá)告知 (barfs if mail arrives) 程 式,xbiff 會顯示一個信箱的表徵圖,當(dāng)信箱上的旗子升起時, 表示有你的信。
1.5.4 一般應(yīng)用和工具程式
這些程式不是直接和視窗系統(tǒng)相關(guān),但視窗系統(tǒng)環(huán)境使它們更有效益。
xedit - 一個文字編輯器,你可以用選單或鍵盤下命令,也可以用指標(biāo)指 定位置或一段文字。
xman - 一個說明書或系統(tǒng)文件的瀏覽器。
xmh - 一個信件管理程式。
1.5.5 示□和游戲程式
這些程式展示了X圖形和彩色的能力, 在你開始使用系統(tǒng)時, 它們是一 個進(jìn)入狀況良好的起點.
ico - 顯示一個二十面體 (或其它多面體) 在視窗內(nèi)進(jìn)行彈性碰撞運動.
maze - 以亂數(shù)建立一個迷宮并找出它的解法.
muncher - 在視窗上描繪大量動態(tài)的圖樣 (patterns).
plaid - 在視窗上畫一些持續(xù)變化的花格子圖形.
xlogo - 在視窗上印一個X的字形.
puzzle - 智慧盤, 在一 4x4方塊盤上, 移動編號 1 - 15 的小方塊, 以排成特定型態(tài)的游戲.
1.5.6 資訊和狀態(tài)程式
以下的程式提供你有關(guān)於你的視窗系統(tǒng)的資訊和狀態(tài), 你將會常利用它 和你自己的工具程式連結(jié)在一起.
xfd - 在視窗內(nèi)顯示一個被X指定的字型,且可選擇性地提供更多有關(guān) 此字型的資訊.
xlsfonts - X字型的目錄程式, 告訴你一個顯示器上有那些字型可供 使用.
showsnf - 顯示上server上SNF(Server Natural Format,你Server上原 有的格式) 格式對某一種字型的細(xì)節(jié).
xwininf - 顯示某個特定視窗的資訊, 如大小, 位置及其它特徵.
xlswins - 列出系統(tǒng)內(nèi)所有的視窗, 并可選擇性地列出每個視窗的一些 細(xì)節(jié).
xprop - 顯示視窗的性質(zhì) (properties) 和字型.
xdpyinfo - 提供你的顯示器及控制它的 server之細(xì)節(jié).
xev - 印出和視窗相關(guān)所有X '事件(event)'的細(xì)節(jié), 用來偵錯(diagnostic) 或給有經(jīng)驗的人使用的工具程式.
1.5.7 定制適合你的系統(tǒng)之工具程式
一開始你可能不會用這些程式, 但過了一段時間, 你可能發(fā)現(xiàn)你必需修 改一下系統(tǒng), 例如想使用較大的預(yù)設(shè)字型, 視窗邊框換成自己喜歡的顏色等, 用以下的程式, 可以使你的工作環(huán)境更加適合你.
xset -- 允許依照你的喜好設(shè)定顯示特性, 你可以設(shè)定一個鍵使它有效或 無效, 調(diào)整警告鈴的音量, 指定字型從何處取得等.
xsetroot - 你可以選擇你顯示螢?zāi)槐尘暗耐庥^, 當(dāng)你滑鼠的指標(biāo)不在任 何應(yīng)用視窗內(nèi)時, 你可以改變使用的顏色或圖樣或游標(biāo).
xmodmap - 顯示鍵盤的對應(yīng) (mapping), 也就是按什麼鍵對到什麼字元, 可以允許你修改成適合你的對應(yīng), 通常用來設(shè)定一些特殊鍵 (如 META, SHIFT-LOCK等) 和函數(shù)鍵, 但你可以視需要設(shè)定任何鍵.
bitmap - 讓你建立和編輯位元映像的程式, 例如用來改變cursor的式樣, 編輯表徵圖, 視窗的背景圖樣等等.
xrdb - 讓你在資料庫中顯示或改變你喜愛的色彩或字型等等, 稍後可被 應(yīng)用程式使用到. 也就是說, 你可以設(shè)定一些預(yù)設(shè)的特性, 讓這 些特性被所有或只有特定的應(yīng)用程式用來當(dāng)作預(yù)設(shè)特性.
bdftosnf - 將一種字型從BDF('bitmap distribution format'一種可攜 的格式)格式轉(zhuǎn)成你Server 原有的SNF 格式.
