X Window 系統(tǒng)使用指南--X的基本操作
在本章, 我們將學(xué)到:
.如何在自己的機(jī)器上啟動X.
.如何在視窗上做一些基本操作.
.如何關(guān)閉退出X.
我們在此假設(shè)你的系統(tǒng)管理者已經(jīng)在你的系統(tǒng)上裝設(shè)好了X, 事實(shí)上即 使不曾用過或不熟悉X, 裝設(shè)X也不會很困難. 因此如果你有必要自己裝設(shè) X, 本書的附錄將給你一些提示.
在還未開始前, 我們需要先知道已裝設(shè)好的X, 它的執(zhí)行程式在那里, MIT 版預(yù)設(shè)的目錄為 /usr/bin/X11,但很多地方是用 /usr/local/bin 或 /usr/local/bin/X11, 當(dāng)你知道了之後, 把它加到你的搜尋路徑 (search path) 里, 如果你使用 C-Shell, 可以在你的.login檔 (或者可能是.cshrc 檔) 設(shè)定路徑, 如果你使用Bourne Shell, 則在.profile檔中設(shè)定. 例如, 在.login檔中使用C-Shell 的命令列設(shè)定路徑:
set path = (. /usr/local/bin/X11 /usr/ucb /usr/bin /bin)
如果你不設(shè)定路徑, X將無法正常啟動, 當(dāng)你設(shè)好之後, 為了確定起見, 先logout再login 一次, 檢查路徑是否設(shè)定正確 (用 echo $PATH 指令).
5.1 啟動X
在你的顯示器啟動X,鍵入命令:
xinit
則會依序發(fā)生:
1. 你的整個螢?zāi)粫辉O(shè)定成灰色。
2. 一個巨大的 'X' 游標(biāo)出現(xiàn)(見圖 5 - 1 )
┌————————————————┐ │ p48 fig 5.1 │ │ │ │ │ │ │ │圖 5 - 1 大的 'X' 游標(biāo) │ └————————————————┘
你可以用滑鼠將它在螢?zāi)簧弦苿樱椿蟀粹o或鍵盤都對它無影響。
3. 一個xterm 終端機(jī)模擬器的視窗出現(xiàn)在螢?zāi)蛔笊辖牵?dāng)游標(biāo)移到這個 視窗時,會改變成本文游標(biāo),(見圖 5 - 2),xterm 準(zhǔn)備接受你的 命令。
┌————————————————┐ │ │ │ p48 fig 5.2 │ │ │ │ │ │ │ │圖 5 - 2 xterm 的本文游標(biāo) │ └————————————————┘
系統(tǒng)啟動的畫面見圖 5 - 3。X現(xiàn)在已被啟動,你可以把xterm 這個視 窗當(dāng)成一個普通的終端機(jī)來使用,執(zhí)行一些普通的指令,不過它最大的價值 在讓你可以開始執(zhí)行其它的X程式,我們將於稍後告訴你,現(xiàn)在先來讓你了 解一下X的啟始動作做了些什麼。
┌————————————————┐ │ │ │ p49 fig 5.3 │ │ │ │ │ │ │ │圖 5 - 3 系統(tǒng)啟動的畫面 │ └————————————————┘
5.1.1 xinit 的內(nèi)部操作:
首先, xinit 啟動Xserver程式在你的顯示器上執(zhí)行, server建立一個 它自己的根視窗, 并把視窗的背景色設(shè)定成灰色, 把游標(biāo)設(shè)定成一個大 'X'.
在server執(zhí)行的期間, server一直控制著鍵盤及滑鼠, 這就是你能在螢 幕上移動游標(biāo)的原因, 但是因?yàn)槟壳皼]有任何clIEnt程式要求告知鍵盤和滑 鼠 '事件',所以server只是追蹤滑鼠游標(biāo)的移動, 而所有其它的鍵盤或滑鼠 輸入雖然都經(jīng)過server處理但均被放棄, ( 因?yàn)闆]有client程式有興趣 ), 這就是按鍵盤或滑鼠按鈕沒有反應(yīng)的原因.
接下來, xinit 啟動xterm 程式執(zhí)行, xterm 對server而言是一個client 程式, xterm 要求server建立一個視窗, 而且保持告知在這個視窗中的滑鼠 和鍵盤事件, xterm 設(shè)定在視窗中執(zhí)行一個shell , 當(dāng)指標(biāo)移至視窗之內(nèi)便 準(zhǔn)備接受輸入.
鍵盤輸入被送至shell 就如同在一部真的終端機(jī)上輸入一般, 從shell ( 及其副程式 )的輸出藉著xterm 顯示在視窗上, xterm 也接受滑鼠輸入, 使得你能設(shè)定不同的程式操作參數(shù)和進(jìn)行本文的剪貼 (cut and paste ) .
你可以觀察到系統(tǒng)執(zhí)行這些動作的步驟, 例如當(dāng)在系統(tǒng)啟動後, 在xterm 視窗內(nèi)執(zhí)行 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)的終端機(jī)上執(zhí)行,xterm 啟 動一個shell 執(zhí)行,使得它能處理你在xterm 視窗所下的命令。最後,我們執(zhí) 行ps命令產(chǎn)生上述的列表。
我們將在第8章討論更多的xterm 細(xì)節(jié), 從現(xiàn)在起, 我們假設(shè)xterm 被視 為一個DEC VT102 的終端機(jī), 我們把重點(diǎn)轉(zhuǎn)移到系統(tǒng)啟動之後, 我們能做些什 麼.
5.2 如何執(zhí)行一些X程式
你目前有一個X server 控制的顯示器,一個叫xterm 的client程式,允 許你輸入命令,本節(jié)告訴你如何執(zhí)行其它的X程式。
因?yàn)椋氐腸lient程式和X server 完全獨(dú)立,所以不需要特別的動作啟動 它們,你可以像執(zhí)行一般的程式一樣執(zhí)行它們。但是這些client程式需要確實(shí) 知道它們用的是那一個顯示器。實(shí)際上因?yàn)閤term 一開始設(shè)定了DISPLAY 環(huán)境 變數(shù),給定了它使用的顯示器名稱,而其它的client程式用此當(dāng)作預(yù)設(shè)顯示器 ,因此你不需多做其它的事。
5.2.1 如何執(zhí)行X的時鐘,xclock
我們用X的時鐘當(dāng)作一個簡單的□例,先確定指標(biāo)停在xterm 視窗中,然 後輸入命令:
xclock
一個小的時鐘影像出現(xiàn)在螢?zāi)蛔笊辖牵采w了第一個視窗一部份,如圖 5 - 4
┌————————————————┐ │ │ │ p51 fig 5.4 │ │ │ │ │ │ │ │圖 5 - 4 xclock 啟動後的畫面 │ └————————————————┘
現(xiàn)在有三個問題要克服:
第一個問題:由於xterm 這個 '終端機(jī)' 已經(jīng)有一個程式(xclock)在執(zhí) 行,所以我們無法再輸入其它的命令,該怎麼辦?
唯一的辦法就是停掉xclock,但當(dāng)你按下ctrl-c或DEL 鍵時,xclock便會 消失,要克服這種狀況,你需要非同步(asynchronously)執(zhí)行xclock,用命令:
xclock &
則目前xterm 至少能接受你輸入其它的命令。
第二個問題:如何中止xclock?
X server 本身沒有提供直接的介面中止應(yīng)用程式,但是有一個叫xkill 的client程式可讓你殺掉應(yīng)用程式,在xterm 視窗內(nèi)輸入xkill 命令便可啟動 這個程式,xkill 會顯示一個覆蓋性的方形游標(biāo)(draped box cursor ),見 圖5-5 ,移動這個游標(biāo)到任何你想殺掉的應(yīng)用程式的視窗中,碰觸左按鈕,應(yīng) 用程式的視窗會消失且應(yīng)用程式和xkill 會一起結(jié)束,你也會得到如下的訊息:
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的覆蓋性的方形游標(biāo) │ └—————————————————┘
如果為了某些緣故你無法進(jìn)到應(yīng)用程式的視窗內(nèi)用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 視窗重疊?
這個問題換個問法是:你如何安排應(yīng)用程式視窗的位置?
你可以用前一章說明過的 'geometry' 的參數(shù)來解決,例如輸入命令:
xclock -geometry 200x300+400+500 &
這個命令告訴xclock建一個寬200 高300 個像素的視窗,位於螢?zāi)蛔笊辖怯疫? 400 個像素,下邊500 個像素。
以上的三個問題都解決了,下一章會介紹更巧妙的解決方法。
使用彩色
如果你擁有彩色顯示器,那麼不妨以xclock進(jìn)行你指定和使用彩色的實(shí)驗(yàn), xclock有數(shù)種選項(xiàng)做彩色識別:
-bg color 設(shè)定背景顏色
-fg color 設(shè)定前景顏色
-hd color 設(shè)定時鐘指針的顏色
-hl color 設(shè)定時鐘指針邊線的顏色
輸入指令:
xclock -bg turquoise -fg red -hd magenta
你可以看到一個彩色的鐘,稍後我們會再說明顏色的正確使用名稱。
xclock啟動之後,便不再需要和使用者交談(interaction ),下一節(jié)我 們將介紹另一個需要從鍵盤和滑鼠輸入的小程式。
5.2.2 xcalc - 桌上型計算器
xcalc 是一個X的計算器,移動指標(biāo)到xterm 視窗,輸入命令:
xcalc - geometry +700+500 &
一個像TI-30 型計算器的視窗出現(xiàn)了(如圖 5 - 6),你可以用滑鼠或鍵盤 來操作它。
┌————————————————┐ │ │ │ p54 fig 5.7 │ │ │ │ │ │ │ │圖 5 - 6 xcalc 桌上型計算器 │ └————————————————┘
使用滑鼠時,你可以移動指標(biāo)到你需要的計算器按鈕,按滑鼠左按鈕表示 按下按鈕。如果是用鍵盤時,鍵盤上的一些鍵明顯的對應(yīng)計算器按鈕,例如依 序按鍵盤鍵1 ,+ ,2 ,+ ,3 和 =鍵,代表了算1 ,2 ,3 的總和,由於至 少目前你可以用指標(biāo)指到計算器的任一按鈕,因此鍵盤和計算器那些比較不明 顯的對應(yīng)關(guān)系,在此不作進(jìn)一步說明。
xcalc 比 xclock 有一個優(yōu)點(diǎn),那就是容易中止它。在計算器AC按鈕上碰 觸滑鼠右按鈕即可中止,大部份的X應(yīng)用程式均有類似的中止設(shè)備。
5.3 關(guān)閉X
要關(guān)閉X視窗,只要移動指標(biāo)到最初xterm 的視窗,輸入:
logout
則視窗消失,server終止,X也被關(guān)閉。
詳細(xì)點(diǎn)說,xterm 查覺到shell 終止時,也終止自己,而xinit 一查覺xterm 已經(jīng)結(jié)束,便殺掉server後離開。
5.4 總結(jié)
你現(xiàn)在已能啟動系統(tǒng)、執(zhí)行程式和關(guān)閉系統(tǒng),所以你可以自行做一些實(shí)驗(yàn) 執(zhí)行xclock一小段時間,給不同的geometry設(shè)定,極度放大或縮小時鐘,擺在 螢?zāi)坏娜魏挝恢茫ㄉ踔廖災(zāi)恢猓。?
在本章中,我們看到了如何啟動程式,如何執(zhí)行一些視窗應(yīng)用程式,如何 結(jié)束視窗系統(tǒng)。換句話說,你已經(jīng)能使用系統(tǒng)。
但是,有許多的功能沒有提供,例如:
. 重定視窗大小
. 在螢?zāi)蝗我庖苿右暣?
. 將一個視窗從另一個視窗之下移出擺在案頭上(或者把它堆到下面)
. 用較方便的方法啟動視窗應(yīng)用程式
這些以及其它更多的功能并非由基本的X系統(tǒng)提供,而是由下一章我們要 討論的視窗管理器提供。
