web-dev-qa-db-ja.com

ウィンドウの背後にあるプロセス名を取得する

Spotifyが閉じているかどうかをチェックするスクリプトを作成しようとしています。開いているSpotifyウィンドウの数を印刷するために次のことを試みましたが、機能しません。

wmctrl -l | grep "Spotify" | wc -l

その理由は、Spotifyが音楽を再生しているときに、ウィンドウのタイトルが再生中の曲の名前に変わり、「Spotify」が含まれていないためです。

開いているSpotifyウィンドウの数を印刷するには、次のようなことができると思っていました。

wmctrl -l | awk '{print $1}' | xargs -I id ... | wc -l

しかし、wmctrlから返されたウィンドウID(0x06200001の形式)を考えると、ウィンドウを実行するプロセスの名前を確認するためにどのコマンドを使用できるかわかりません。

_wmctrl -l | awk '{print $1}' | xargs -i xprop -id {} | grep WM_CLASS\(STRING\)\ =\ \"spotify\" | wc -l
_

Xargsを使用して、開いている各ウィンドウで_xprop -id <window-id>_を実行しました。すべてのSpotifyウィンドウについて、xpropの出力は(他の多くのものの中でも)次のような行を示します。

_WM_CLASS(STRING) = "spotify", "Spotify"
_

そこで、xpropをgrep WM_CLASS(STRING) = "spotify"にパイプ処理し、スペース、引用符、括弧を明らかにエスケープしました。