检测当前活动窗口

检测当前活动窗口

Linux 命令行工具wmctrl允许您列出所有窗口或所有桌面等。在桌面列表模式下,当前桌面标有星号。

我需要一个工具来找出当前活动窗口的标题。不幸的是,wmctrl没有一个助手可以做到这一点 - 尽管它知道哪个窗口当前处于活动状态(见:ACTIVE:标记)。

是否有其他命令行工具可以提供给我当前窗口的窗口 ID 和/或窗口标题?

答案1

安装xdotool,然后运行

xdotool getwindowfocus getwindowname

例如,它将提供在 Firefox 中打开的当前网页:

linux - Detecting currently active window - Super User - Mozilla Firefox

答案2

这更直接,仅使用xpropcut

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

  • 然后,使用以下命令从输出中提取 XIDcut -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'

相关内容