Die folgende Antwort wurde auf Gnome3 / Ubuntu geschrieben und getestet. Bitte erwähnen Sie, wenn beim Ausführen auf Fedora / Gnome Probleme auftreten.
Skript zum Schließen aller Anwendungsfenster in einem bestimmten Arbeitsbereich in Gnome
Das folgende Skript schließt alle Fenster in einem bestimmten Arbeitsbereich mit zwei Optionen:
Wenn es ohne Argumente ausgeführt wird, werden alle Fenster im aktuellen Arbeitsbereich geschlossen, z.
python3 /path/to/script.py
Wenn es mit einem bestimmten Arbeitsbereich als Argument ausgeführt wird, werden alle Fenster in diesem Arbeitsbereich geschlossen, z.
python3 /path/to/script.py 0
schließt alle Anwendungen im Arbeitsbereich 1. Beachten Sie, dass der erste Arbeitsbereich den Index 0 hat
Das Skript
#!/usr/bin/env python3
import subprocess
import sys
arg = sys.argv[1:]
def check_close(w_id):
w_data = get(["xprop", "-id", w_id])
if "_NET_WM_WINDOW_TYPE_NORMAL" in w_data:
subprocess.call(["wmctrl", "-ic", w])
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8")
wlist = [l.split() for l in get(["wmctrl", "-lG"]).splitlines()]
arg = arg[0] if arg else [
l.split()[0] for l in get(["wmctrl", "-d"]).splitlines() if '*' in l
][0]
for w in [w[0] for w in wlist if w[1] == arg]:
check_close(w)
Wie benutzt man
- Das Skript benötigt wmctrl , das installiert werden sollte, wenn es nicht auf Ihrem System vorhanden ist.
- Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter
close_wins.py
Testen Sie nun das Skript in einem Terminalfenster mit dem Zielarbeitsbereich als Argument, z. B.:
python3 /path/to/close_wins.py 2
um alle Fenster in Arbeitsbereich 3 ordnungsgemäß zu schließen (0 = Arbeitsbereich 1)
Führen Sie es ohne Argumente aus, um alle Fenster im aktuellen Arbeitsbereich zu schließen :
python3 /path/to/close_wins.py
Wenn alles einwandfrei funktioniert, fügen Sie es einer Tastenkombination hinzu: Wählen Sie: Systemeinstellungen> "Tastatur"> "Tastenkombinationen"> "Benutzerdefinierte Tastenkombinationen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:
python3 /path/to/close_wins.py
... oder führen Sie es auf eine andere Weise aus, die Sie bevorzugen.
Erläuterung
Der Befehl wmctrl -lG
gibt uns Informationen zu den aktuell geöffneten Fenstern. Die Ausgabe sieht aus wie:
0x018000f9 0 135 206 650 500 jacob-System-Product-Name pscript_6.py (1,6 GB Volume /media/jacob/6C08-F637) - gedit
0x01600a09 1 283 275 724 443 jacob-System-Product-Name jacob@jacob-System-Product-Name: ~
0x018018be 1 152 407 650 500 jacob-System-Product-Name Untitled Document 1 - gedit
0x0140008c 2 0 101 1280 960 jacob-System-Product-Name gnome - Can I have a countdown window show the time until next suspend? - Ask Ubuntu - Mozilla Firefox
0x01600a49 2 47 146 724 443 jacob-System-Product-Name jacob@jacob-System-Product-Name: ~
In der zweiten Spalte können wir den Standort des Fensters abrufen:
0x0140008c 2 0 101 1280 960 jacob-System-Product-Name gnome - Can I have a countdown window show the time until next suspend? - Ask Ubuntu - Mozilla Firefox
Das 2
bedeutet, dass sich das Fenster in Arbeitsbereich 3 befindet, da es 0
sich auf den ersten Arbeitsbereich bezieht.
Wenn das Skript mit dem Arbeitsbereich als Argument ausgeführt wird , analysiert das Skript die entsprechenden Fenster-IDs und schließt sie anschließend ordnungsgemäß mit dem Befehl (z. B.):
wmctrl -ic 0x0140008c
Wenn das Skript ohne den Arbeitsbereich als Argument ausgeführt wird , ruft das Skript den aktuellen Arbeitsbereich aus dem Befehl ab:
wmctrl -d
und verwendet anschließend den aktuellen Arbeitsbereich intern als Argument.
script.py 1
ich gerade bemerkt, dass nach dem Lesen der Ausgabe vonwmctrl -lG