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