国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

X Window 系統(tǒng)使用指南--實際的使用Resource

瀏覽:3日期:2024-02-02 15:08:25

第16章 實際的使用Resource 前一章解釋X resources的規(guī)則----為什麼需要它們,結(jié)構(gòu)如何工作和 resource規(guī)格的格式。本章中繼續(xù)討論resources ,但較強調(diào)實用性:我們告 訴你如何及何處設(shè)定resources 預(yù)設(shè)值,來影響你的系統(tǒng)的一部份或全部。在 本章結(jié)束前,我們將完成一些□例,點出你可能常見的錯誤,并告訴你如何克 服它們。

在這些□例中,我們假設(shè)你自己的工作站叫做venus ,并且大部份時間你 是使用它。從venus 的顯示器,你可在遠方的機器saturn和mars上執(zhí)行clIEnt 應(yīng)用程式且和venus 共享檔案系統(tǒng);neptune 則不可,我們曾在第4章描述過。

當你在本章中時,記得resource結(jié)構(gòu)是:傳遞資訊給應(yīng)用程式,通常這些 資訊是用來傳遞一些比較感興趣的預(yù)設(shè)值(例如色彩和字型),但只要應(yīng)用程 式取得協(xié)調(diào)你就能使用這種設(shè)施傳遞任何資訊。所以我們一般狀況下傾向於把 ”resource規(guī)格””預(yù)設(shè)值”(defaults)”resource”這三個名詞視為同一含 意。

16.1 在何處儲存resource的預(yù)設(shè)值

在上一章我們只告訴你輸入resource規(guī)格到”一個資料庫”,但未告訴你 如何做。事實上有幾個不同的地方可以儲存預(yù)設(shè)值:這些”地方”通常是一個 你可以用任何編輯器修改的簡單的文字檔案,但有一個特殊的位置需要特殊的 工具來設(shè)定它,我們先很快的給你一個概念,再討論細節(jié)部份。

首先它的架構(gòu)非常的復(fù)雜:包含命令列選項總共有八種設(shè)定resource方法, 但有兩個重點需要注意:

1 .你最好只使用其中的一或二種設(shè)置,只要你做完啟始設(shè)定,你將只 須改變預(yù)設(shè)的設(shè)定。

2 .系統(tǒng)是被設(shè)計來掌握許多不同模式的工作,和滿足那些在許多顯示器 上工作或在一臺顯示器上工作而存取遠方機器的使用者的。

總結(jié)來說,這些設(shè)置是提供來讓系統(tǒng)盡可能富於彈性,但任何時刻你將只 須存取其中的子集合而已。

16.1.1 設(shè)定Resource的八種方法

總共有八種方法設(shè)定resource,但它們可分為下面幾類:

.應(yīng)用程式專屬的(Application-specific)resource:resource的表列, 限定檔案只能被特定的應(yīng)用程式讀取。

.Server專屬的resource:應(yīng)用設(shè)定,不管應(yīng)用程式在那一種主機上執(zhí)行。

.主機專屬的設(shè)定(Host-specific-setting) :對應(yīng)用程式在主機上執(zhí)行 有關(guān)的設(shè)定,和顯示器無關(guān)。

.命令列選項:在執(zhí)行時期做一次關(guān)閉(one-off) 設(shè)定。

應(yīng)用程式專屬的resource -- 方法1 和方法2

Toolkit 程式初始時在和應(yīng)用程式直接相關(guān)的兩個檔案中尋找resource, 這些檔案只能被特定的應(yīng)用程式讀取:

1 .應(yīng)用程式--類別(Application-class) resource檔案:這個檔案包含 了機器一般性(site-wide) 對應(yīng)用程式的類別之預(yù)設(shè)值,通常為系統(tǒng) 管理者所設(shè)定。它的名稱就是應(yīng)用程式類別的名稱,在標準安裝的系 統(tǒng)中它是儲存在目錄/usr/lib/X11/app-defaults 中,例如xterm 的 相關(guān)檔案為:

/usr/lib/X11/app-defaults/XTerm

在core版中,有一個相關(guān)於Xmh 的此種檔案,觀察此檔案可以看所使 用之設(shè)定的型態(tài)。

2 .你自己擁有的應(yīng)用程式專屬的resource檔案:這個檔案的名稱和上述 相同,但它存放在不同的地方----由shell 變數(shù)$XAPPLRESDIR所指定 的目錄,如果未定義,則放在home目錄。例如對Xmh 類別的程式,它 的檔案放在下列二者之一:

$XAPPLRESDIR/Xmh $HOME/Xmh

你可以使用此種檔案,處理方法1 中你不喜歡的 site-wide檔案使其無 效。

Server專屬的Resource -- 方法3 和方法4

這是對你目前工作的Server(顯示器)做有關(guān)的設(shè)定。鍵盤的設(shè)定通常是 server專屬的(因為不同的顯示器有不同的鍵盤)。另一個server專屬的特徵 為顯示器是彩色或單色。

Resource和這些有關(guān)的項目會被所有與這個終端機相關(guān)的應(yīng)用程式應(yīng)用到, 并且不論應(yīng)用程式在何主機上執(zhí)行。(例如,如果你使用的顯示器為單色,則 不管你的應(yīng)用程式在何處執(zhí)行,你還是不會要它使用彩色。)

儲存server專屬設(shè)定的方法是:

3 .server的RESOURCE_MANAGER性質(zhì)(property):(你可在12章中xprop 的輸出看到),使用下述的xrdb程式,你可以在server的根視窗的 RESOURCE_MANAGER性質(zhì)中儲存resource設(shè)定。它的優(yōu)點如下:

(a) 你不需編輯任何檔案即可設(shè)定預(yù)設(shè)值。(當你為了了解系統(tǒng)而實 驗系統(tǒng)時特別有用)

(b) resource被server掌握,所以不論應(yīng)用程式在那一部主機上執(zhí)行, 均能被所有的應(yīng)用程式應(yīng)用。在我們的□例中,在neptune 的 情況下特別有用,甚至在不和我們的顯示機器venus 共享檔案系 統(tǒng)時,它仍然自動地選出為了使用此顯示器所必需的resource設(shè)定。

4 .你的$HOME/.Xdefaults檔案:(只有在根視窗沒有RESOURCE_MANAGER 性質(zhì)定義的情況下使用)。如果你對xrdb尚不熟悉,你便可以此檔取 代,但你必須在每一部你執(zhí)行client應(yīng)用程式的機器上均設(shè)定一個。

主機專屬設(shè)定 -- 方法5 和方法6

主機專屬預(yù)設(shè)值和server專屬相反,不管應(yīng)用程式所使用機器的終端機為 何,只要應(yīng)用程式在此主機上執(zhí)行,均使用主機專屬預(yù)設(shè)值,你可以用它們來:

.讓應(yīng)用程式在不同的機器上對不同的檔案系統(tǒng)作計算,例如:被一個應(yīng) 用程式讀取的資料檔案可能在不同的主機上保持不同的位置。

.區(qū)分顯示在同一個螢?zāi)簧喜煌闹鳈C的視窗(這些視窗可能由同一個應(yīng) 用程式執(zhí)行),例如:你可以要所有在mars機器上執(zhí)行的xterm 的視窗 為紅色的邊框,而在saturn上執(zhí)行的視窗為黃邊。

.調(diào)高一個相同的應(yīng)用程式在不同的client機器上版本的差異,例如: xterm 在venus 是標準的MIT 版,但在neptune 機器上是由第三集團修 改過以適應(yīng)機器結(jié)構(gòu)的產(chǎn)品,這兩版的xterm 可能并不完全相容。

主機專屬Resource儲存在:

5 .由$XENVIRONMENT 來的檔案名稱:如果shell 變數(shù)$ENVIRONMENT有被 定義,它會被解釋為一個含有resource設(shè)定的檔案之完整的路徑名稱。

6 .你的$HOME/.Xdefaults-thishost 檔案:(當$XENVIRONMENT 未被定 義時使用)。注意它和我們先前的檔案有所不同,它必須附加上主機 名稱,例如,如果你在neptune 執(zhí)行應(yīng)用程式而在venus 顯示(假設(shè) RESOURCE MANAGER性質(zhì)未定義),則server專屬 resource 讀取自:

.Xdefaults

而主機專屬resource則是:

.Xdefaults-neptune

兩者均在neptune 的家目錄(home Directory)中。

注意:在不同的小節(jié)中,我們曾說過類似”server專屬resource讀取自...” 這可能造成誤導(dǎo):”如果你實際需要,你可以放置任何型態(tài)的resource設(shè)定到 任何的檔案或資料庫。”我們真正的意思是你應(yīng)該放置機器特性或不論甚麼的 resource到任何地方,如果你這樣做,你將獲得你需要的動作。

命令列選項 -- 方法7 和方法8

最後,你可以藉著命令列選項設(shè)定應(yīng)用程式的值。通常當你設(shè)定預(yù)設(shè)值時 ,為的是你不需要使用選項為你的程式作X相關(guān)的設(shè)定。但你實際上可以用它 們來:

.一次關(guān)閉(one-off) ,例如:你暫時性地在螢?zāi)簧闲枰粋€極小的xedit。

.為了區(qū)別在相同應(yīng)用程式中各自的成員,你已看過一個這樣的例子,當 我們使用命令

xterm -name demo

來設(shè)定應(yīng)用程式的成員名稱給demo,將造成以應(yīng)用程式名稱為demo的 resource取代xterm 的resource。

命令列選項分為下列兩種:

7 .應(yīng)用程式專屬選項:例如xclock的-chime的xpr 或-scale。

8 .Toolkit 標準選項:所有用到Toolkit 的應(yīng)用程式均接受一些標準的 命令列選項,我們看過其中的大部份,包括-fg, -bg, -display, -geometry 等等,標準選項的清單在”X Toolkit Intrinsics ”手 冊的2.3 節(jié)中。

在其中有一個選項-xrm,重要的足以用一個小節(jié)來描述。

Toolkit 標準選項-xrm

大多數(shù)一般的resource均能被命令列選項明確地設(shè)定,例如你可以用 -bg colour設(shè)定視窗背景顏色。但無論如何,有一些resource并沒有符合的選 項。為了克服這點,Toolkit 提供一個 '捕捉遺漏' (catch all) 的選項-xrm (X Resource Manager 縮寫)。

-xrm以一個引數(shù)當做resource規(guī)格,就如同你在預(yù)設(shè)值檔案中輸入的相同, 例如:你可以輸入:

xclock -xrm '*update:30'

xclock -update 30

是相等的。

在同一命令列你可以使用數(shù)次-xrm,但每一次只能包含一個resource規(guī)格, 例如:

xclock -xrm '*update:30' -xrm '*chime:on'

-xrm的好處在於你可以用它來設(shè)定任何resource供應(yīng)用程式使用,尤其是 那些和命令列選項不符合的resource。其中一些非常有用的像:

iconX, iconY:視窗表徵圖左上角x,y 座標的位置。

iconPixmap:被用來當作視窗表徵圖的位元映像的名稱,你可以用它 來指定任何的位元映像當作應(yīng)用程式表徵圖。(位元映像 為已有或利用bitmap程式建立。)例如:命令

xedit -iconic -xrm '*IconPixmap:cntr_ptr' -xrm '*iconX:500' -xrm '*iconY:400'

的意義為將xedit 設(shè)定以表徵圖開始啟始,表徵圖的左上角 座標為(500,400) (在大多數(shù)的顯示器會在螢?zāi)恢醒耄? 用名為cntr_ptr的位元映像來當作表徵圖。

backgroundPixmap:設(shè)定用一個位元映像當作背景。

borderPixmap:設(shè)定以一個位元映像當作視窗的邊,例如:

xclock -bw 20 -xrm '*backgroundPixmap: scales' -xrm '*borderPixmap: cntr_ptr'

執(zhí)行xclock,用一個寬達20個像素的邊框,視窗的背景為魚鱗 (fish-scales) 圖案,邊框則用cntr_ptr的位元映像。

所有的這些resource當然也可用類別指定。(如IconX ,BorderPixmap等等。)

注意:請記住,-xrm只有在程式有用到Toolkit 才可應(yīng)用。

16.1.2 設(shè)定Resource不同方法的摘要

現(xiàn)在我們將如何對一個指定應(yīng)用程式resource設(shè)定的八種方法作一摘要:

應(yīng)用程式專屬resource:它們被兩個檔案掌握,且僅能被Toolkit 使用, 其中一個檔案通常由系統(tǒng)管理者設(shè)定,另一個由你自己設(shè)定。

server專屬的resource:不是存在根視窗的RESOURCE_MANAGER性質(zhì)中,便 是在你的$HOME/.Xdefaults檔案中。

主機專屬resource:如果shell 變數(shù)$XENVIRONMENT 有定義的話,存在其 所定義的檔案中,否則在你的$HOME/.Xdefaults-host 檔案。

一次關(guān)閉設(shè)定:用應(yīng)用程式的本身命令列選項來設(shè)定,和用Toolkit 標準 命令列選項,包含”捕捉遺漏”-xrm.

它們以下列順序處理:

if (程式使用Toolkit ) 讀取 /usr/lib/X11/app-defaults/class檔案 (1) 讀取你的 $HOME/class檔案 (2) if (RESOURCE_MANAGER性質(zhì)被定義) 處理內(nèi)含的指定 (3) else 讀取你的$HOME/.Xdefaults檔案 (4) if (shell 變數(shù)XENVIRONMENT被定義) 讀取所定義名稱的檔案 (5) else 讀取你的$HOME/.Xdefaults-host 檔案 (6) if (程式使用Toolkit ) 處理標準的resource選項,包含-xrm (7) 處理應(yīng)用程式本身的選項 (8)

現(xiàn)在我們將更詳細的看一個較不熟悉的方法 -- 用來儲存server本身 resource的方法。

16.2 在Server上儲存預(yù)設(shè)值 -- xrdb

大部份預(yù)設(shè)值的結(jié)構(gòu)均和檔案有關(guān),當應(yīng)用程式啟始時,不同的檔案被讀 取且其內(nèi)容被處理,這種方式的缺點為你希望所有的client在一個特定的 server上使用同一組的預(yù)設(shè)值,但client所執(zhí)行的機器上如果沒有一個共同的 檔案系統(tǒng),你該怎麼辦?

答案是在server本身儲存預(yù)設(shè)值。X的性質(zhì)設(shè)施是一個具有一般性目的的 結(jié)構(gòu)。(記住,一個”性質(zhì)(property)”是一小段已知格式資料的名稱,被儲 存在server),指定由server根視窗的RESOURCE_MANAGER性質(zhì)載入,且當應(yīng)用 程式啟始時系統(tǒng)會注意此事。當視窗系統(tǒng)啟始時,RESOURCE_MANAGER性質(zhì)未定 義:如果你要使用這個設(shè)施,你必須明確地設(shè)定它。

并沒有一個一般性的工具來操作一個性質(zhì),所以X提供了一個特殊的程式 來處理resource性質(zhì),它就是xrdb(the X Resource DataBase 公用程式)。

16.2.1 xrdb能為你做什麼

為了方便起見,本章剩馀的部份,我們只把RESOURCE_MANAGER性質(zhì)和它的 內(nèi)容當成”資料庫”。

xrdb的功能非常簡單,它讓你能:

.設(shè)定一個新的資料庫。

.看目前有那些resource在資料庫中。

.在現(xiàn)存的資料庫加入一個新的resource。

.完全去除資料庫。

這些是基本操作,且很容易完成。當然也有一些更進一步的功能可以很精 確地讓你控制resource,但我們先來討論基本操作。

16.2.2 使用xrdb的基本功能

xrdb的操作類似大多數(shù)Unix的程式:它從一個檔案或標準輸入讀取輸入資 料,并且你可以用命令列選項來控制它的操作模式,它所讀取的輸入是我們曾經(jīng)看 過的一系列resource設(shè)定,不過比較特別的是它把這些設(shè)定載入資料庫,讓我們看 一看它主要的功能:

設(shè)定一個新的資料庫:輸入下面命令兩者之一:

xrdb filename xrdb < filename

用以將一個檔案中的設(shè)定載入到一個資料庫中,如果只鍵入xrdb,表示你將由 標準輸入(通常為鍵盤)直接輸入設(shè)定,稍後我們將說明xrdb所接受的檔案格 式,但現(xiàn)在先把輸入resource設(shè)定當作和.Xdefaults檔案或-xrm引數(shù)相同的方 法,例如,你可以用下列的方式定義xclock設(shè)定:

venus% xrdb xclocks*Background: pink xclock*update: 30 xclock*backgroundPixmap: cntr_ptr <end-of-file>

通常你用一個檔案當作xrdb的輸入,也就是說,xrdb從一個檔案載入預(yù)設(shè) 值作為你的視窗系統(tǒng)初始化的一部份。如果你很有經(jīng)驗,直接輸入它的設(shè)定也 許容易些。

查看現(xiàn)存資料庫中的內(nèi)容,輸入命令:

xrdb -query

則xrdb將以明白本文格式(plain text format) 印出資料庫的內(nèi)容(-query可 以縮寫為 -q )。

(你可能記得也可以在根視窗用xprop 來看資料庫的內(nèi)容,但xprop 的輸 出格式不太靈巧,它給你其它一大堆你不需要的資訊。)

如果需要,你可以抓取xrdb的輸出到一個檔案,編輯它,更改設(shè)定後可再 用它當作xrdb的輸入。(下一項功能告訴你一個更好的方法)

注意:查看資料庫,你必須使用選項-query。如果你忽略這個選項而只輸 入xrdb,將造成會清除資料庫,且xrdb在等待你自標準輸入鍵入你 新的設(shè)定。

在現(xiàn)存資料庫加入新的設(shè)定:加入新的設(shè)定到資料庫且不要破壞原有的設(shè) 定,使用命令:

xrdb -merge filename

(-merge可縮寫為-m,如果你省略檔案名稱,xrdb會自標準輸入讀取。) xrdb自指定的檔案中讀取resource設(shè)定,并加入現(xiàn)存的資料庫中;對於資料庫 中已存在的resource,如果有新的設(shè)定,舊值會為新值取代,否則則不會變動。

完全移去資料庫:如同先前所述,當系統(tǒng)結(jié)束時資料庫會自動消失,但如 果你在系統(tǒng)仍在執(zhí)行時移去資料庫,使用命令:

xrdb -remove

本節(jié)介紹xrdb基本的功能,下一節(jié)我們介紹當你熟悉系統(tǒng)時,你可能需要 的更進一步的功能。

16.2.3 xrdb的檔案格式

你已知道大多數(shù)的格式細節(jié) -- 你可以用標準的resource規(guī)格的形式

characteristic: value

上述的格式你已看過多次,但xrdb有兩個額外的規(guī)則:

1 .注解(comments):每一行的開頭如果是驚嘆號(!)會被忽略,所以 你可以此當作注解。

2 .xrdb預(yù)設(shè)將它的輸入列傳到C 前處理器。

讓我們進一步看一看前處理器的過程。

xrdb前處理它的輸入列

讓我們看一看一個你可能碰到的典型問題。假設(shè)在一般的場景,你使用下 列顯示器:

venus 彩色螢?zāi)唬=馕龆? saturn 單色螢?zāi)唬=馕龆? mars 彩色螢?zāi)唬呓馕龆?

以上三者共享一個共同網(wǎng)路檔案系統(tǒng),當你在一個顯示器上啟動X,你需 要定義預(yù)設(shè)值來反應(yīng)顯示器的特徵。例如:在高解析度螢?zāi)荒憧赡苄枰^大的 預(yù)設(shè)字型,或是你不需要在單色系統(tǒng)上定義彩色預(yù)設(shè)值。

如何做呢?讓我們看一看,如果你能使用.Xdefaults-host 檔案:在 .Xdefaults-venus我們包含了彩色指定,而在.Xdefaults-saturn 我們只放入 單色型態(tài)的參數(shù)。行得通嗎?當然,但是是有限度的:它只能掌握應(yīng)用程式在 和server相同的機器上執(zhí)行,如果應(yīng)用程式在其它的機器上執(zhí)行會得到它們主 機上的預(yù)設(shè)檔案。所以如果你使用venus 且在saturn啟始遠方的client,將會 用到.Xdefault-saturn而錯失所有的彩色指定。

你能夠只使用.Xdefault 檔案來區(qū)分機器嗎?不能,因為三臺主機共享相 同的檔案系統(tǒng),所以$HOME/.Xdefaults會被venus 獲得也會被其它的機器獲得。

答案是在resource處理程序的某些地方,有一個結(jié)構(gòu)可以分辨出所使用 server的某些特徵。xrdb可以用相當簡單的辦法做到這點,它先定義一些說明 server特徵的C 前處理器符號,而後將它所有的輸入傳遞到前處理器,最後將 處理過的資料載入資料庫。指南頁列出所有的xrdb定義的前處理器的符號,但 在此處我們需要用到的是:

X_RESOLUTION=n:n是每公尺長螢?zāi)挥卸嗌傧袼亍#ǜ鶕?jù)我們的server,我 們正常解析度的螢?zāi)粸槊俊?0個像素,相當於每公尺3454個像素。)

COLOR :只有螢?zāi)恢г噬疟欢x。

WIDTH,HEIGHT:螢?zāi)坏膶挾群透叨龋瑔挝粸橄袼亍?

圖16-1顯示我們?nèi)绾卧趚rdb的輸入檔案使用這些。(我們命名為 $HOME/.Xresources ,稍後我們?nèi)詫⒃俣扔玫健#┧梢哉_地做到我們所想 要的 -- 它正確掌握了所有我們的顯示器,不論是彩色或高解析度或兩者都有。

一些要點值得注意:

┌—————————————————————┐ │ P197 FIG 16.1 │ │ │ │ 圖16-1 利用前處理器命令的Resource檔案 │ └—————————————————————┘

.你可以使用所有前處理器的功能。例如,我們使用它的表示掌握 (expression-handling) 能力:

#if X_RESOLUTION > 3600

.你可以在檔案中任何地方使用前處理器符號,并不只是前面有# 號的列, 例如,當

xload*Width: WIDTH

在venus 上xrdb執(zhí)行到時,它將會讀取成:

xload:Width: 1152

所以由預(yù)設(shè)值可知,xload 視窗寬度將和螢?zāi)粚挾认嗤邽?0個像素, 且在螢?zāi)坏恼戏健?

注意:大多數(shù)Unix前處理器定義了一些和它們機器結(jié)構(gòu)與作業(yè)系統(tǒng)相關(guān)的 符號,這些可能會干擾到你,特別是Unix通常定義的符號,現(xiàn)在 xrdb定義HOST為顯示器名稱中主機名稱的部份,所以你可能認為你 可以像這樣使用一個resource規(guī)格:

demo*title: X demo using display HOST

比方在venus 上,預(yù)期它相當於:

demo*title: X demo using display venus

事實上,在我們的機器上會得到

demo*title: X demo using display 1

原因為顯示器名稱是unix:0.0,所以主機名稱部份為unix,但前處 理器已定義了unix,所以整個解釋的順序為:

HOST -> unix -> 1

你可以用xrdb的-u選項來解除符號的定義,用以克服這點,也就是

xrdb -Unix < filename

但即使如此,主機名稱仍為unix,除非你明確地指定顯示器:

xrdb -display venus:0 < filename

另一個會產(chǎn)生干擾的□例,如何你輸入規(guī)格

xedit*Font: *-sun-screen-*

使用xrdb,現(xiàn)在用一個xrdb -query ,你可以看到在資料庫中實際 地設(shè)定:

xedit*Font: *-1-screen-*

在我們sun 的機器上,前處理器定義成另一個符號。如果你使用和你的機 器相關(guān)的名稱,你可能也會得到相同的效應(yīng)。(如果你決定不需要前處理器的 功能,你可以用xrdb的-nocpp選項停止它的功能。)

16.2.4 如何將資料庫設(shè)定和你的xrdb輸入檔連接在一起

藉著像前述在一個含有大量前處理器命令的檔案執(zhí)行xrdb,你初始化了資 料庫,在稍後的期間,交談式的使用xrdb,你將對資料庫做大量的更動,現(xiàn)在 你需要記錄這些設(shè)定,且將之與原來的輸入檔連接,以備將來之用。

如果你只使用xrdb -query ,你只能獲得目前的設(shè)定:所有在輸入檔中的 條件指令列若和現(xiàn)在的server不符則不會被包含。例如在saturn上執(zhí)行前述的 檔案,則所有色彩和高解析度的設(shè)定,均被忽略(當然以 #開頭的也不例外), 為了克服這點,xrdb提供-edit 選項,例如命令:

xrdb -edit myresf

連接目前在資料庫中的值到檔案myresf內(nèi)存在的內(nèi)容,它藉著比對resource指 定特徵值的部份做到這點:如果在檔案中某一行和資料庫中某一項特徵相同, 則檔案中值的部份會被在資料庫中的值取代,用此方法,所有的以 #開頭的列 和條件設(shè)定均會保留在檔案中。

注意:前處理器完全不可以使用-edit 選項,那會導(dǎo)致問題,我們看一 下當我們使用venus ,且以前述檔案初始化資料庫時,會發(fā)生什麼 情況,假設(shè)我們做了更動:

venus% xrdb -merge XTerm*font: *-courier-medium-r-*-140-* <end-of-file>

然後用命令:

xrdb -edit myresf

將設(shè)定更改的部份放回檔案,我們看到兩件事:

1 .前處理器符號在規(guī)格中值的部份會被字面(literal)值取代, 例如:

xload*Width: 1152 會被

xload*Width: WIDTH 取代

2 .在規(guī)格中只要特性符合,值均會被取代,甚至那些在條件段中 目前尚未應(yīng)用到的也不例外。例如,在前述檔案,設(shè)定 XTerm*font的那兩行(一行在高解析度那段,一行在正常顯示 器那段)都會被更改,即使我們只需要改變正常顯示器也不例 外。

16.3 一些常見的錯誤和如何修正它們

特別是當你對系統(tǒng)是新手的時候,resource看起來相當?shù)膹?fù)雜。當有些狀 況不能正常執(zhí)行,而系統(tǒng)無法幫助你查覺是什麼錯誤,或你在何處犯了錯誤, 這里列出一些常見錯誤的明細,并提出如何修正它們。

.如果你未設(shè)定一個應(yīng)用程式的名稱和類別,確定在你的resource規(guī)格之 前加一個星號,(如果你省略這個星號,將沒有任何東西會對應(yīng)這個規(guī) 格)這個錯誤在你使用-xrm時特別常見,例如:

xclock -xrm 'update:3' (錯誤) xclock -xrm '*update:3' (正確)

.并非所有的應(yīng)用程式均使用Toolkit ,非Toolkit 的程式不使用類別, 且它們的屬性名稱也可能不同。例如,規(guī)格

*geometry: 300*400+500+600

對xclock,xlogo 有效,但對xcalc 無效,因它不使用Toolkit ,xcalc 使用屬性名稱Geometry(開頭為大寫的G ),因為在這種情況,Toolkit 類別名稱和xcalc 的屬性名稱相同,所以單獨一個規(guī)格

*Geometry: 300*400+500+600

可以對所有這類的應(yīng)用程式有效。

.你可能在規(guī)格中用了錯誤的屬性或Widget的名稱,特別是容易把類別名 稱和成員名稱搞混,例如:以下兩者均錯:

xclock*Update: 10 xclock*interval: 10

其它常見的錯誤如:

xterm*Text*background:blue

它不能執(zhí)行的原因為xterm 并未使用Text widget ,xterm 正常的視窗 和Tektronix 的視窗分別使用widget類別 VT100和Tek 。最後,當你 知道一個widget是什麼類別,你可能對成員名稱假設(shè)錯誤,不是widget 本身便是其中之一的屬性。試著更換類別名稱來修正這個問題。

.即使你已設(shè)定實際的widget和屬性名稱或類別,應(yīng)用程式可能以不是你 預(yù)期的方式使用它們。例如:你可能設(shè)定如下:

xterm*Width: 40 xterm*Height: 10

意圖用比平常較小的視窗啟動xterm ,但它不能執(zhí)行,xterm 只能在 Tektronix window應(yīng)用這些值,無法在正常的視窗。

.你可能所有的設(shè)定完全正確,但仍然什麼也沒發(fā)生,例如:

xmh -xrm '*inc.Label: Include'

是一個正確的方式,執(zhí)行xmh 并指定label 為inc 盒的必須被'Include'。 但在標準系統(tǒng)的發(fā)行版,是沒有任何動作發(fā)生的,原因是xmh 有一個應(yīng) 用程式設(shè)定預(yù)設(shè)值檔案/usr/lib/X11/app-defaults/Xmh ,其中有一行:

xmh*inc.label:Incorporate New Mail

這個規(guī)格較我們的設(shè)定有較高優(yōu)先。

.將規(guī)格

*Width: 200

單獨包含在資料庫將導(dǎo)致大多數(shù)的Toolkit 程式啟始失敗,且有一個 訊息說它的'shell widget has zero height or width' 。如果你設(shè)定 height和width 二者之一,你必須也設(shè)定另外一個。

.如果你用編輯器建立一個resource檔案,你可能省略了最後一個new line 這將導(dǎo)致當你試圖用xrdb載入它時整個檔案均被忽略。為了避免如此, 當載入resource時,用一個命令列像:

xrdb resfile; xrdb -query

如果xrdb無法列印出resfile 中的內(nèi)容,就是有問題了。

.你可能忘了用-xrm選項的引數(shù)來獲得resource規(guī)格,有時有人會把 resource規(guī)格放入一個檔案,而以檔案名稱為-xrm的引數(shù),預(yù)期它自此 檔案中讀取resources。

.最後,一個非常人性的錯誤,當你發(fā)生問題,你通常會循環(huán)動作:編輯 resource檔案... 儲存它... 載入resource到資料庫... 執(zhí)行應(yīng)用程式 和看一看發(fā)生什麼狀況。”其中載入resource到資料庫”常常會被忽略 以致你更為困惑。

16.4 結(jié)論

本章中,你已看過了所有你能設(shè)定resource的地方,為何有這麼多種的方 法,如何決定設(shè)定放置在何處。你看到如何使用xrdb程式在server實際地儲存 預(yù)設(shè)值,它們在何處被server所有的client存取,甚至它們可以在遠方的機器 上執(zhí)行。最後,有一些關(guān)於常見錯誤的實際提示,告訴你什麼需要注意。

你現(xiàn)在處於實際使用resources ,和剪裁你的系統(tǒng)適合你的口味,resource 結(jié)構(gòu)功能非常強大且有無限的彈性,所以它可讓你定制任何你需要的事。剛開 始不妨試一些像字型或色彩之類簡單的設(shè)定,當你熟於基本的結(jié)構(gòu)時,再轉(zhuǎn)到 更高水準的例子。

下一章將告訴你如何使用特別形式的resource規(guī)格 -- Translations(轉(zhuǎn) 譯),來剪裁你的鍵盤以適於特別的應(yīng)用程式。

主站蜘蛛池模板: 金昌市| 简阳市| 新干县| 油尖旺区| 枞阳县| 莲花县| 应城市| 饶河县| 龙门县| 江门市| 景宁| 彰武县| 即墨市| 荣昌县| 黔江区| 扶沟县| 布拖县| 崇义县| 甘南县| 精河县| 凤冈县| 交口县| 德格县| 盱眙县| 姚安县| 宁海县| 类乌齐县| 富源县| 长阳| 和田县| 喀喇沁旗| 吉安市| 桃源县| 安化县| 常宁市| 常熟市| 集贤县| 巴青县| 安徽省| 大石桥市| 安泽县|