Linux 命令行工具wmctrl
允许您列出所有窗口或所有桌面等。在桌面列表模式下,当前桌面标有星号。
我需要一个工具来找出当前活动窗口的标题。不幸的是,wmctrl
没有一个助手可以做到这一点 - 尽管它知道哪个窗口当前处于活动状态(见:ACTIVE:
标记)。
是否有其他命令行工具可以提供给我当前窗口的窗口 ID 和/或窗口标题?
答案1
安装xdotool
,然后运行
xdotool getwindowfocus getwindowname
例如,它将提供在 Firefox 中打开的当前网页:
linux - Detecting currently active window - Super User - Mozilla Firefox
答案2
这更直接,仅使用xprop
和cut
:
xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME
这些命令只是从根窗口和应用程序窗口提取属性,但根据 Lorenzo von Matterhorn 的要求:
第一的,
xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
从根目录提取
_NET_ACTIVE_WINDOW
属性,该属性将为您提供活动窗口的 XID。这32x '\t$0'
将指示xprop
以稍后可以轻松解析的方式格式化输出cut
。然后,使用以下命令从输出中提取 XID
cut -f 2
然后,将 XID 作为参数传递给
xprop -id XID _NET_WM_NAME
打印该窗口的名称。
答案3
有,但没有简短的答案或解决方案。
$ wmctrl -lp | grep $(xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \
awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/')
结果:
0x03800004 0 16459 xxxxxxxxxx /bin/bash
正在使用:
$ for x in $(seq 1 10); do sleep 5; wmctrl -lp | grep $(xprop -root | \
grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | \
sed 's/^0x/0x0/'); done
0x03800004 0 16459 xxxxxxxxxx /bin/bash
0x020000a4 0 13524 xxxxxxxxxx linux - Detecting currently active window - Super User - Mozilla Firefox (Build 20120129142219)
答案4
相对较短,并正确处理包含引号的窗口名称:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME |
sed -nr 's/.*= "(.*)"$/\1/p'