第12章资讯与状态程式
第参部定制系统
源代码网整理以下第12章资讯与状态程式
源代码网整理以下在本章,我们将讨论一些提供视窗系统本身资讯和目前状态的程式。
这包括了检查系统上视窗各种性质(property)的工具,和一个观察X
事件结构是如何工作的程式。
源代码网整理以下这些程式有下列用途:
源代码网整理以下.当你使用系统时,这些工具程式所提供有关系统内部组织和操作的资讯,
可以帮助你了解发生了什麽事。
源代码网整理以下.当你要做某种处理时,可以藉著所给的资讯来确认系统的组件。(例如
你必须知道一个视窗的window-id,才可以用xwd来倾印它。)
源代码网整理以下.你将经常把从这些工具获得的资讯,当成定制系统工具程式的输入(稍
後几章会讨论)。
源代码网整理以下
12.1列出你的Xserver的特徵--xdpyinfo
源代码网整理以下xdpyinfo列出有关你的Xserver和server所控制萤幕之各种项目的资讯,
一个典型的输出见图12-1(一个server在Sun3/50单色工作站上执行的结果)。
源代码网整理以下┌———————————————————┐
│p134fig12.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-id0x60005d|xwud
源代码网整理以下结果的确xman卷动棒的图形出现了,这个命令我们在9.2.1节有提过(只不
过这一次我们不把输出送到档案,而利用导管(pipe)的技巧直接当成另一程
式的输入。)你可以用这种方法分析任何视窗。
源代码网整理以下┌——————————————————┐
│p136fig12.2│
││
│图12-2三个xlswins的输出│
└——————————————————┘
源代码网整理以下注意:并非所有的视窗都可列印出资讯,如果你碰到这种无资讯可供列印视窗
,你将获得类似下面的讯息:
源代码网整理以下xProtocolerror:BadMatch,invalidparameter
attributes
Majoropcodeoffailedrequest:73(X_GetImage)
源代码网整理以下为了篇幅的关系,我们只列出了完整xlswins输出的三个小部份。如果在
你自己已经有好几个应用程式的系统上,你将可以看到uwm和xterm选单所相
关的子树,或者是与xmh和xedit的命令按钮相关的子树。
源代码网整理以下
12.2.2关於单一视窗的详细资讯--xwininfo
源代码网整理以下xwininfo能够针对特定的视窗给你大量的资讯,你可以藉著命令列的选项
告诉xwininfo你要哪一部份的资讯。图12-3包含完整的列印输出(用选项-all)
源代码网整理以下┌——————————————————┐
│p138fig12.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”和”backingstore”这
些状态(state),当视窗改变大小或从被遮盖的状态下重新显
露出来时,server需要用到这些参数,这些参数你自己不会用到,
但可藉它了解系统如何运作。
源代码网整理以下事件参数:这些参数也是给server而非给使用者用的。
源代码网整理以下视窗管理器资讯:在系统概观中,我们曾经提过应用程式藉著给视窗管理
器一些提示”hints”来达成通讯(这些提示包括应用程式所希望视
窗的大小,以及重定大小时的限制等。),xwininfo在这个部份的输
出便是告诉你这些”提示”的资料。Programsuppliedlocation为
应用程式建议它自己应该摆哪里。如果你曾给过位置,不论是在命令
列或resourcefile,都会在Usersuppliedlocation出现,在视
窗大小方面同理可推,resizeincrements解释了为什麽有些视窗(
例如xterm和xfd)不能把大小定为任意数目的像素,因为应用程式
已经告诉了视窗管理器在重定大小时按多少个像素的倍数放大或缩小
(xterm和xfd它们的大小和所使用的字型有关),你也可以由这个
参数知道目前视窗的位置,所以稍後你可以在同一位置上重建它。
源代码网整理以下
12.2.3列出视窗的性质--xprop
源代码网整理以下如同我们在系统概观所提及的,一个”性质”(property)是指一小段有关
视窗的资料,xprop让你列出一个特定视窗的所有”性质”,你也可以列印
一个字型的性质。
源代码网整理以下 你可以经由常用的方式来选择视窗(碰触滑鼠按钮或使用-root或-id选项)
,如果是指定字型,则用选项-fontfontname。
源代码网整理以下显示出来的格式为:对每一个性质,均有一个性质名称,在其後用小括弧
括住的为性质的型态或格式,最後则为性质的值。大部份你所看到的性质型态
为STRING,性质的值用” ”括起来,其它的性质型态的格式是专属的,从
性质的值很容易了解它的意义,对字型显示的格式稍有不同,它没有性质型态,
但性质的值意义也很明显。
源代码网整理以下注意:xprop的输出相当的复杂,我们并不需要了解其所有的内容,端视需要而
定。
源代码网整理以下以下让我们看看从应用视窗、根视窗、字型所获得不同的输出:
源代码网整理以下应用视窗的性质
源代码网整理以下图12-4为xprop对一个应用视窗的输出,有些资讯你已经在xwininfo中看
到过,在此处你可以在名为WM_NORMAL_HINTS和WM_HINTS的性质中看到。
源代码网整理以下┌——————————————————┐
│p140fig12.4│
││
│图12-4一个应用视窗的性质表列│
└——————————————————┘
源代码网整理以下其它的性质如下:
源代码网整理以下WM_COMMAND:执行启动这个应用程式的命令列,被切成一个个用双引号括起来的
单字。
源代码网供稿.