Ist es möglich, den aktiven Fensterprozess / -titel in Gnome abzurufen?


27

Ich benötige eine Lösung, um die aktuell aktiven (fokussierten) Fensterinformationen auf einem Gnome 2-Desktop abzurufen. Ich interessiere mich hauptsächlich für den Ablauf dieses Fensters und des Fenstertitels.

Ist es möglich?

LÖSUNG:

Fenstertitel abrufen:

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

Prozessnamen erhalten:

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

oder:

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

Antworten:


17

Sie können xdotool verwenden , ein vielseitiges Werkzeug zur Automatisierung von X-Fenstern.

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

(Ich weiß nicht, was der Unterschied zwischen konzentriert und aktiv ist.)

(Ich dachte, wmctrl könnte das, aber anscheinend nicht.)


26

So einfach ist das:

xdotool getactivewindow getwindowname

Viel Glück, hoffe es funktioniert für Sie!


Kann jemand erklären, warum dies abgelehnt wurde?
lfzawacki

7

Einfachere (IMO) als OP-Lösung (dh ohne ps, grepund awk), die Prozessnamen zu erhalten:

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

Oder wenn Sie ein Zeilenende wünschen:

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

Ja, cat /proc/ist nett (und vermutlich auch schneller, da nicht die gesamte psAusgabe abgehackt werden muss). Ich habe es dem fraglichen Lösungskörper hinzugefügt, damit zukünftige Benutzer es finden können.
Rogach

4

Versuchen Sie den Befehl xwininfo, http://www.xfree86.org/4.2.0/xwininfo.1.html . Er gibt definitiv den Fenstertitel zurück.

X hat ihm eine ID zugewiesen und wird die übergeordnete PID des Fensters. Vorausgesetzt, dass Gnome NET_WM_PID unterstützt, wie in diesem Patch aus dem Jahr 2001 angegeben, http://mail.gnome.org/ archives / gtk-devel-list / 2001-October / msg00238.html , dann können wir diesen Beitrag unter http://www.mail-archive.com/devel@xfree86.org/msg05809.html lesen , in dem der Autor schreibt: a kurzes C-Programm zum Konvertieren von Window ID in PID, voila.


Aber es scheint, xwininfodass ich das benötigte Fenster manuell auswählen muss. Ich hoffte auf einen Weg, das fokussierte Fenster von der Bash zu bekommen.
Rogach

Sowas wie in `xwininfo -root -children | grep -oEi 'Fenster-ID: (? [0-9a-zA-Z] +) | grep -oEi '(? 0-9a-zA-Z)' - edit: mein finger rutschte ab, mein regulärer Ausdruck für die Fenster-ID war schlecht. Auf dieser anderen Website finden Sie verschiedene Informationen
rhoyerboat

Dieser Befehl gibt nur die "root" -Fenster-ID und nicht die aktive an :(
Rogach

1

Ich weiß, dass die Frage alt ist, aber ich denke, xpropdass hier auch erwähnt werden sollte. Es ist unter X leicht verfügbar. Es kann entweder auf interaktive Weise verwendet werden:

  1. Typ xpropund wählen Sie das Fenster , das Sie mit der Maus - Cursor möchten, dann
  2. WM_NAMEgibt dir den Titel des Fensters, _NET_WM_PIDgibt die PID

Oder Sie können direkt xpropanhand der Übergabe -idoder der -nameOption bestimmen, welches Fenster Sie benötigen . Mit awkkönnen Sie die aktive Fenster-ID abrufen und so weitergeben xprop(von hier aus ):

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

Schließlich können Sie mit Your Favourite Tool ™ (z. B. grepoder sed) die erforderlichen Werte auslesen. Zum Beispiel für piddie Ausgabe des obigen Befehls kann weitergeleitet werden an sed:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.