Linuxコマンドラインツールwmctrl
を使用すると、すべてのウィンドウまたはすべてのデスクトップを一覧表示できます。デスクトップリストモードでは、現在のデスクトップにアスタリスクが付いています。
現在アクティブなウィンドウのタイトルを把握できるツールが必要です。残念ながら、wmctrl
にはこれを行うヘルパーがありません-現在アクティブなウィンドウがわかっているにもかかわらず(:ACTIVE:
マーカー)。
現在のウィンドウのウィンドウIDまたはウィンドウタイトル、あるいはその両方を取得できる別のコマンドラインツールはありますか?
xdotool
をインストールして実行
xdotool getwindowfocus getwindowname
それは例えば与えるでしょうFirefoxで開いている現在のウェブページの場合:
linux - Detecting currently active window - Super User - Mozilla Firefox
これはより直接的で、xprop
とcut
のみを使用します。
xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME
これらのコマンドは、ルートウィンドウとアプリケーションウィンドウからのプロパティの抽出にすぎませんが、ロレンツォフォンマッターホルンの要求に従って:
最初、
xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
ルートから_NET_ACTIVE_WINDOW
プロパティを抽出し、アクティブなウィンドウのXIDを提供します。 32x '\t$0'
は、xprop
が後で簡単に解析できるように出力をフォーマットするようにcut
に指示します。
次に、cut -f 2
を使用して、出力からXIDのみを抽出します。
次に、XIDをパラメーターとして渡します。
xprop -id XID _NET_WM_NAME
これはそのウィンドウの名前を表示します。
$ 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)
これは私のために働いたものです:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME
与える:
WM_NAME(STRING) = "~"
だから、おそらくあなたは名前をそれ自体で取得するために少しsedの醜さをするでしょう:
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}'
比較的短く、引用符を含むウィンドウ名を正しく処理します。
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME |
sed -nr 's/.*= "(.*)"$/\1/p'