檢測當前活動窗口

檢測當前活動窗口

Linux 命令列工具wmctrl可讓您列出所有視窗或所有桌面等。在桌面清單模式下,目前桌面標有星號。

我需要一個可以找出當前活動視窗標題的工具。不幸的是,wmctrl沒有一個助手可以做到這一點 - 儘管它知道哪個視窗目前處於活動狀態(請參閱:ACTIVE:標記)。

是否有另一個命令列工具可以為我提供當前視窗的視窗 ID 和/或視窗標題?

答案1

安裝xdotool,然後運行

xdotool getwindowfocus getwindowname

它將給出例如在 Firefox 中開啟的當前網頁:

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

答案2

這比較直接,只使用xpropand 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

  • 然後,從輸出中僅提取 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'

相關內容