X Window 系統(tǒng)使用指南--使用X的網(wǎng)路設(shè)備
第7章 使用X的網(wǎng)路設(shè)備 X的網(wǎng)路特點(diǎn)在於讓你可以在網(wǎng)路上的任何機(jī)器執(zhí)行應(yīng)用程式,而將其輸 出顯示在你自己機(jī)器的顯示器上,這是X最重要的功能之一,但卻很容易使用。
以下將描述你如何指定一個(gè)遠(yuǎn)方終端機(jī),如何實(shí)際使用這些功能,最後, 我們?cè)倜枋鋈绾卧诰W(wǎng)路上從其它的機(jī)器上控制或限制存取你的顯示器。
7.1 指定一個(gè)遠(yuǎn)方終端機(jī) -- -display 選項(xiàng)
幾乎所有的X程式都接受以一個(gè)命令列的選項(xiàng)來指定使用哪一個(gè)顯示器 ( 換個(gè)說法,連接到哪一個(gè)X server ),這個(gè)選項(xiàng)的格式為:
-display displayname
讓我們更進(jìn)一步討論顯示器名稱(displayname)的格式。
你會(huì)告訴程式它的輸出是哪一個(gè)顯示器 (網(wǎng)路上任何你可以選擇的顯示器)。 明顯地,網(wǎng)路上指定機(jī)器的名稱一定包含在內(nèi),但不止於此,因?yàn)橐恍?(大型) 機(jī)器可以有好幾個(gè)I/O 工作站,每一個(gè)工作站又擁有自己的鍵盤,滑鼠等等; 尤有進(jìn)者,一個(gè)工作站還可能控制了好幾部終端機(jī)。綜上所述,顯示器名稱需 要包含三個(gè)元素,hostname,display number和screen number ,我們將詳細(xì) 解釋并舉例說明。
7.1.1 Hostname
hostname是在網(wǎng)路上與顯示器直接連接的機(jī)器名稱,hostname也決定了應(yīng) 用程式和server是如何連接的。簡單地說:
假使Server在你自己本地的機(jī)器上執(zhí)行,你有兩種選擇:
1. 省略掉hostname,系統(tǒng)會(huì)選擇最有效率的方式和server交談。
2. 定hostname為'Unix',系統(tǒng)將用Unix domain sockets 作通信。('Unix domain' 意指socket用傳統(tǒng)Unix檔案名稱 (例如/dev/urgent)來命名. ) 在命名之後需加一個(gè)冒號(hào)(:), 即使你省略hostname,你仍需要加冒號(hào)。
假使Server在遠(yuǎn)方的機(jī)器上執(zhí)行,你一樣有兩種選擇,依你網(wǎng)路上用的通 信系統(tǒng)而定:
1. TCP/IP :大多數(shù)的Unix系統(tǒng)使用此種通信方式, 簡單的方法是用在你 區(qū)域網(wǎng)路上已知的normal name (例如'venus' 或'saturn ')。你也可 以用 full Internet name (例如'expo.lcs.mit.edu'或它的 Internet address '129.89.12.73')。在 name 後,需要加一個(gè)冒號(hào)。
2. DECnet :用你連接到的機(jī)器上的DECnet nodename,在hostname加兩個(gè) 冒號(hào)(::).
7.1.2 display number
顯示器是一組監(jiān)視器,螢?zāi)唬B接一個(gè)鍵盤和滑鼠的邏輯螢?zāi)坏慕M合。換 句話說,即是使用者工作的地方,在一個(gè)給定的CPU 上,顯示器從 0開始編號(hào), display number即是指哪個(gè)編號(hào)的顯示器被使用,即使display number為 0, 也不可省略。
7.1.3 screen number
對(duì)於連接到顯示器上數(shù)個(gè)螢?zāi)灰脖粡?0開始編號(hào),screen number 為你使 用螢?zāi)坏木幪?hào),和display number以一個(gè)句點(diǎn) (.)隔開,screen number 為 0 時(shí)可省略,若省略時(shí),其前面的句點(diǎn)一并省略。
7.1.4 □例
以下為一些顯示器格式的□例:
. 假設(shè)為本地的機(jī)器,預(yù)設(shè)螢?zāi)粸?0,以下二者均可:
unix:0 :0
. 假設(shè)你指定你自己的機(jī)器 (通常是venus),但你需要檢驗(yàn)TCP/IP網(wǎng)路的 操作和明顯地指定螢?zāi)唬?
venus:0.0
. TCP/IP網(wǎng)路上,遠(yuǎn)方的機(jī)器名為pluto ,僅有一個(gè)顯示器,指定screen number為 0:
pluto:0.1
. DECnet網(wǎng)路上,display number為 1,預(yù)設(shè)screen number 為 0:
vomvx2::1
7.2 實(shí)際上使用遠(yuǎn)方的顯示器
我們已知如何指定遠(yuǎn)方的顯示器,現(xiàn)在來練習(xí)一下:假設(shè)你是在venus 工 作,想要在saturn上執(zhí)行一個(gè)例如是xterm 的應(yīng)用程式。你必須在saturn執(zhí) 行xterm 且指定venus 的顯示器,則命令如下:(為了清楚起見,本節(jié)中我們 的命令列包含了命令列前shell 對(duì)機(jī)器名稱的提示)
venus% xterm -display venus:0.0 (注意:不完整!)
以上的指令是在本地的機(jī)器啟動(dòng)xterm ,并非在遠(yuǎn)方的機(jī)器啟動(dòng),不符合 需求。
如果在你的作業(yè)系統(tǒng)上,并未支持遠(yuǎn)方機(jī)器的操作,你可以藉著連接到 saturn的終端機(jī)輸入下面的命令:
saturn% xterm -display venus:0.0 (注意:不完整!)
則xterm 會(huì)在saturn啟動(dòng),在venus 上建立視窗,視窗會(huì)向venus 的滑鼠和鍵 盤取得輸入,這的確是你想要的,現(xiàn)在你可以回到venus 機(jī)器開始工作。
但由於你的作業(yè)系統(tǒng)事實(shí)上支援遠(yuǎn)方機(jī)器的功能,所以你毋需離開你的機(jī) 器便可完成上述的指定,命令如下:
venus% rsh saturn xterm -display venus:0.0
以上是利用普通的遠(yuǎn)方 shell的設(shè)備程式 -- rsh。
注意 1:命令可能因saturn不被允許存取venus 的顯示器而失敗,欲克服此種 狀況,輸入命令:
venus% xhost +
後再試一次。(xhost命令下一節(jié)會(huì)解釋)
注意 2:你可能需要非同步地執(zhí)行rsh ,在命令列之後加 &,以背景工作方式 執(zhí)行, 但可能因?yàn)榈却肋h(yuǎn)不會(huì)有的輸入,shell 和rsh 間的交談導(dǎo) 致 rsh 'block',為了克服此種情況,需修正命令為:
venus% rsh saturn xterm -display venus:0.0 < /dev/null &
遠(yuǎn)方的機(jī)器 (這個(gè)例子是saturn) 并不需要有X server 在執(zhí)行,甚 至不需要有位元映像顯示器,唯一的需求是能執(zhí)行應(yīng)用程式和支援網(wǎng) 路通訊。
現(xiàn)在總結(jié)你的工作模式為:在遠(yuǎn)方的機(jī)器上執(zhí)行應(yīng)用程式,連接回自己機(jī) 器上的顯示器,其架構(gòu)圖見圖7 - 1。
┌————————————————┐ │ │ │ P81 FIG 7.1 (???) │ │ │ │ │ │ │ │圖7 - 1 遠(yuǎn)方的 clIEnt顯示器對(duì) │ │ 本地 server架構(gòu)圖 │ └————————————————┘
7.2.1 一個(gè)易發(fā)生的錯(cuò)誤
如果你搞混了而一開始下了這樣的命令:
venus% xterm -display saturn:0.0 (不正確)
什麼事會(huì)發(fā)生?假如這命令被接受,xterm 在你本地的機(jī)器上執(zhí)行,而在遠(yuǎn)方 的機(jī)器saturn上建立視窗,你在你的螢?zāi)簧现荒芸吹絪hell 讀到的命令列,其 它什麼也沒有,系統(tǒng)是正確的工作,但不是你想要的。
如果你很幸運(yùn),你可能因不被允許或saturn上并沒有server在執(zhí)行,以致 無法和saturn上的server連接上,xterm 會(huì)傳回一個(gè)類似下列的訊息而結(jié)束:
X Toolkit Error: Can't open display.
如此你就知道有錯(cuò)了。
7.2.2 設(shè)定預(yù)設(shè)顯示器
如果你不明確地指定顯示器名稱,程式會(huì)以Unix環(huán)境變數(shù)DISPLAY 來決定 使用哪一個(gè)顯示器,在啟動(dòng)xterm 時(shí),系統(tǒng)會(huì)設(shè)定這個(gè)變數(shù)的內(nèi)容,所以大部 份情況下,你什麼都不必?fù)?dān)心。
如果你remote-login其它的機(jī)器,在其間你執(zhí)行X的應(yīng)用程式,并希望回 到你自己的機(jī)器上顯示,那你必需明確地設(shè)定DISPLAY 變數(shù),類似下面:
venus% rlogin saturn Last login: Mon Nov 28 20:01:02 on console ... (在遠(yuǎn)方機(jī)器上的login banner) saturn% (遠(yuǎn)方機(jī)器上的shell 提示) saturn% setenv DISPLAY venus:0.0 saturn% xcalc &
換句話說,如果不設(shè)定DISPLAY 變數(shù),則在saturn上執(zhí)行的每一個(gè)X程式都必 須包含 -display venus:0.0 選項(xiàng)。
7.3 控制存取你的顯示器 -- xhost
我們前面提到過有時(shí)你無法連接到特定的顯示器,通常的原因是你沒有被 許可,所以X否認(rèn)你的存取。
X用很簡單的結(jié)構(gòu)控制存取:你指定一份可以存取你的顯示器的主機(jī)(host) 名單,在這些主機(jī)上執(zhí)行的應(yīng)用程式均可存取你的顯示器,其它不在名單上的 主機(jī)則不被允許。你可以用xhost 程式來控制存取:
允許一或多個(gè)機(jī)器存取:
xhost + host1 [+host2...]
去掉允許一或多個(gè)機(jī)器存取:
xhost - host1 [-host2...]
所有的機(jī)器均被允許存取:
xhost +
換言之,所有的存取控制均被解除。
恢復(fù)存取控制:(通常因?yàn)樵?jīng)下了xhost + 的命令)
xhost -
再度取得對(duì)存取的控制,只有先前明確地被允許的機(jī)器可供存取。
注意:存取控制應(yīng)用於所有的處理 (process),而不只是針對(duì)其他使用者 所啟動(dòng)的處理,所以如果你透過遠(yuǎn)方的機(jī)器執(zhí)行應(yīng)用程式,而將顯 示內(nèi)容傳回自己的機(jī)器,則你必需被授與存取權(quán),否則會(huì)連接失敗。
7.4 總結(jié)
本章中,我們討論了如何指定X程式的顯示器,如何實(shí)際在網(wǎng)路上應(yīng)用, 如何允許或禁止網(wǎng)路使用你的顯示器。
現(xiàn)在,你已經(jīng)會(huì)使用網(wǎng)路,并且知道有一個(gè)視窗管理器會(huì)控制你的顯示器; 我們轉(zhuǎn)而討論xterm ,并看一看它所提供應(yīng)用程式介面的細(xì)節(jié)。
