wmctrl有哪些替代方案?

时间:2010-11-24 22:41:51

标签: linux x11

你知道wmctrl的其他选择吗?一个程序,允许您从命令行操作窗口和窗口管理。

wmctrl的一个缺点是,虽然你可以操作当前窗口,但是你不能让wmctrl列出关于当前窗口的信息(它忽略了-r)。

6 个答案:

答案 0 :(得分:11)

要查找当前活动窗口的ID,请使用:

xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"

使用此ID,您可以获得有关当前活动窗口的大量信息:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")

从那里,你可以grep得到你需要的东西,或者让它显示所需的字段,就像我在上面提取_NET_ACTIVE_WINDOW一样。因此,要查找当前活动窗口的PID,您可以将-f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID附加到上面的命令中,使其成为:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID | awk "{print \$2}"

请注意,wmctrl也会在-i标记的同时接受相同类型的ID。

答案 1 :(得分:9)

您可以通过打开详细模式并告诉它使用无效参数移动活动窗口来欺骗wmctrl输出活动窗口的ID号:

wmctrl -v -r :ACTIVE: -e dummy

以错误状态退出时,它还会输出活动窗口的ID号:

envir_utf8: 1
Using window: 0x08400004
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"

获得活动窗口的ID号后,您可以列出所有窗口并搜索该ID号:

 wmctrl -l

使用wmctrl获取有关活动窗口的信息很尴尬,但这是可能的。

答案 2 :(得分:2)

xdotool是一个合理的替代方案(github project here),但不幸的是the author doesn't seem to care about it much any more

答案 3 :(得分:1)

我在RH Linux 5.5和5.6 64位下使用wmctrl版本1.07的经验就是这样 wmctrl有时会完全丢失。例如,在寻找firefox窗口时 以下内容均未返回:

% wmctrl -lpGx | grep -i 'Firefox'

我怀疑wmcntl由于窗口管理器的性质而无法找到firefox窗口,在这种情况下,是metacity。这个管理器似乎重新显示窗口,也许这会导致wmctrl不列出firefox窗口。 ' xwininfo'列出firefox窗口。

如果您有权访问xdotool(我的版本是2.20110530.1),那么您可以尝试:

% mywin=`xwininfo -root -tree | awk '/- Mozilla Firefox/ { printf $1; exit}'`
% xdotool windowactivate --sync $mywin mousemove --window $mywin 0 0

这使得firefox处于活动状态,使其成为桌面上堆栈中的顶层窗口,并将鼠标置于其上(当用户的环境将焦点设置到鼠标下的窗口时有时需要,而不需要点击。)如果你不想简单地移动鼠标 删除' mousemove --window $ mywin 0 0'从上面。

注意:在同一Linux系统上找到Konqueror窗口时遇到了同样的问题。

答案 4 :(得分:1)

窗口ID

wmctrl -a :ACTIVE: -v 2>&1 | grep "Using window: " | awk "{print \$3}"

答案 5 :(得分:1)

你可以检查xdo,它可以用最少的资源来做一份体面的工作。