Wie man die PID des aktiven Fensters kennt

9

Woher weiß man die PID eines aktiven (fokussierten) Fensters?

Ich möchte ein Skript schreiben, in dem es notwendig ist zu wissen, ob der Benutzer aktiv ein Programm verwendet [mit etwas wie Firefox im Internet surfen] oder etwas anderes tut [Text mit etwas wie gedit schreiben]

In meinem Fall möchte ich große Dateien herunterladen, aber die Browsergeschwindigkeit nicht beeinträchtigen. Wenn ich also surfe, ist das aktive Fenster von Firefox und ich möchte den Download beenden. Wenn ich PDF lese, ist das aktive Fenster ein PDF-Reader und ich möchte den Download fortsetzen. Das ist es.

totti
quelle
2
in der Nähe eines Duplikats von diesem
Ternary

Antworten:

7

Schließlich gelang es mir, mit xdotool die PID eines aktiv fokussierten Fensters zu ermitteln

xprop -id `xdotool getwindowfocus` | grep '_NET_WM_PID' | grep -oE '[[:digit:]]*$'
totti
quelle
Ich nehme an, du hast xprop -id ...gearbeitet?
Ternary
4

xdpyinfohat in seiner voluminösen Ausgabe die Fenster-ID des Fensters mit dem Fokus vergraben (siehe: Welches Fenster hat den aktuellen Fokus? ). Damit können Sie xpropdie zugehörige PID abrufen.

xprop -id `xdpyinfo | grep -Eo 'window 0x[^,]+' | cut -d" " -f2` | grep PID
Ternär
quelle
1
Sorry, keine Ausgabe am 10.04
totti
xdpyinfo | grep -Eo 'window 0x[^,]+' | cut -d" " -f2 Ausgabe 0x3e00122
totti
Was gibt xprop -id 0x3e00122Ihnen (oder was auch immer Ihre neue aktuelle Fenster-ID ist)?
Ternary
1
Es sieht aus wie einige Fenster nicht unterstützen _NET_WM_PID , aber firefox und evince beide scheinen
Ternary
und in diesem Fall könnte es nützlich sein, einen Blick darauf zu werfenxprop -id [active window] | grep WM_CLASS
Ternary
1

Verwenden des Fensterstapels von xdotool:

xdotool getactivewindow getwindowpid

Bash:

#!/bin/bash
set -e
WINDOW_PID=$(xdotool getactivewindow getwindowpid)
...
Atomsymbol
quelle
0

Bash

xdotool getwindowpid `xdotool getactivewindow`

Fisch

xdotool getwindowpid (xdotool getactivewindow)
Vyacheslav Konovalov
quelle
-1

Sie können wmctrl installieren und dann alle Fenster auflisten wmctrl -l.

Henry Gibson
quelle
3
Das ist ein bisschen zu kurz, um hilfreich zu sein, denke ich. Könnten Sie Ihre Antwort um einige Schritte erweitern, um beispielsweise das aktive Fenster abzurufen? Oder wie man die Ausgabe in
Skripten
Ich fürchte, ich kann Ihnen dort nicht helfen. Ich bin auch nicht sicher, wie ich die Ausgabe in etwas Nützliches verwandeln kann. Es tut uns leid.
Henry Gibson