歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> X Window 系統使用指南--12

X Window 系統使用指南--12

日期:2017/2/28 11:27:02   编辑:關於Unix


第12章 資訊與狀態程式
第參部 定制系統
第12章 資訊與狀態程式
在本章,我們將討論一些提供視窗系統本身資訊和目前狀態的程式。
這包括了檢查系統上視窗各種性質 (property) 的工具,和一個觀察X
事件結構是如何工作的程式。
這些程式有下列用途:
.當你使用系統時,這些工具程式所提供有關系統內部組織和操作的資訊,
可以幫助你了解發生了什麽事。
.當你要做某種處理時,可以藉著所給的資訊來確認系統的組件。(例如
你必須知道一個視窗的window-id,才可以用xwd 來傾印它。)
.你將經常把從這些工具獲得的資訊,當成定制系統工具程式的輸入(稍
後幾章會討論)。
12.1 列出你的Xserver的特徵 -- xdpyinfo
xdpyinfo列出有關你的Xserver和server所控制螢幕之各種項目的資訊,
一個典型的輸出見圖12-1(一個server在Sun 3/50單色工作站上執行的結果)。
┌———————————————————┐
│ p134 fig 12.1 │
│ │
│ 圖12-1 典型的xdpyinfo工具程式的輸出 │
└———————————————————┘
12.2 獲取有關視窗的資訊
有三個程式可以提供目前在你顯示器上視窗的資訊。它們是從不同的角度
看系統:
1. 列印視窗的階層 -- xlswins
2. 對單一視窗詳細的資訊 -- xwininfo
3. 列出視窗的性質 -- xprop
12.2.1 列印視窗的階層 -- xlswins
在第一部曾經提過,所有在系統上的視窗被安排成樹狀的階層,根視窗
(也叫背景(background)視窗)在最上層,在其下才是應用視窗,每一個應用
視窗可以擁有它自己的子視窗階層。
xlswins 列印出這個樹狀結構,從根視窗或所指定的視窗起至其下所有的
樹狀結構,對每一個視窗,xlswins 列出視窗的window-id 並用括弧括住它的
名稱(如果有的話),子視窗則在下面的幾行依序以縮入(indent)兩格的方式
列出。下面的圖對xman應用程式列出三個不同子樹的輸出,藉以展示xlswins
如何剖析系統的結構。
圖12-2a 是xman主選單的樹。你可以看到在應用視窗(0X600011)中含有另一
個視窗(0X600012),而(0X600012)又包含了四個視窗,不需要知道原始程式,
你也可以猜得到是一種視窗包含著視窗,而對子視窗做某種管理的情況。
圖12-2b 是xman手冊頁(manpage) 視窗的樹。比上一個例子復雜一些,而且
也無法在確定是否在這一頁手冊頁中總共就只有這麽多視窗和子視窗。所以 ...
圖12-2c 這是xlswins 更詳細的輸出,比上一個例子需要在命令列中多加
一個 -l 的選項,多出來的訊息為巢狀的深度(第幾層樹)、相對於父視窗的
幾何座標和大小、和視窗左上角距離根視窗的座標(也就是螢幕上的絕對座標)
,有了這些視窗的座標,你就能了解它們在螢幕上的位置,如果你還是搞不太
清楚,可以執行xwd ,指定xlswins 所輸出的window-id ,在本圖,我們發覺
視窗(0X60005d)是高而窄的,所以可能是一個卷動棒。我們可以試著用命令:
xwd -id 0x60005d | xwud
結果的確 xman 卷動棒的圖形出現了,這個命令我們在9.2.1 節有提過(只不
過這一次我們不把輸出送到檔案,而利用導管 (pipe) 的技巧直接當成另一程
式的輸入。)你可以用這種方法分析任何視窗。
┌——————————————————┐
│ p136 fig 12.2 │
│ │
│ 圖12-2 三個xlswins 的輸出 │
└——————————————————┘
注意:並非所有的視窗都可列印出資訊,如果你碰到這種無資訊可供列印視窗
,你將獲得類似下面的訊息:
x Protocol error: BadMatch, invalid parameter
attributes
Major opcode of failed request: 73 (X_GetImage)
為了篇幅的關系,我們只列出了完整xlswins 輸出的三個小部份。如果在
你自己已經有好幾個應用程式的系統上,你將可以看到uwm 和xterm 選單所相
關的子樹,或者是與 xmh和 xedit 的命令按鈕相關的子樹。
12.2.2 關於單一視窗的詳細資訊 -- xwininfo
xwininfo能夠針對特定的視窗給你大量的資訊,你可以藉著命令列的選項
告訴xwininfo你要哪一部份的資訊。圖12-3包含完整的列印輸出(用選項-all)
┌——————————————————┐
│ p138 fig 12.3 │
│ │
│ 圖12-3 典型的xwininfo輸出 │
└——————————————————┘
你可以用和xwd 相同的方法來指定你感興趣的視窗:
.交談式(預設):開始時,xwininfo給你一個十字線游標,你可以將
它移到你所需的視窗再碰觸滑鼠按鈕。
.使用命令列選項:你可以用選項-root 指定根視窗,或用選項-id
window-id 指定其它的視窗。
你所看到的資訊可分為以下幾類:
視窗的window-id :window-id 是視窗系統識別每一個視窗的參考,就如
同先前所看到的,幾個程式(包含xwininfo它本身)給你一個數字代
表window-id 。例如你要傾印一個視窗,你可以先執行xwininfo得到
它的window-id,然後將此window-id 做為xwd 的id選項之引數。
階層的資訊:你可以看到這個視窗的父視窗的id,幾個子視窗的id,以及
根視窗的id,在xlswins 中可得到相同的資訊,但在這裡只能得到最
近一層子視窗的id,並非整個子樹。
幾何細節:視窗的大小和位置,以及它的四個角的位置。
和server有關的重建構參數:像”gravity ”和”backing store ”這
些狀態(state) ,當視窗改變大小或從被遮蓋的狀態下重新顯
露出來時,server需要用到這些參數,這些參數你自己不會用到,
但可藉它了解系統如何運作。
事件參數:這些參數也是給server而非給使用者用的。
視窗管理器資訊:在系統概觀中,我們曾經提過應用程式藉著給視窗管理
器一些提示”hints ”來達成通訊(這些提示包括應用程式所希望視
窗的大小,以及重定大小時的限制等。),xwininfo在這個部份的輸
出便是告訴你這些”提示”的資料。Program supplied location 為
應用程式建議它自己應該擺哪裡。如果你曾給過位置,不論是在命令
列或resource file ,都會在 User supplied location 出現,在視
窗大小方面同理可推,resize increments 解釋了為什麽有些視窗(
例如xterm 和xfd )不能把大小定為任意數目的像素,因為應用程式
已經告訴了視窗管理器在重定大小時按多少個像素的倍數放大或縮小
(xterm 和xfd 它們的大小和所使用的字型有關),你也可以由這個
參數知道目前視窗的位置,所以稍後你可以在同一位置上重建它。
12.2.3 列出視窗的性質 -- xprop
如同我們在系統概觀所提及的,一個”性質”(property)是指一小段有關
視窗的資料,xprop 讓你列出一個特定視窗的所有”性質”,你也可以列印
一個字型的性質。
  你可以經由常用的方式來選擇視窗(碰觸滑鼠按鈕或使用-root 或-id 選項)
,如果是指定字型,則用選項-font fontname。
顯示出來的格式為:對每一個性質,均有一個性質名稱,在其後用小括弧
括住的為性質的型態或格式,最後則為性質的值。大部份你所看到的性質型態
為STRING,性質的值用” ”括起來,其它的性質型態的格式是專屬的,從
性質的值很容易了解它的意義,對字型顯示的格式稍有不同,它沒有性質型態,
但性質的值意義也很明顯。
注意:xprop 的輸出相當的復雜,我們並不需要了解其所有的內容,端視需要而
定。
以下讓我們看看從應用視窗、根視窗、字型所獲得不同的輸出:
應用視窗的性質
圖12-4為xprop 對一個應用視窗的輸出,有些資訊你已經在xwininfo中看
到過,在此處你可以在名為WM_NORMAL_HINTS 和WM_HINTS的性質中看到。
┌——————————————————┐
│ p140 fig 12.4 │
│ │
│ 圖12-4 一個應用視窗的性質表列 │
└——————————————————┘
其它的性質如下:
WM_COMMAND:執行啟動這個應用程式的命令列,被切成一個個用雙引號括起來的
      單字。
WM_CLIENT_MACHINE :執行這個client應用程式的機器名稱(這個例子應用程
式和server在同一部機器上執行,所以機器名稱為venus 。)。
WM_CLASS:顯示應用程式的instant name和class name,instant name是命令
列中-name 選項的值。
WM_ICON_NAME:應用程式的表徵圖所要顯示出來的名稱(你的視窗管理器必須
能夠支援方可)。
WM_NAME :很奇怪的,這不是應用程式的名稱,而是由-title選項指定的視窗
標題名稱,有些視窗管理器會把標題名稱顯示在應用視窗的標題
棒上。
注意:上述命令列中-name 和-title兩個選項使用得很廣,但它並非通用
(universal) 的選項,應用程式在撰寫時必需要使用到X Toolkit(工
具箱)才能把這兩個選項當成標准選項來用。(參見第15章)
根視窗的性質
圖12-5是xprop 對根視窗的輸出,顯而易見的是,它不會含有任何視窗管
理器的性質,因為視窗管理器絕不可能重新建構根視窗。
┌——————————————————┐
│ p141 fig 12.5 │
│ │
│ 圖12-5 根視窗的性質表列 │
└——————————————————┘
有趣的選項如下:
RESOURCE_MANAGER:這個根視窗性質是resource結構的輸入源之一,我們將在
第11章詳細地討論它。
幾個CUT_BUFFER:當你切取一段本文(做剪貼動作常用),這段被切取的本文
被放在一個切取緩沖器(cut buffer)中,這些緩沖器被當作是根
視窗的性質來儲存,對於切取,緩沖器是循環使用的,例如上次
用5 號緩沖器,則下次用6 號,接下來7 號、0 號、1 號等等,
但是黏貼則一定使用上次切取動作所用的緩沖器。
字型性質
圖12-6列出當我們指定*times*bold*-i-*-180-*的字型性質,大部份的資
訊我們都不需關心,你可能只對FULL_NAME 和POINT_SIZE有興趣。
┌——————————————————┐
│ p142 fig 12.6 │
│ │
│ 圖12-6 字型的性質表列 │
└——————————————————┘
12.3 觀察X的事件 -- xev
”事件”或多或少驅動著整個視窗系統,所有的輸入,不論是滑鼠或鍵盤,
均由”事件”來掌握,”事件”也被用來驅動視窗的重新建構和展現。xev 程
式讓你看到當不同的動作發生時,會產生什麽”事件”,以及和”事件”有關
的資訊。
當xev 啟動,它會建一個類似圖12-7的視窗,而在這視窗中,會開始列出
類似圖12-8的有關事件的細節部份。
┌——————————————————┐
│ p143 fig 12.7 │
│ │
│ 圖12-7 xev 視窗 │
└——————————————————┘
┌——————————————————┐
│ p143 fig 12.8 │
│ │
│ 圖12-8 xev 的輸出 │
└——————————————————┘
由於 xev提供大量的系統內部操作細節,你如果想要”實驗”系統,這是一個
很有用的程式,有兩個說明手冊上未提到的選項可以影響到xev 的行為:
-bs option:此選項改變xev 對server是否使用backing store (見第2章),
使用backing store 將減少曝光”事件”的次數(也就是減少應
      用程式重新更新它自己視窗的次數),正確的選項內容為always,
      whenmapped和notuseful 。
-s:使用save-unders (見第2章),也就是說,要求server保存那些被xev
的視窗遮蓋之視窗的內容。
12.3.1 xev 和鍵盤
如果你將指標移入xev 視窗且按下你的鍵盤上的某一個鍵,則一個(或多
個)鍵盤”事件”會發生,”事件”的資訊包含了keycode 和keysym,這是最
容易觀察你的機器上某一個鍵是什麽鍵碼(keycode) 的方法:執行xev ,按一
個鍵,xev 便會給你資訊,這對定制你的鍵盤非常有用,見18章。
12.4 結論
本章所述的這些程式,讓你觀察系統的內部;獲得它的操作細節;和它的
視窗及其它成員特定的資訊.對這些程式本身而言,它們能幫助你了解系統,
但它們最大的用途可能是用來連接那些定制系統的程式。以下的幾章在說明如
何定制和設定你的系統,好讓系統更適合你工作的習慣。
下一章討論處理字型和顏色,及如何使用它們。
Copyright © Linux教程網 All Rights Reserved