X 視窗系統
10.1 簡介
- X的簡史
X視窗系統的發展開始於1984的麻省理工學院,它是由麻省理工學院電腦科學實驗室與雅
典娜(Athena)計劃所贊助。因為IBM和DEC原本有參與了 Athena計劃,所以 X從一開始
就有來自業界的支援。1986年初,DEC發表了第一套商業的X,這是含在VAXstation-
II/GPX跑的 Ultrix作業系統裡,版本是 X version10,release 3,簡稱 X11R3。很快
的,X吸引了其它工作站廠商的注意,像是Hewlett-Packward,Apollo
Camputer(Apollo現已跟Hewlett-Packward合併),Sun Microsystems以及Tektronix.
由於使用者的反應,計劃的成員重新設計了X協定,在 1986年11月,X1OR4發表了,這是
X version10的最後一個release,之後就是X version 11了。1987年一月,在第一屆X技術會議舉行期間,11家主要電腦廠商宣佈了對於X11的支
持與標準化,X11的第一個release-X11R1在1987年發表,為了確保X能在一個開
放組織的控制下持續改進,一個非營利的組織-麻省理工學院 XConsortium 於1988年一
月成立,在X的主要設計者-Robert W. Scheifler的領導下,XConsortium 負責推
展 X,X視窗系統的發展控制也轉交給X Consortium。1988年三月,X11R2發表,1988十月底,X11R3發表,1990年一月,X Consortium發
表 X11R4,X11R5則是接著在1991年八月。當 X在工作站的世界普及後,X
Consortium仍不遺餘力的在許多方面改進X,包含讓 C++也可以設計 X程式,以及加
進一個物件導向程式設計工具,叫 Fresco等等,這些都在1994年4月發表的 X11R6裡,
X11的X協定在這些release中並沒更改,所有的加強都是經由 X協定所提供的功能, - 了解X視窗系統
X視窗系統這名詞指的是好幾個部份,這幾個部份使得在不同位元映射顯示
上,以視窗為基礎的圖形輸出更方便。
X的核心是X server,一個程序(process),也就是一個執行中的電腦程式,它
控制顯示。鍵盤,滑鼠,應用程式則統稱X clients,與X server以內部程序通
訊(interprocess communication,ipc)的機制溝通,顯示出整個輸出。X server
和X clients之間是以一個定義好的協定,叫X protocol的通訊協定來溝通,X
clients,X protocol,X還包含C寫成的程式庫,叫Xlib,當作與X server溝
通的程式介面。 - Clients 和 Servers
X Server 又稱為 X Terminal,簡單地說,您可以將自己眼前的螢幕,
就看作是 X Server。在實際運作的場合上,X Server 是 X Window
的主要核心程式,必須比 X Client 更早啟動,它負責控制螢幕、
顯示卡、鍵盤、滑鼠等硬體設備,為使用者準備好一個「可供顯示視窗
的資源環境」,用以等待網路上的 X Client 程式,前來提出「顯示
要求」。簡而言之,X Server 負責顯示並處理鍵盤滑鼠的動靜 (後者
稱為 X Event),而 X Client 負責執行並產生視窗等影像要求 (後者
稱為 X Request)。在 X Window 環境中,X Request 與 X Event 傳遞的關係如下:
若是您已經安裝好 Linux 系統,而且裡頭也有完整的 X Window 程式套件,
那麼試著查看 /usr/X11R6/bin 目錄裡的檔案內容,這裡頭放置的全是
X Window 的可執行檔或工具程式,不過,我們可以進一步將它們分成 X Server
與 X Client 兩類程式,例如 XF86_Mach64、XF86_SVGA、XF86_FBDev,這些
檔案都是 X Server 程式,例如 crxvt、netscape、x11amp 等,這些檔案
都是 X Client 程式。有一個非常重要的觀念:X Protocol 的溝通內容,與一般常見的
TELNET 或 HTTP 通訊協定,觀念上有部份不同,因此很容易造成初學者的
混淆。舉例來說,當您在使用 TELNET 通訊協定時,連結溝通的兩端主機,
大多時間都只是在互傳 ASCII 文字串,對使用者而言,應該可以
想像並理解自己是連線至遠端的主機,存取遠端 Server 的資料。
類似的情節,也能夠應用在 Netscape 瀏覽器 (Client) 的例子上,
經由滑鼠點選各式的 URL 連結,我們可以想像這個「要求」,透過
HTTP 通訊協定傳至遠端的網頁伺服器,由 Server 判讀出 Client
的要求內容,再傳回所需的資料。就是說,一般的印象中,總認為 Server 與 Client 必定是分開的,
而且 Server 通常代表一部位於網路遠端、功能強大、系統資源眾多
的高檔主機,例如 File Server、FTP Server、WWW Server 等,反過
來說,Client 則多半是自己電腦上的一個小程式,例如 telnet 程式
或 netscape 程式等。但在 X Protocol 分工的情況下,X Server
負責影像顯示的工作,它主要耗用的是「螢幕」「顯示卡」等系統資源
,而 X Client 負責程式執行的工作,它主要耗用的是「處理器」「記憶體」
等系統資源。系統管理員可以依照系統資源及網路狀況,規畫出合適的
系統架構。X Server 與 X Client 之間的位置關係,最單純的型式,便是兩者
都位於您面前的同一台主機上,不過,請特別注意到,它們仍舊是
維持著 Client/Server 關係。接著,若 X Server 於您面前的主機上執行,
而接受網路上別台主機上的 X Client 程式執行的結果 (即所產生的
視窗影像),您得為此配合一個不錯的網路環境,這類情況也蠻常見的。
不論如何,X Server 沒有在您面前的主機螢幕上執行顯示,怎麼說都是
相當特異的,通常也是沒有意義的事,而這類無意義的事何時會發生呢?
當您嘗試 telnet 到另一台主機,然後執行 startx 時,這樣的事情便
發生了。 - 什麼是 window manager ?
在架構上,我們已經認識 X Protocol 規範了 X Server 與 X Client 之間
的溝通方式,在實務上,當 X Server 為使用者準備好一個顯示環境時,
您應該就能發現螢幕上會出現有底色 (僅是慘淡單調的顏色) 變化,
而且滑鼠指標也啟動就緒,接下來,我們會看到一連串 X Client 的工作,
而當中,最重要的 X Client 程式,就是 window manager 程式了。window manager 程式是其他 X Client 程式的「總管」,所有 X Client
程式的視窗外觀與操作控制都會受到 window manager 的影響,我們稱之為
「look and feel」,舉凡視窗的外框型式、桌面選單、圖示、虛擬桌面、
按鈕樣式、工具列樣式等,都是由 window manager 所管理。而令人高興的是
(或是讓某些人大感焦慮),X Window 的天地無比自由廣闊,透過 window
manager 的設定,我們可以完成大部份的介面設計,打造一個符合個人風格
的工作環境。當今 X Window 環境,已發展出許多豐富美麗的 window manager 程式,
除了一般的功能外,也有加入讓人目炫神迷的多媒體效果。早期的 window
manager 程式有:●twm (Tab Window Manager)
●mwm (Motif Window Manager)
●fvwm, fvwm2, fvwm95 (F? Virtual Window Manager)
●olwm (OpenLook Window Manager)
近期所發展的大多有其獨到之處,因此大量吸引人氣聚集:
●Afterstep
●Enlightenment
●WindowMaker
10.2 XLinux上如何設定 X 視窗
如果你習慣了工作站上的圖形環境,那你就會希望很快的設定好X,讓你在
XLinux上也有相同的環境。
如果你想發展XLinux的圖形化軟體,那你也會想設定好X,讓你的軟體有個發
展與測試的環境。
想設定X,先得要設定出一個檔,叫XF86Config,這個檔包含了相關硬體的
資訊,XFree86 3.3.5 隨附了一個工具程式xf86config,它可以幫你建立
XF86Config這個設定檔。但在XLinux中, 您只要利用Genie的設定精靈,
便可在短短的時間內設定好您的 X 視窗。 請參考本手冊第六章
。
Genie 的動態設定項目?/A>
接下來幾節會指引你設定 X 視窗的相關準備動作,讓你可以在XLinux上啟動X。
- 了解相關硬體的資料
要設定 X 視窗,那你就得先了解 X 所會使用到的硬體的資料,從這章一開
始的介紹,你可以知道 X 控制了那些硬體。顯示卡
螢幕
鍵盤
滑鼠X server得有這些硬體的資料才能運作順利。
顯示卡 XFree86已經提供了各種特定晶片組(產生控制螢幕訊號的積體電路晶片)的X
servers,想知道用那個server,那就得知道顯示卡是那一種晶片組。
即使是同一系列晶片組的顯示卡,也可能會有不同的設定參數,因此也得知道
哪一個廠商生產的,型號等等。
至少,你得提供以下的資訊:顯示晶片組, 如 S3 或是 ATI Mach64。 製造廠商和型號, 像是Diamond Stealth 64 VRAM,Number Nine GXE64,
或是ATI Graphics Xpression。視訊記憶體的數目,是 1MB還是 2MB。 螢幕 X server經由顯示卡控制螢幕,它讓顯示卡送出各種訊號給螢幕(來控制畫
raser線要多快,舉例來說,整個螢幕重畫的頻率),如果螢幕做了超過它能力
所能做的事(譬如重畫raser線太快),那螢幕就可能會損壞,為了確保訊號是
在螢幕可以接受的範圍,XFree86需要知道螢幕特性。
至少,你得提供下列的資訊:水平同步頻率的範圍,傳統應該是 30-64 kHz。 垂直同步頻率(也就是垂直更新頻率)的範圍.像是50-90Hz。 如果查得到頻寬的話,那就更好,如 75 MHz。 滑鼠 滑鼠是圖形介面的一部份,因為使用者得用它來點選所要的項目,完成所要做
的工作,當你移動滑鼠時,X server就會移動螢幕上的指標,X server會偵測
滑鼠的按鍵,送出適當的控制事件(mouse-clickevents)給滑鼠指標所指向的應
用程式。雖然在安裝XLinux時你已經設定過滑鼠了,不過你還是得提供滑鼠的資訊給X
server,如果無法使用滑鼠,那麼XFree86就無法啟動。
要設定滑鼠,得注意下面情況:滑鼠的種類,是Microsoft,Logitech,Busmouse還是PS/2-style。 滑鼠連接的方式,經串列埠或是Bus連接。 滑鼠的設備名稱(devicename),你可以直接設定為/dev/mouse,這是個link
指到Linux中真正代表滑鼠的設備檔案,檔案的名稱隨滑鼠的種類與連接
的,方式而不同。只要設備名稱和滑鼠的種類是正確的,那麼應該不會有任何問題。
如果你的滑鼠是以bus方式來連接,那要注意不要跑gpm(這是個可以讓你在文字模
式下剪貼文字的程式),因為它會影響X的運作,你可以用下列的指令去看看是不是有
跑gpm:ps aux│grep gpm
如果有的話,在你進 X 以前,用kill這個指令去結束這個程式。
10.3 啟動與結束 X 視窗
- 執行 X
X Window 的開啟,至少有兩種主要的方式,一種是輸入 startx 指令,
另一種是執行 xdm 程式。執行startx tartx 指令其實是系統裡的一個 shell script,
我們可以透過文字編輯器直接觀看及修改其內容,而 startx 指令執行時,
本身也可以指定選項,例如 startx -- -bpp 16 則是常見的選項方式,
用於指定 X Server 以 16 bpp (bit per pixel),即每個 pixel 可表達 2^16
相當於 16 百萬的色彩數。當您遇到 startx 的預設 bpp 為 8 時,表示
每個 pixel 只能用以顯示 256 色,可能在使用上便顯捉襟見肘了。startx 這個 script,它是在/usr/X11R6/bin 這個目錄中,
所以之前要看看PATH這個環境變數有沒有含括這個目錄。執行startx時,startx會去找另一個script叫.xinitrc,首先它會去home directory
找,如果沒有,會以/usr/X11R6/lib/X11/xinit/xinitrc當做預設檔,注意喔,
這個預設檔不像home directory裡的.xinitrc前面有個句號。如果你有修改home directory裡的.xinitrc,那改變後的 .xinitrc檔,
最後結尾的幾行應該是像下面這樣的:# start some nice programs xsetroot-solid SteelBlue xterm -sb -name Linux & fvwm
#開頭表示之後的文字是註解,xsetroot這個程式把桌面背景設成SteelBlue。
xterm則是一個終端機模擬器,在xterm那一行最後那個 & 記號,則是讓
xterm在背景執行,最後,fvwm則是啟動視窗管理員。現在,可以在xterm(在主題捲軸有Linux這個字那個)這個視窗中下命令,
視窗管理員(像是fvwm)總是被放在.xinitrc的最後一行。這樣你可以藉由結束
視窗管理員來結束X回到文字畫面。xdm xdm 是開啟 X Window 另一種常見的方式,您可以使用 root 帳號執行 xdm
指令,隨後會出現一個「登錄系統」的提示畫面,您必須正確輸入帳號與密碼
後才能開始使用各式應用程式,這點與上述 startx 的方式大有不同。
使用者也可以修改 /etc/inittab 檔案內容,請先找到下列的一行資料:id:3:initdefault:
然後把 3 改成 5,這樣一來,系統一開機後就入直接開啟 xdm 登錄畫面。
有些人會直接使用 xinit 程式來啟動 X Window,這樣的「古典方式」
並不建議新手使用,一般僅適用於特殊場合。 - 結束 X 視窗
關閉 X Window 的方式,一般正常情況下,請依不同的 window manager
來點選 logout 按鈕,或是直接使用 Ctrl + Alt + Backspace 三鍵,
也可以離開整個 X Window 環境。如果是使用 xdm,則上述的方式僅會讓您
回到登錄畫面,想回到文字命令列模式的話,請試著按下 Ctrl + R 鍵。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论