歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> X windows系統使用指南(十)

X windows系統使用指南(十)

日期:2017/2/27 9:47:16   编辑:更多Linux
  第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得到階層的資訊:你可以看到這個視窗的父視窗的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 根視窗的性質表列 │ └—————————



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 根視窗的性質表列 │ └—————————



Copyright © Linux教程網 All Rights Reserved