检测当前活动窗口

Dav*_*ogt 64 linux xorg command-line

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

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

是否有另一个命令行工具可以为我提供当前窗口的窗口 ID 和/或窗口标题?

Ski*_*rou 65

安装xdotool,然后运行

xdotool getwindowfocus getwindowname
Run Code Online (Sandbox Code Playgroud)

它将给出例如在 Firefox 中打开的当前网页:

linux - Detecting currently active window - Super User - Mozilla Firefox
Run Code Online (Sandbox Code Playgroud)


Jim*_*ris 40

这更直接,只使用xpropand cut

xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME
Run Code Online (Sandbox Code Playgroud)

这些命令只是从根窗口和应用程序窗口中提取属性,但根据 Lorenzo von Matterhorn 的要求:

  • 第一的,

    xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
    
    Run Code Online (Sandbox Code Playgroud)

    _NET_ACTIVE_WINDOW从根中提取属性,为您提供活动窗口的 XID。该32x '\t$0'告诉xprop格式化输出的方式,cut可以很容易地分析之后。

  • 然后,仅从输出中提取 XID cut -f 2

  • 然后,将 XID 作为参数传递给

    xprop -id XID _NET_WM_NAME
    
    Run Code Online (Sandbox Code Playgroud)

打印该窗口的名称。


小智 11

有,但没有简短的答案或解决方案。

$ wmctrl -lp | grep $(xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \
    awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/')
Run Code Online (Sandbox Code Playgroud)

结果:

0x03800004  0 16459  xxxxxxxxxx /bin/bash
Run Code Online (Sandbox Code Playgroud)

正在使用:

$ 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)
Run Code Online (Sandbox Code Playgroud)


Gre*_*ell 5

这对我有用:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME

给出:

WM_NAME(STRING) = "~"

所以也许你会做一些丑陋的事情来获得这个名字:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | sed -e 's/.*"\(.*\)".*/\1/'

给出:

~

这是我当前关注的窗口名称,全部是它本身。

或者,避免使用稍微不那么难看的 sed:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | awk -F '"' '{print $2}'


Ton*_*vel 5

相对较短,并正确处理包含引号的窗口名称:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | 
sed -nr 's/.*= "(.*)"$/\1/p'
Run Code Online (Sandbox Code Playgroud)