xprop
使用说明:
名字:
xprop- X的属性显示器
概要:
xprop [-help] [-grammar] [-id id] [-root] [-name name] [-frame] [-font font] [-display display] [-len n] [-notype] [-fs file] [-remove property-name] [-set property-name value] [-spy] [-version] [-f atom format [dformat]]* [format [dformat] atom]*
总结:
xprop实用程序用于在 X 服务器中显示窗口和字体属性。通过单击所需的窗口,使用命令行参数或可能在窗口的情况下选择一个窗口或字体。然后给出属性列表,可能带有格式化信息。
选项:
-help打印出命令行选项的摘要。
-grammar 打印出所有命令行选项的详细语法。
-id id
此参数允许用户在命令行上选择窗口ID,而不是使用指点器来选择目标窗口。这对于调试 X 应用程序非常有用,因为目标窗口未映射到屏幕,或者指头的使用可能无法或干扰应用程序。
-name name
此参数允许用户指定指定名称的窗口是命令行上的目标窗口,而不是使用指头来选择目标窗口。
-font font
此参数允许用户指定应显示字体的属性。
-root
此参数指定 X 的根窗口是目标窗口。这在根窗完全遮盖的情况下是有用的。
-display display
此参数允许您指定要连接到的服务器:参见X(7)。
-len n
指定任何属性最多n字节应读取或显示。
-notype
指定不应显示每个属性的类型。
-fs file
指定文件文件应用作属性更多格式的来源。
-frame
具体说明在手工选择窗口时(即,如果没有给出姓名、根或id),请查看窗口管理器框架(如果有),而不是查找客户端窗口。
-remove property-name
指定要从指示窗口中删除的属性的名称。
-set property-name value
指定属性的名称和属性值,设置在指示窗口上。
-spy
永远检查窗口属性,查找属性更改事件。
-version
打印程序版本信息并退出。
-f name format [dformat]
指定名称格式应为格式,名称格式应为格式。如果缺少 dformat,则假设"=$0\n"。
概述:
对于每个属性,其在选定的窗口或字体上的价值使用所提供的格式信息(如果有)打印。如果不提供格式化信息,则使用内部默认值。如果所选窗口或字体上未定义属性,则"未定义"打印为该属性的价值。如果没有提供属性列表,则打印所选窗口或字体拥有的所有属性。
窗口可以从四个方面进行选择。首先,如果所需的窗口是根窗口,则可以使用根参数。如果所需的窗口不是根窗口,则可以在命令行上以两种方式选择该窗口,或者通过 ID 编号(例如可能从xwininfo获取)或窗口是否拥有名称的名称进行选择。id 参数按十进制或十六进制中的 ID 编号选择窗口(必须从 0x 开头),而名称参数则按名称选择窗口。
选择窗口的最后一种方法根本不涉及命令行。如果未指定字体、id、名称和根,则显示十字线光标,允许用户通过按下所需窗口中的任何指点按钮来选择任何可见的窗口。如果需要显示字体的属性而不是窗口,则必须使用字体参数。
除了上述四个参数和获取帮助的帮助参数,以及列出命令行完整语法的语法参数外,所有其他命令行参数都用于指定要显示的属性的格式以及如何显示它们。-len n参数规定,任何给定属性的最多 n字节将被读取和显示。例如,在根窗上显示切割缓冲时,这很有用,如果完整显示,缓冲区可以运行到几页。
通常,每个属性名称通过先打印属性名称,然后在括号中显示其类型(如果有),然后在其值中显示。-非类型参数指定不应显示属性类型。-fs 参数用于指定包含属性格式列表的文件,而 -f 参数用于指定一个属性的格式。
属性的格式信息实际上包括两个部分,一个格式和一个格式。格式指定属性的实际格式(即由单词、字节或长文等组成),而dformat则指定了应如何显示属性。
以下段落描述了如何构建格式s 和dformats。但是,对于绝大多数用户和使用者来说,这不应该是必要的,因为内置的默认值包含显示所有标准属性所需的格式s 和dformat。如果正在处理新属性或用户不喜欢标准显示格式,则仅应指定格式s 和dformat。特别鼓励新用户跳过此部分。
格式由 0、8、16 或 32 个格式之一组成,然后是一个或多个格式字符的序列。0、8、16 或 32 指定了属性中每个字段的位数。零是一个特殊情况,意思是使用与属性本身相关的字段大小信息。(这仅需要特殊情况下,如类型 INTEGER,它实际上是三种不同的类型,具体取决于属性的字段大小。
值 8 表示属性是字节序列,而值为 16 表示属性是单词序列。这两者的区别在于,单词序列将被字节交换,而字节的序列不会由最初编写属性的机器的相反字节顺序的机器读取。有关如何格式化和存储属性的更多信息,请参阅 Xlib 手册。
一旦指定了字段的大小,就必须指定每个字段的类型(即它是整数、字符串、原子还是什么?这是使用每个字段的一个格式字符完成的。如果属性中的字段多于提供的格式字符,则对于额外字段,最后一个字符将重复尽可能多的次数。格式字符及其含义如下:
a | 该字段具有原子数。此类字段应为 32 大小。 |
b | 该字段是一个布尔。0表示错误,而其他任何内容均表示真实。 |
c | 字段是一个无符号数,基数。 |
i | 该字段是签名整数。 |
m | 该字段是一组位标志,1含义上。 |
o | 该字段是一系列图标,按 32 位数字的序列进行包装,包括宽度、高度和 ARGB 像素值,在扩展窗口管理器提示规范中为_NET_WM_ICON属性定义。此类字段必须为 32 大小。 |
s | 此字段和下一个字段,直到属性的 0 或结束表示字节序列。此格式字符仅可用于 8 的字段大小,并且最常用于表示字符串。 |
t | 此字段和下一个字段(直到属性为 0 或结束)表示国际化文本字符串。此格式字符仅可用,字段大小为 8。该字符串假设在符合 ICCCM 编码的情况下,并在输出前转换为当前的局域编码。 |
u | 此字段和下一个字段,直到属性的 0 或结束表示 UTF-8 编码的单码字符串。此格式字符仅可用,字段大小为 8。如果字符串被发现为无效字符,则打印编码违规的类型,然后使用"s"格式化字符。当在无法显示 UTF-8 编码字符串的环境中时,行为与"s"相同。 |
x | 该字段是一个十六角形数字(如"c",但显示在十六项-最有用的显示窗口ID等) |
示例格式为 32ica,该格式用于每个 32 位的三个字段的属性,第一个具有签名整数,第二个持有未签名整数,第三个为原子。
与格式不同的是,dformat的格式并不那么严格。dformat的唯一限制是,一个可能不以字母或破折号开头。这样,它就可以从属性名称或参数中区分。dformat是包含特殊字符的文本字符串,指示以类似于 printf 使用的格式字符串的方式在不同点打印不同字段。例如,dformat"是($0, $1 \)\n"将呈现点3,-4,其格式为32ii as"是(3,-4)\n"。
除$、?、\或(以dformat打印为本身)以外的任何字符。打印出$,?,\,或(在它前面)之一。例如,打印出$,使用\$。提供几个特殊的反斜线序列作为快捷方式。\n将导致显示新线,而\t将导致显示选项卡。\o其中o是一个八角形数字将显示字符编号o。
$后面跟着一个数字n导致显示字段编号n。显示字段的格式取决于用于以相应格式描述它的格式字符。即,如果基数由"c"描述,它将以十进制打印,而如果它是由"x"描述,则以十六进制显示。
如果该字段不存在于属性中(这在某些属性中是可能的),则无法显示 lt;字段。$n+将显示字段编号n然后逗号然后字段编号n+1然后另一个逗号然后...直到定义的最后一个字段。如果没有定义字段n,则不会显示任何内容。这对于值列表中的属性很有用。
?用于启动一个有条件的表达,一种如果-然后语句。?exp(文本)将显示文本,如果并且只有当exp评估为非零。这对两件事很有用。首先,它允许在设置标志时显示字段。其次,它允许将状态编号等值显示为名称,而不仅仅是一个数字。exp的语法如下:
Exp::= term | term=exp | !exp
Term::= n | $n | mn
这!操作员是一个合乎逻辑的"不",将0更改为1,将任何非零值更改为0。=是一个平等操作员。请注意,内部所有表达式都被评估为 32 位数字,因此 -1 不等于 65535=返回1,如果两个值是相等的,0(如果不是。n代表恒定值n,而$n代表字段编号n的价值。mn是1,如果标志编号n在第一个字段有格式字符'm'在相应的格式是1,否则0。
示例:?m3(count: $3\n)显示字段 3,并带有计数标签,如果并且仅当标志 3 (count starts at 0!) is on. ?$2=0(True)?!$2=0(False) 显示字段 2 作为布尔的倒置值。
为了显示属性,xprop需要格式和格式。在xprop使用其 32 倍格式的默认值和"==0+ \n"的 dformat之前,它会搜索几个位置,以尝试查找更具体的格式。首先,使用属性的名称进行搜索。如果失败,则使用属性的类型进行搜索。这允许用一组格式定义字符串类型,同时允许属性WM_NAME该属性字符串的类型以不同的格式进行定义。这样,特定属性的特定类型的显示格式可以被覆盖。
搜索的位置是有序的:格式,如果任何指定的属性名称(as in 8x WM_NAME),格式定义的-f选项在最后到第一个顺序,文件的内容指定的-fs选项,如果有的话,文件的内容指定的环境变量XPROPFORMATS如果有的话,最后xprop's内置在格式的文件。
-fs 参数和 XPROPFORMATS 变量所引用的文件的格式是以下表单的一行或多行:
name format [dformat]
如果名称是属性的名称或类型名称,格式是与名称一起使用的格式,而 dformat是与名称一起使用的格式。如果d格式不存在,假设 " = $0+\n"。
例子:
要显示根窗口的名称:xprop -root WM_NAME
要显示时钟的窗口管理器提示:xprop -name xclock WM_HINTS
要显示切割缓冲器的开头:xprop -root -len 100 CUT_BUFFER0
要显示固定字体的点大小:xprop -font fixed POINT_SIZE
要显示窗口的所有属性# 0x200007: xprop -id 0x200007
要设置一个简单的字符串属性:xprop -root -format MY_ATOM_NAME 8s -set MY_ATOM_NAME "my_value"
附录:
1. xprop是一个命令行工具,用于查询和设置X Window的Property.
一些用法举例:
xprop -root WM_NAME: 显示窗口名称
xprop -id 0x200007:列出指定窗口的全部Property
xprop -id 0x200007 -set WM_NAME "Win Title":设定窗口的名称
2.在linux调用xprop中有一个命令,它是一个用于在X服务器中显示窗口属性的实用程序。在Linux中xprop -root给你的根窗口属性和其他活动的程序。那么你可以使用这个命令获得活动窗口的ID:
xprop -root | grep _NET_ACTIVE_WINDOW\(WINDOW\)
拿到刚刚激活的窗口ID(没有“_NET_ACTIVE_WINDOW(窗口):窗口编号”在该行的开头)使用这个命令:
xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}'
现在您可以将此命令输出保存在用户定义的变量中:
myid=xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}'
xprop有一个属性call -id。该参数允许用户在命令行上选择窗口标识。我们应该在输出中寻找_NET_WM_PID(CARDINAL)...所以我们使用这个命令:
xprop -id $myid | awk '/_NET_WM_PID\(CARDINAL\)/{print $NF}'
这会给你最高的活动窗口进程ID。
做更多的事情,只用一个命令做所有事情......:
xprop -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}') | awk '/_NET_WM_PID\(CARDINAL\)/{print $NF}'
现在我可以使用popen函数通过C ++程序(在Linux中)运行这些命令,抓取标准输出并打印或保存。popen创建一个管道,以便我们可以读取我们正在调用的程序的输出。
(你也可以使用'/ proc'文件系统并获得PID的更多细节('/ proc / YOUR_PID / status'))
xprop是好久以前了解的内容了,下面是一些基础知识的总结,但是时间有些久了,做笔记的时候,没有标注哪部分是自己理解的,哪部分是看其他博客学习到的了,所以如果有博主发现是您的部分,请联系我,我会进行标注哒,或者侵删,谢谢~