第16章 實際的使用Resource
前一章解釋X resources的規則----為什麽需要它們,結構如何工作和
resource規格的格式。本章中繼續討論resources ,但較強調實用性:我們告
訴你如何及何處設定resources 預設值,來影響你的系統的一部份或全部。在
本章結束前,我們將完成一些范例,點出你可能常見的錯誤,並告訴你如何克
服它們。
在這些范例中,我們假設你自己的工作站叫做venus ,並且大部份時間你
是使用它。從venus 的顯示器,你可在遠方的機器saturn和mars上執行client
應用程式且和venus 共享檔案系統;neptune 則不可,我們曾在第4章描述過。
當你在本章中時,記得resource結構是:傳遞資訊給應用程式,通常這些
資訊是用來傳遞一些比較感興趣的預設值(例如色彩和字型),但只要應用程
式取得協調你就能使用這種設施傳遞任何資訊。所以我們一般狀況下傾向於把
”resource規格””預設值”(defaults)”resource”這三個名詞視為同一含
意。
16.1 在何處儲存resource的預設值
在上一章我們只告訴你輸入resource規格到”一個資料庫”,但未告訴你
如何做。事實上有幾個不同的地方可以儲存預設值:這些”地方”通常是一個
你可以用任何編輯器修改的簡單的文字檔案,但有一個特殊的位置需要特殊的
工具來設定它,我們先很快的給你一個概念,再討論細節部份。
首先它的架構非常的復雜:包含命令列選項總共有八種設定resource方法,
但有兩個重點需要注意:
1 .你最好只使用其中的一或二種設置,只要你做完啟始設定,你將只
須改變預設的設定。
2 .系統是被設計來掌握許多不同模式的工作,和滿足那些在許多顯示器
上工作或在一台顯示器上工作而存取遠方機器的使用者的。
總結來說,這些設置是提供來讓系統盡可能富於彈性,但任何時刻你將只
須存取其中的子集合而已。
16.1.1 設定Resource的八種方法
總共有八種方法設定resource,但它們可分為下面幾類:
.應用程式專屬的(Application-specific)resource:resource的表列,
限定檔案只能被特定的應用程式讀取。
.Server專屬的resource:應用設定,不管應用程式在那一種主機上執行。
.主機專屬的設定(Host-specific-setting) :對應用程式在主機上執行
有關的設定,和顯示器無關。
.命令列選項:在執行時期做一次關閉(one-off) 設定。
應用程式專屬的resource -- 方法1 和方法2
Toolkit 程式初始時在和應用程式直接相關的兩個檔案中尋找resource,
這些檔案只能被特定的應用程式讀取:
1 .應用程式--類別(Application-class) resource檔案:這個檔案包含
了機器一般性(site-wide) 對應用程式的類別之預設值,通常為系統
管理者所設定。它的名稱就是應用程式類別的名稱,在標准安裝的系
統中它是儲存在目錄/usr/lib/X11/app-defaults 中,例如xterm 的
相關檔案為:
/usr/lib/X11/app-defaults/XTerm
在core版中,有一個相關於Xmh 的此種檔案,觀察此檔案可以看所使
用之設定的型態。
2 .你自己擁有的應用程式專屬的resource檔案:這個檔案的名稱和上述
相同,但它存放在不同的地方----由shell 變數$XAPPLRESDIR所指定
的目錄,如果未定義,則放在home目錄。例如對Xmh 類別的程式,它
的檔案放在下列二者之一:
$XAPPLRESDIR/Xmh
$HOME/Xmh
你可以使用此種檔案,處理方法1 中你不喜歡的 site-wide檔案使其無
效。
Server專屬的Resource -- 方法3 和方法4
這是對你目前工作的Server(顯示器)做有關的設定。鍵盤的設定通常是
server專屬的(因為不同的顯示器有不同的鍵盤)。另一個server專屬的特徵
為顯示器是彩色或單色。
Resource和這些有關的項目會被所有與這個終端機相關的應用程式應用到,
並且不論應用程式在何主機上執行。(例如,如果你使用的顯示器為單色,則
不管你的應用程式在何處執行,你還是不會要它使用彩色。)
儲存server專屬設定的方法是:
3 .server的RESOURCE_MANAGER性質(property):(你可在12章中XProp
的輸出看到),使用下述的xrdb程式,你可以在server的根視窗的
RESOURCE_MANAGER性質中儲存resource設定。它的優點如下:
(a) 你不需編輯任何檔案即可設定預設值。(當你為了了解系統而實
驗系統時特別有用)
(b) resource被server掌握,所以不論應用程式在那一部主機上執行,
均能被所有的應用程式應用。在我們的范例中,在neptune 的
情況下特別有用,甚至在不和我們的顯示機器venus 共享檔案系
統時,它仍然自動地選出為了使用此顯示器所必需的resource設定。
4 .你的$HOME/.Xdefaults檔案:(只有在根視窗沒有RESOURCE_MANAGER
性質定義的情況下使用)。如果你對xrdb尚不熟悉,你便可以此檔取
代,但你必須在每一部你執行client應用程式的機器上均設定一個。
主機專屬設定 -- 方法5 和方法6
主機專屬預設值和server專屬相反,不管應用程式所使用機器的終端機為
何,只要應用程式在此主機上執行,均使用主機專屬預設值,你可以用它們來:
.讓應用程式在不同的機器上對不同的檔案系統作計算,例如:被一個應
用程式讀取的資料檔案可能在不同的主機上保持不同的位置。
.區分顯示在同一個螢幕上不同的主機的視窗(這些視窗可能由同一個應
用程式執行),例如:你可以要所有在mars機器上執行的xterm 的視窗
為紅色的邊框,而在saturn上執行的視窗為黃邊。
.調高一個相同的應用程式在不同的client機器上版本的差異,例如:
xterm 在venus 是標准的M99v 版,但在neptune 機器上是由第三集團修
改過以適應機器結構的產品,這兩版的xterm 可能並不完全相容。
主機專屬Resource儲存在:
5 .由$XENVIRONMENT 來的檔案名稱:如果shell 變數$ENVIRONMENT有被
定義,它會被解釋為一個含有resource設定的檔案之完整的路徑名稱。
6 .你的$HOME/.Xdefaults-thishost 檔案:(當$XENVIRONMENT 未被定
義時使用)。注意它和我們先前的檔案有所不同,它必須附加上主機
名稱,例如,如果你在neptune 執行應用程式而在venus 顯示(假設
RESOURCE MANAGER性質未定義),則server專屬 resource 讀取自:
.Xdefaults
而主機專屬resource則是:
.Xdefaults-neptune
兩者均在neptune 的家目錄(home Directory)中。
注意:在不同的小節中,我們曾說過類似”server專屬resource讀取自...”
這可能造成誤導:”如果你實際需要,你可以放置任何型態的resource設定到
任何的檔案或資料庫。”我們真正的意思是你應該放置機器特性或不論甚麽的
resource到任何地方,如果你這樣做,你將獲得你需要的動作。
命令列選項 -- 方法7 和方法8
最後,你可以藉著命令列選項設定應用程式的值。通常當你設定預設值時
,為的是你不需要使用選項為你的程式作X相關的設定。但你實際上可以用它
們來:
.一次關閉(one-off) ,例如:你暫時性地在螢幕上需要一個極小的xedit。
.為了區別在相同應用程式中各自的成員,你已看過一個這樣的例子,當
我們使用命令
xterm -name demo
來設定應用程式的成員名稱給demo,將造成以應用程式名稱為demo的
resource取代xterm 的resource。
命令列選項分為下列兩種:
7 .應用程式專屬選項:例如xclock的-chime的xpr 或-scale。
8 .Toolkit 標准選項:所有用到Toolkit 的應用程式均接受一些標准的
命令列選項,我們看過其中的大部份,包括-fg, -bg, -display,
-geometry 等等,標准選項的清單在”X Toolkit Intrinsics ”手
冊的2.3 節中。
在其中有一個選項-xrm,重要的足以用一個小節來描述。
Toolkit 標准選項-xrm
大多數一般的resource均能被命令列選項明確地設定,例如你可以用
-bg colour設定視窗背景顏色。但無論如何,有一些resource並沒有符合的選
項。為了克服這點,Toolkit 提供一個 "捕捉遺漏" (catch all) 的選項-xrm
(X Resource Manager 縮寫)。
-xrm以一個引數當做resource規格,就如同你在預設值檔案中輸入的相同,
例如:你可以輸入:
xclock -xrm "*update:30"
和
xclock -update 30
是相等的。
在同一命令列你可以使用數次-xrm,但每一次只能包含一個resource規格,
例如:
x
xclock -xrm "*update:30"
和
xclock -update 30
是相等的。
在同一命令列你可以使用數次-xrm,但每一次只能包含一個resource規格,
例如:
x