Apakah mungkin untuk mengambil proses / judul jendela aktif di Gnome?

28

Saya memerlukan solusi untuk mendapatkan informasi jendela aktif (fokus) saat ini di desktop Gnome 2. Saya sebagian besar tertarik pada proses menjalankan judul jendela dan jendela itu.

Apa itu mungkin?

LARUTAN:

Mendapatkan judul jendela:

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

Mendapatkan nama proses:

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

atau:

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

Jawaban:

17

Anda dapat menggunakan xdotool , alat otomatisasi X window serbaguna.

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

(Saya tidak tahu apa perbedaan antara fokus dan aktif.)

(Saya pikir wmctrl bisa melakukan ini, tetapi ternyata tidak.)

Gilles 'SANGAT berhenti menjadi jahat'
sumber
26

Sesederhana ini:

xdotool getactivewindow getwindowname

Semoga berhasil, ini berhasil untuk Anda!

eric
sumber
Ini bekerja, adakah yang bisa menjelaskan mengapa itu dibatalkan?
lfzawacki
8

Lebih sederhana (IMO) daripada solusi OP (yaitu tanpa ps, grepdan awk), untuk mendapatkan nama proses:

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

Atau jika Anda ingin akhir baris:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)
Skippy le Grand Gourou
sumber
Ya, cat /proc/itu bagus (dan bisa dibilang lebih cepat, karena itu tidak melibatkan menangkap seluruh psoutput). Saya menambahkannya ke solusi di badan pertanyaan, sehingga pengguna masa depan akan dapat menemukannya.
Rogach
4

Coba perintah xwininfo, http://www.xfree86.org/4.2.0/xwininfo.1.html , itu pasti mengembalikan judul jendela dan sejauh proses berjalan, yah ...

X telah memberinya ID dan menjadi PID induk dari jendela dan juga akan menyembunyikannya secara default, jadi, dengan anggapan bahwa Gnome telah didukung oleh NET_WM_PID, karena tambalan ini dari tahun 2001 menunjukkannya, http://mail.gnome.org/ arsip / gtk-devel-list / 2001-Oktober / msg00238.html , maka kita dapat meninjau posting ini, http://www.mail-archive.com/[email protected]/msg05809.html , di mana penulis menulis program C pendek untuk mengubah Window ID menjadi PID, voila.

royoyoat
sumber
Tapi sepertinya itu xwininfomengharuskan saya untuk secara manual memilih jendela yang dibutuhkan. Saya berharap cara untuk mendapatkan jendela fokus dari bash.
Rogach
Sesuatu seperti di, `xwininfo -root -children | grep -oEi 'Window id: (? [0-9a-zA-Z] +) | grep -oEi '(? 0-9a-zA-Z)' - edit: jari saya terpeleset, regex saya untuk id jendela buruk. periksa situs lain ini untuk berbagai referensi: davygoat.com/software/rizzle/How_it_works.html
rhoyerboat
Perintah ini hanya memberikan id window "root", dan bukan yang aktif :(
Rogach
1

Saya tahu pertanyaannya sudah tua, tetapi saya merasa xpropjuga harus disebutkan di sini. Ini tersedia di bawah X. Dapat digunakan dengan cara interaktif:

  1. ketik xpropdan pilih jendela yang Anda inginkan menggunakan kursor mouse, lalu
  2. WM_NAMEmemberi Anda judul jendela, _NET_WM_PIDmemberikan pid

Atau Anda dapat langsung mengetahui xpropjendela mana yang Anda butuhkan dengan melewati -idatau -nameopsi. Menggunakan awkAnda bisa mendapatkan id jendela aktif dan meneruskannya kembali xpropseperti itu (diambil dari sini ):

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

Terakhir, menggunakan Your Favorite Tool ™ (mis. grepAtau sed) Anda dapat mencabut nilai yang dibutuhkan. Misalnya untuk pidoutput dari perintah di atas dapat disalurkan ke sed:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

jjj
sumber