Gnome'da aktif pencere işlemini / başlığını almak mümkün müdür?


28

Geçerli aktif (odaklı) pencere bilgilerini Gnome 2 masaüstünde almak için bir çözüme ihtiyacım var. Çoğunlukla bu pencere ve pencere başlığını çalıştıran işlemle ilgileniyorum.

Mümkün mü?

ÇÖZÜM:

Pencere başlığını al:

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

İşlem adı alınıyor:

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

veya:

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

Yanıtlar:


17

Çok yönlü bir X pencere otomasyon aracı olan xdotool'u kullanabilirsiniz .

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

(Odaklanmış ve aktif arasındaki farkın ne olduğunu bilmiyorum.)

( Wmctrl'nin bunu yapabileceğini düşündüm , ama görünüşe göre yapamadım.)


26

Bu kadar basit:

xdotool getactivewindow getwindowname

İyi şanslar umarım sizin için işe yarar!


Bu işe yarıyor, neden kimse indirilmediğini açıklayabilir mi?
lfzawacki

8

OP'ın çözümü daha (IMO) Daha basit (yani olmadan ps, grepve awk), işlem adını almak için:

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

Veya satırın sonunu istiyorsanız:

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

Evet, cat /proc/güzeldir (ve tartışmaya açık bir şekilde daha hızlıdır çünkü tüm psçıktının kaplanmasını gerektirmez ). Soruyu bu soru sorusuna ekledim, böylece gelecekteki kullanıcılar onu bulabilecekler.
Rogach

4

Xwininfo komutunu deneyin http://www.xfree86.org/4.2.0/xwininfo.1.html iyi, kesinlikle pencere başlığı döner ve bildiğim kadarıyla süreç devam ederken, ...

X ona bir kimlik atadı ve pencerenin ana PID'i oldu ve varsayılan olarak gizleyecekti, bu nedenle Gnome'nin NET_WM_PID desteği olduğunu varsayarsak, 2001'den itibaren bu düzeltme eki, http://mail.gnome.org/ arşivler / gtk-devel-list / 2001-October / msg00238.html , daha sonra bu yazıyı inceleyebiliriz , yazarın yazdığı http://www.mail-archive.com/devel@xfree86.org/msg05809.html Pencere kimliğini PID'ye dönüştürmek için kısa C programı, voila.


Fakat xwininfogerekli pencereyi manuel olarak seçmemi gerektiriyor. Odaklanan pencereyi bash'tan almanın bir yolunu umuyordum.
Rogach

Bir şey olduğu gibi, `xwininfo -root -children | grep -oEi 'Pencere kimliği: (? [0-9a-zA-Z] +) | grep -oEi '(? 0-9a-zA-Z)' - edit: parmağım kaydı, pencere kimliğimin regex'i kötüydü. bu siteyi değişik referanslar için kontrol ediniz: davygoat.com/software/rizzle/How_it_works.html
rhoyerboat

Bu komut sadece "root" pencere kimliğini verir, aktif olanı vermez :(
Rogach

1

Sorunun eski olduğunu biliyorum, ancak xpropburada da belirtilmesi gerektiğini düşünüyorum. X altında kolayca temin edilebilir. Etkileşimli bir şekilde kullanılabilir:

  1. xpropfare imlecini kullanarak istediğiniz pencereyi yazın ve seçin, ardından
  2. WM_NAMEpencerenin başlığını _NET_WM_PIDverir, ücretini verir

Veya xprophangi pencereye ihtiyacınız olduğunu doğrudan -idveya -nameseçeneğinizle söyleyebilirsiniz . Kullanarak awkaktif pencere kimliğini alabilir ve tekrardan bu şekilde geçirebilirsiniz xprop( buradan alınabilir ):

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

Son olarak, Favori Aracınızı ™ (örneğin grepveya sed) kullanarak, gerekli değerleri elde edebilirsiniz. Örneğin pid, yukarıdaki komutun çıktısı için şu şekilde aktarılabilir sed:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.