Gnomeでアクティブなウィンドウプロセス/タイトルを取得することは可能ですか?


28

Gnome 2デスクトップで現在アクティブな(フォーカスされた)ウィンドウ情報を取得するためのソリューションが必要です。私は主にそのウィンドウとウィンドウタイトルを実行するプロセスに興味があります。

出来ますか?

溶液:

ウィンドウタイトルの取得:

xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1

プロセス名の取得:

ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'

または:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

回答:


17

汎用性の高いXウィンドウ自動化ツールであるxdotoolを使用できます。

focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")

(フォーカスとアクティブの違いがわからない。)

wmctrlはこれを行うことができると考えましたが、明らかにそうではありません。)


26

これは次のように簡単です。

xdotool getactivewindow getwindowname

幸運を祈ります。


これは機能します、誰がそれがダウン投票されたのかを説明できますか?
-lfzawacki

8

プロセス名を取得するために、OPのソリューションよりも単純(IMO)(つまりpsgrepおよびなしawk):

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

または、行末が必要な場合:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)

はい、cat /proc/いいです(そして、ps出力全体をgrepする必要がないため、間違いなく高速です)。質問本文のソリューションに追加したので、将来のユーザーはそれを見つけることができます。
-Rogach

4

xwininfoコマンド、http: //www.xfree86.org/4.2.0/xwininfo.1.htmlを試してください。これは間違いなくウィンドウタイトルを返し、プロセスが進む限り、...

XはそれにIDを割り当て、ウィンドウの親PIDになり、デフォルトで隠します。したがって、GnomeがNET_WM_PIDをサポートしていると仮定すると、2001年のこのパッチはhttp://mail.gnome.org/を示します。アーカイブ/ GTK-develのリスト/ 2001-10月/ msg00238.html、我々はこの記事、確認することができhttp://www.mail-archive.com/devel@xfree86.org/msg05809.html著者は書き込み、ウィンドウIDをPIDに変換する短いCプログラムです。


しかしxwininfo、必要なウィンドウを手動で選択する必要があるようです。bashからフォーカスウィンドウを取得する方法を期待していました。
Rogach

「xwininfo -root -children | grep -oEi 'ウィンドウID:(?[0-9a-zA-Z] +)| grep -oEi '(?0-9a-zA-Z)'-編集:指が滑ってしまい、ウィンドウIDの正規表現が悪かった。さまざまなリファレンスについては、この他のサイトを確認してください:davygoat.com/software/rizzle/How_it_works.html
rhoyerboat

このコマンドは、「ルート」ウィンドウIDのみを提供し、アクティブなものは提供しません:(
Rogach

1

私は質問が古いことを知っていますが、xpropここでも言及されるべきだと思います。Xの下ですぐに使用できます。インタラクティブな方法で使用できます。

  1. xpropマウスカーソルを使用して目的のウィンドウを入力して選択し、
  2. WM_NAMEあなたにウィンドウのタイトルを_NET_WM_PID与え、pidを与える

またはxprop、渡す-id-nameオプションで必要なウィンドウを直接伝えることができます。を使用しawkて、アクティブなウィンドウIDを取得し、それをxpropそのように渡すことができます(ここから取得)。

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")

最後に、Your Favorite Tool™(grepまたはsed)を使用して、必要な値をgrep-outできます。たとえばpid、上記のコマンドの出力は次のようにパイプできますsedsed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

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