現在アクティブなウィンドウの検出


52

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

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

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

回答:


56

インストールxdotoolしてから実行する

xdotool getwindowfocus getwindowname

これは、例えばFirefoxで開かれている現在のWebページに表示されます:

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

強力なツール!現在アクティブなウィンドウを取得するだけでなく、他にも多くの便利な機能があります。
Searene 14年

Jim Parisの答えと比較すると、これにはインストールする依存関係があるという欠点がありますが、特にxdotoolが既にディスクキャッシュにある場合は、より高速に実行されるようです。
mc0e

1
で現在のウィンドウを操作する場合はwmctrl、次のようにします。wmctrl -i -r `xdotool getwindowfocus` -e 0,10,10,-1,-1、ここで、-iwmctrlに、ウィンドウタイトルではなくウィンドウIDを期待するように指示します。
フィデル

34

これはより直接的で、とのみを使用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、後から簡単に解析できます。

  • 次に、出力からXIDのみを抽出します。 cut -f 2

  • 次に、XIDをパラメーターとして渡します

    xprop -id XID _NET_WM_NAME
    

そのウィンドウの名前を出力します。


1
こんにちは、引数と構文の少しを説明してもらえますか?QAおよび将来の読者に役立つ可能性があります。
ロレンツォフォンマッターホルン

9

ありますが、短い答えや解決策はありません。

$ 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)

1
これは良い解決策のように見えますが、xpropユーティリティについては知りませんでした。それまでの間、wmctrlにパッチを適用してこのようなオプションを提供し、作成者に送信しました。残念ながら、まだ返事がありませんでした。
デイブフォークト

1
コードの有効性と「シンプルさ」のために+1
ロレンツォフォンマッターホルン

5

これは私のために働いたものです:

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

与える:

WM_NAME(STRING) = "~"

だから、あなたは名前をすべてそれ自体で取得するために少しセッドのugさをするでしょう:

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

与える:

~

これは、現在フォーカスされているウィンドウ名で、それ自体がすべてです。

または、少しedいsedを避けます。

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


1
または、カットがすでに導入されているので、それを再び使用できますxprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | cut -d '"' -f 2
。– mc0e

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.