web-dev-qa-db-ja.com

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

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
28
Rogach

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

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

(フォーカスとアクティブの違いが何であるかはわかりません。)

(私は wmctrl がこれを行うことができると思いましたが、どうやらそうではありません。)

それはこれと同じくらい簡単です:

xdotool getactivewindow getwindowname

幸運を祈ります。

29
eric

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

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

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

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

Xwininfoコマンド http://www.xfree86.org/4.2.0/xwininfo.1.html を試してください。これにより、ウィンドウのタイトルが返され、プロセスに関する限り...

XはこれにIDを割り当て、ウィンドウの親PIDになり、デフォルトで非表示になるため、GnomeがNET_WM_PIDをサポートしていると想定すると、2001年のこのパッチがサポートしているように、 http:// mail。 gnome.org/archives/gtk-devel-list/2001-October/msg00238.html の場合、この投稿 http://www.mail-archive.com/devel@xfree86。 org/msg05809.html 、ここで作者はウィンドウIDをPIDに変換する短いCプログラムを書きます。

4
rhoyerboat

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

  1. xpropと入力し、マウスカーソルを使用して目的のウィンドウを選択してから、
  2. _WM_NAME_はウィンドウのタイトルを示し、__NET_WM_PID_はpidを示します

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

_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の場合、上記のコマンドの出力はsedにパイプ処理できます。sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

1
jjj