Die aktuelle Funktion “Desktop anzeigen” (über Strg-Alt-D
) funktioniert etwas anders, als man das vielleicht erwartet. Die Fenster werden nicht minimiert sondern nur ausgeblendet. Stellt man eines der Fenster dann wieder her, kommt das zwar in den Vordergrund – alle anderen Fenster (die vorher sichtbar waren), werden aber dabei auch wiederhergestellt. In einem Forums-Thread auf ubuntuusers.de wurde genau das bemängelt und nach einer Lösung gesucht, die Fenster stattdessen zu minimieren (die Idee zu diesem Artikel kam über diesen Thread, deshalb wollte ich ihn hier auch nennen).
Eine Lösung dafür bieten eine Hand voll Kommandozeilen-Tools. Welche das sind und wie man sie einsetzen kann, möchte ich in diesem Artikel zeigen. Zudem stelle ich ein Beispiel-Skript vor, das noch einen Schritt weitergeht: es lässt bestimmte Fenster sichtbar…
Tools installieren
Um alle Beispiele ausführen zu können, benötigt ihr drei Pakete, die ihr mit folgenden Befehlen installieren könnt:
sudo apt-get install wmctrl
sudo apt-get install xwit
sudo apt-get install x11-utils
Das zuletzt genannte Paket (das die Tools xprop
und xwininfo
beinhaltet) sollte ohnehin schon standardmäßig installiert sein.
Ihr braucht außerdem nicht für alle Aufgaben jedes Tool bzw. jedes Paket. Schaut euch einfach die folgenden Beispiele an, entscheidet was ihr davon braucht, und prüft dann welche der Tools ihr dazu installieren müsst.
Interessante Code-Schnipsel
Alle vorhandenen Fenster ermitteln
Das folgende Kommando zeit eine Liste aller gerade vorhandenen Fenster an. Dabei ist es egal, ob die Fenster gerade sichtbar sind oder nicht.
wmctrl -l -x
Das Argument -x
kann je nach Bedarf auch weggelassen werden – es sorgt nur dafür, dass erweiterte Informationen pro Fenster ausgegeben werden.
Das aktuelle (fokussierte) Fenster ermitteln
Um das gerade aktive bzw. fokussierte Fenster zu ermitteln, kann man den folgenden Befehl verwenden:
xprop -root|grep _NET_ACTIVE_WINDOW\(WINDOW\)|cut -c41-
Er gibt die ID des aktiven Fensters aus – eine hexadezimale Nummer. Man muss dabei beachten, dass zwischen den Fenster-IDs, wie sie von wmctrl
ausgegeben werden ein Unterschied zur hier ausgegebenen ID besteht. Die Stellenanzahl stimmt nicht überein – bei dieser ID hier fehlen führende Nullen (nach dem 0x
natürlich).
Status eines Fensters ermitteln
Der Fenster-Status (minimiert oder nicht) wird etwas komplizierter ermittelt.
xwininfo -id $wnd -all | grep -q "Hidden"
if [ $? == 1 ]; then
echo "NICHT minimiert"
else
echo "minimiert"
fi
Über das Tool xwininfo
werden zunächst alle Informationen zum angegebenen Fenster ausgegeben. Die Ausgabe wird dann per grep
nach dem Schlüsselwort Hidden
durchsucht. Ist der Text auffindbar, ist das Fenster minimiert.
Alle Fenster minimieren
Um alle Fenster auf einmal zu minimieren, braucht man sich nicht die Mühe machen, zuerst alle Fenster-IDs zu ermitteln. Es genügt das einfache Kommando:
xwit -iconify -all
Ein bestimmtes Fenster minimieren
Ein bestimmtes Fenster lässt sich mit dem selben Tool minimieren – unter Verwendung anderer Argumente:
xwit -iconify -id FENSTERID
Dabei muss FENSTERID
natürlich durch die ID des Fensters ersetzt werden.
Ein bestimmtes Fenster wiederherstellen
wmctrl -i -a FENSTERID
Dabei muss FENSTERID
natürlich durch die ID des Fensters ersetzt werden.
Ein komplettes Anwendungsbeispiel
Mit Hilfe der o.g. Komponenten habe ich mir ein Skript gebastelt, das verschiedene Fenster-Minimierungs-Funktionen bietet. Ihr könnt das Skript aus dem Download-Bereich hier herunterladen.
Das Shellskript hat drei Funktionen:
- Alle Fenster minimieren. Ähnlich der Funktion “Desktop anzeigen”. Allerdings werden die Fenster nacheinander einzeln minimiert und können daher auch einzeln wiederhergestellt werden. Wer Unity verwendet wird vielleicht schon gemerkt haben, dass das bei “Desktop anzeigen” mittlerweile anders läuft: möchte man ein Fenster wieder holen, werden alle Fenster wiederhergestellt.
Aufruf: window_minimizer.sh minimize all
- Alle Fenster außer dem gerade fokussierten minimieren.
Aufruf: window_minimizer.sh minimize id
- Alle Fenster minimieren, die eine andere Klasse als das gerade fokussierte haben. Soll heißen: ist gerade ein Terminal fokussiert, werden alle “Nicht-Terminal-Fenster” minimiert.
Aufruf: window_minimizer.sh minimize class
- Minimierte Fenster wiederherstellen. Es werden die Fenster wiederhergestellt, die mit dem letzten Minimieren-Aufruf minimiert wurden.
Aufruf: window_minimizer.sh restore
Die verschiedenen Funktionen sollten dann natürlich mit Tastenkombinationen verknüpft werden, weil das Skript sonst nicht sinnvoll gestartet werden kann.
Startet dazu die Anwendung Systemeinstellungen
(über diesen Namen im Unity-Dash zu finden). Darin findet ihr ein Icon für das Einstellungs-Fenster Tastatur
. Startet das und wechselt darin auf den Reiter Tastaturkürzel
.
Auf der linken Seite findet ihr dann ein Abteil namens Eigene Tastenkombinationen
. Hier könnt ihr nun einen Befehl einfügen und diesem eine Tastenkombination zuweisen. Achtet darauf, dass ihr keine Doppelbelegung bekommt.
Andere Ideen?
Ich hoffe natürlich, dass euch mein Beispiel-Skript etwas nützlich sein kann. Andererseits würde es mich natürlich auch freuen, wenn ich euch zu eigenen Skript-Ideen anregen konnte.
» Habt ihr denn welche?
» Habt ihr sie vielleicht sogar schon umgesetzt?
Falls ja würde ich mich über ein Kommentar von euch freuen (natürlich auch sonst ).
pssst, weitersagen!