現在アクティブなウィンドウを検出しています

現在アクティブなウィンドウを検出しています

Linux コマンドライン ツールを使用するwmctrlと、すべてのウィンドウやすべてのデスクトップなどを一覧表示できます。デスクトップ一覧モードでは、現在のデスクトップにアスタリスクが付きます。

現在アクティブなウィンドウのタイトルを判別できるツールが必要です。残念ながら、現在どのウィンドウがアクティブであるかがわかっているにもかかわらず (マーカーを参照) wmctrl、これを行うヘルパーがありません。:ACTIVE:

現在のウィンドウのウィンドウ ID やウィンドウ タイトルを取得できる別のコマンドライン ツールはありますか?

答え1

インストールxdotoolして実行

xdotool getwindowfocus getwindowname

たとえば、Firefox で現在開いている Web ページの場合は次のようになります。

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'指示します。xpropcut

  • 次に、出力から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'

関連情報