第5章 啟動和關閉退出X
在本章, 我們將學到:
.如何在自己的機器上啟動X.
.如何在視窗上做一些基本操作.
.如何關閉退出X.
我們在此假設你的系統管理者已經在你的系統上裝設好了X, 事實上即
使不曾用過或不熟悉X, 裝設X也不會很困難. 因此如果你有必要自己裝設
X, 本書的附錄將給你一些提示.
在還未開始前, 我們需要先知道已裝設好的X, 它的執行程式在那裡,
MIT 版預設的目錄為 /usr/bin/X11,但很多地方是用 /usr/local/bin 或
/usr/local/bin/X11, 當你知道了之後, 把它加到你的搜尋路徑 (search
path) 裡, 如果你使用 C-Shell, 可以在你的.login檔 (或者可能是.cshrc
檔) 設定路徑, 如果你使用Bourne Shell, 則在.profile檔中設定. 例如,
在.login檔中使用C-Shell 的命令列設定路徑:
set path = (. /usr/local/bin/X11 /usr/ucb /usr/bin /bin)
如果你不設定路徑, X將無法正常啟動, 當你設好之後, 為了確定起見,
先logout再login 一次, 檢查路徑是否設定正確 (用 echo $PATH 指令).
5.1 啟動X
在你的顯示器啟動X,鍵入命令:
xinit
則會依序發生:
1. 你的整個螢幕會被設定成灰色。
2. 一個巨大的 "X" 游標出現(見圖 5 - 1 )
┌————————————————┐
│ p48 fig 5.1 │
│ │
│ │
│ │
│圖 5 - 1 大的 "X" 游標 │
└————————————————┘
你可以用滑鼠將它在螢幕上移動,但按滑鼠按鈕或鍵盤都對它無影響。
3. 一個xterm 終端機模擬器的視窗出現在螢幕左上角,當游標移到這個
視窗時,會改變成本文游標,(見圖 5 - 2),xterm 准備接受你的
命令。
┌————————————————┐
│ │
│ p48 fig 5.2 │
│ │
│ │
│ │
│圖 5 - 2 xterm 的本文游標 │
└————————————————┘
系統啟動的畫面見圖 5 - 3。X現在已被啟動,你可以把xterm 這個視
窗當成一個普通的終端機來使用,執行一些普通的指令,不過它最大的價值
在讓你可以開始執行其它的X程式,我們將於稍後告訴你,現在先來讓你了
解一下X的啟始動作做了些什麽。
┌————————————————┐
│ │
│ p49 fig 5.3 │
│ │
│ │
│ │
│圖 5 - 3 系統啟動的畫面 │
└————————————————┘
5.1.1 xinit 的內部操作:
首先, xinit 啟動Xserver程式在你的顯示器上執行, server建立一個
它自己的根視窗, 並把視窗的背景色設定成灰色, 把游標設定成一個大 "X".
在server執行的期間, server一直控制著鍵盤及滑鼠, 這就是你能在螢
幕上移動游標的原因, 但是因為目前沒有任何client程式要求告知鍵盤和滑
鼠 "事件",所以server只是追蹤滑鼠游標的移動, 而所有其它的鍵盤或滑鼠
輸入雖然都經過server處理但均被放棄, ( 因為沒有client程式有興趣 ),
這就是按鍵盤或滑鼠按鈕沒有反應的原因.
接下來, xinit 啟動xterm 程式執行, xterm 對server而言是一個client
程式, xterm 要求server建立一個視窗, 而且保持告知在這個視窗中的滑鼠
和鍵盤事件, xterm 設定在視窗中執行一個shell , 當指標移至視窗之內便
准備接受輸入.
鍵盤輸入被送至shell 就如同在一部真的終端機上輸入一般, 從shell
( 及其副程式 )的輸出藉著xterm 顯示在視窗上, xterm 也接受滑鼠輸入,
使得你能設定不同的程式操作參數和進行本文的剪貼 (cut and paste ) .
你可以觀察到系統執行這些動作的步驟, 例如當在系統啟動後, 在xterm
視窗內執行 ps a 命令:
PID TT STAT TIME COMMAND
1900 C0 S 0:00 xinit
1901 C0 S 0:01 X:0
1902 C0 S 0:01 xterm -geometry +1+1 -n login -display unix:0 -c
1903 p1 S 0:00 -sh (csh)
1904 p1 R 0:00 ps
以上的顯示說明xinit 在主控台(console )顯示器上被啟動,它初始化server
,X顯示為零。接著xterm 在一個虛擬(pseudo)的終端機上執行,xterm 啟
動一個shell 執行,使得它能處理你在xterm 視窗所下的命令。最後,我們執
行ps命令產生上述的列表。
我們將在第8章討論更多的xterm 細節, 從現在起, 我們假設xterm 被視
為一個DEC VT102 的終端機, 我們把重點轉移到系統啟動之後, 我們能做些什
麽.
5.2 如何執行一些X程式
你目前有一個X server 控制的顯示器,一個叫xterm 的client程式,允
許你輸入命令,本節告訴你如何執行其它的X程式。
因為X的client程式和X server 完全獨立,所以不需要特別的動作啟動
它們,你可以像執行一般的程式一樣執行它們。但是這些client程式需要確實
知道它們用的是那一個顯示器。實際上因為xterm 一開始設定了DISPLAY 環境
變數,給定了它使用的顯示器名稱,而其它的client程式用此當作預設顯示器
,因此你不需多做其它的事。
5.2.1 如何執行X的時鐘,xclock
我們用X的時鐘當作一個簡單的□例,先確定指標停在xterm 視窗中,然
後輸入命令:
xclock
一個小的時鐘影像出現在螢幕左上角,覆蓋了第一個視窗一部份,如圖 5 - 4
┌————————————————┐
│ │
│ p51 fig 5.4 │
│ │
│ │
│ │
│圖 5 - 4 xclock 啟動後的畫面 │
└————————————————┘
現在有三個問題要克服:
第一個問題:由於xterm 這個 "終端機" 已經有一個程式(xclock)在執
行,所以我們無法再輸入其它的命令,該怎麽辦?
唯一的辦法就是停掉xclock,但當你按下ctrl-c或DEL 鍵時,xclock便會
消失,要克服這種狀況,你需要非同步(asynchronously)執行xclock,用命令:
xclock &
則目前xterm 至少能接受你輸入其它的命令。
第二個問題:如何中止xclock?
X server 本身沒有提供直接的介面中止應用程式,但是有一個叫xkill
的client程式可讓你殺掉應用程式,在xterm 視窗內輸入xkill 命令便可啟動
這個程式,xkill 會顯示一個覆蓋性的方形游標(draped box cursor ),見
圖5-5 ,移動這個游標到任何你想殺掉的應用程式的視窗中,碰觸左按鈕,應
用程式的視窗會消失且應用程式和xkill 會一起結束,你也會得到如下的訊息:
xkill:killing creator of resource 0x40004d
XIO:fatal IO error 32 (Broken pipe) on X server "unix:0.0"
after 207 requests (178 known processed) with 0 events remain-
ing.
The connection was probably broken by a server shutdown or kill-
client.
┌—————————————————┐
│ │
│ p52 fig 5.5 │
│ │
│ │
│ │
│圖 5 - 5 xkill的覆蓋性的方形游標 │
└—————————————————┘
如果為了某些緣故你無法進到應用程式的視窗內用xkill 中止它,你通常可以用
UNIX的辦法:找出process 的ID,然後殺掉它,例如:
$ps a | grep xclock
1907 p2 I 0:00 xclock
1909 p2 S 0:00 grep xclock
$kill 1907
[1] Terminated xclock
$
第三個問題:如何避免時鐘和xterm 視窗重疊?
這個問題換個問法是:你如何安排應用程式視窗的位置?
你可以用前一章說明過的 "geometry" 的參數來解決,例如輸入命令:
xclock -geometry 200x300+400+500 &
這個命令告訴xclock建一個寬200 高300 個像素的視窗,位於螢幕左上角右邊
400 個像素,下邊500 個像素。
以上的三個問題都解決了,下一章會介紹更巧妙的解決方法。
使用彩色
如果你擁有彩色顯示器,那麽不妨以xclock進行你指定和使用彩色的實驗,
xclock有數種選項做彩色識別:
-bg color 設定背景顏色
-fg color 設定前景顏色
-hd color 設定時鐘指針的顏色
-hl color 設定時鐘指針邊線的顏色
輸入指令:
xclock -bg turquoise -fg red -hd magenta
你可以看到一個彩色的鐘,稍後我們會再說明顏色的正確使用名稱。
xclock啟動之後,便不再需要和使用者交談(interaction ),下一節我
們將介紹另一個需要從鍵盤和滑鼠輸入的小程式。
5.2.2 xcalc - 桌上型計算器
xcalc 是一個X的計算器,移動指標到xterm 視窗,輸入命令:
xcalc - geometry +700+500 &
一個像TI-30 型計算器的視窗出現了(如圖 5 - 6),你可以用滑鼠或鍵盤
來操作它。
┌————————————————┐
│ │
│ p54 fig 5.7 │
│ │
│ │
│ │
│圖 5 - 6 xcalc 桌上型計算器 │
└————————————————┘
使用滑鼠時,你可以移動指標到你需要的計算器按鈕,按滑鼠左按鈕表示
按下按鈕。如果是用鍵盤時,鍵盤上的一些鍵明顯的對應計算器按鈕,例如依
序按鍵盤鍵1 ,+ ,2 ,+ ,3 和 =鍵,代表了算1 ,2 ,3 的總和,由於至
少目前你可以用指標指到計算器的任一按鈕,因此鍵盤和計算器那些比較不明
顯的對應關系,在此不作進一步說明。
xcalc 比 xclock 有一個優點,那就是容易中止它。在計算器AC按鈕上碰
觸滑鼠右按鈕即可中止,大部份的X應用程式均有類似的中止設備。
5.3 關閉X
要關閉X視窗,只要移動指標到最初xterm 的視窗,輸入:
logout
則視窗消失,server終止,X也被關閉。
詳細點說,xterm 查覺到shell 終止時,也終止自己,而xinit 一查覺xterm
已經結束,便殺掉server後離開。
5.4 總結
你現在已能啟動系統、執行程式和關閉系統,所以你可以自行做一些實驗
執行xclock一小段時間,給不同的geometry設定,極度放大或縮小時鐘,擺在
螢幕的任何位置(甚至螢幕之外!)
在本章中,我們看到了如何啟動程式,如何執行一些視窗應用程式,如何
結束視窗系統。換句話說,你已經能使用系統。
但是,有許多的功能沒有提供,例如:
. 重定視窗大小
. 在螢幕任意移動視窗
. 將一個視窗從另一個視窗之下移出擺在案頭上(或者把它堆到下面)
. 用較方便的方法啟動視窗應用程式
這些以及其它更多的功能並非由基本的X系統提供,而是由下一章我們要
討論的視窗管理器提供。