ubuntuusers.de

Devilspie

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Wiki/Icons/config.png Devil’s_Pie ist ein Fenstererkennungs-Programm, welches die Funktionalität von Fenstermanagern erweitern kann. Inspiriert vom Sawfishs "Matched Windows"-Feature erkennt es Fenster, wenn sie geöffnet werden und verändert diese je nach Einstellung.

Auf einem typischen Desktop erfüllt Devil's Pie z.B. folgende Aufgaben:

Die Weiterentwicklung konzentriert sich auf den Nachfolger Devilspie2 🇬🇧, dessen Syntax jedoch nicht mit Devil's Pie kompatibel ist.

Hinweis:

Devil's Pie funktioniert nicht oder nur eingeschränkt zusammen mit dem Fenstermanager Compiz. Das Setzen der Arbeitsfläche funktioniert mit der Option set_viewport, aber nicht mit der Option set_workspace. Davon betroffen ist insbesondere die Desktop-Oberfläche Unity.

Installation

Devil's Pie ist in den offiziellen Paketquellen enthalten und kann über folgendes Paket installiert [1] werden:

  • devilspie (universe)

Paketliste zum Kopieren:

sudo apt-get install devilspie 

Oder mit apturl installieren, Link: apt://devilspie

Devil's Pie starten

Das Programm wird mit dem Befehl devilspie gestartet [2]. Dadurch wird der Devil's-Pie-Daemon geladen, wodurch die Konfigurationsdateien eingelesen werden. Diese müssen jedoch zuvor erstellt werden. Damit der Manager auch bei jedem Anmelden gestartet wird, sollte man ihn dem Autostart [3] hinzufügen.

Konfiguration

./gdevilspie_logo.png

Grafisch

Eine einfache Möglichkeit, die Regeln für Devil's Pie zu erstellen, ist das Programm gdevilspie 🇬🇧. Es ist als Paket verfügbar und kann ebenfalls über die Paketverwaltung (bis Ubuntu 17.10) installiert werden:

  • gdevilspie (universe, bis 17.10)

Paketliste zum Kopieren:

sudo apt-get install gdevilspie 

Oder mit apturl installieren, Link: apt://gdevilspie

Bei Ubuntu-Varianten mit einem Anwendungsmenü erfolgt der Programmstart über den Eintrag "Zubehör → gDevilspie". Die verwendeten Befehle werden im nächsten Abschnitt erklärt.

Achtung!

Die Version 0.5 aus den offiziellen Paketquellen weist einen Fehler 🇬🇧 auf, der den Programmstart verhindert. Zur Lösung folgenden Patch anwenden:

wget https://bugs.launchpad.net/ubuntu/+source/gdevilspie/+bug/1161594/+attachment/3682177/+files/xdg_basedirectory.patch
sudo patch /usr/bin/gdevilspie xdg_basedirectory.patch 

Wiki/Icons/settings.png

Manuell

Devil's Pie liest die Konfiguration aus .ds-Dateien, die man im Homeverzeichnis im Ordner ~/.devilspie/ ablegen muss. Sollte das Verzeichnis nicht existieren, legt man es einfach an. Um mehrere Bedingungen in einer Datei oder mehrere Anweisungen innerhalb einer Bedingung zu verwenden, muss man das begin-Konstrukt verwenden! Als Beispiel wird die Datei firefox.ds vorgestellt, mit der Firefox auf der Arbeitsfläche 2 gestartet wird [4]:

(
if
  (is (application_name) "Firefox")
  (set_workspace 2)
)

Das nächste Beispiel macht die Pidgin-Buddyliste mit der Größe 340×630 an der Position (4,150) auf allen Arbeitsflächen sichtbar (pin):

(
if
    (and
        (is (application_name) "pidgin")
        (is (window_name) "Buddy-Liste")
    )
    (begin
        (pin)
        (geometry "340x630+4+150")
    )
)

Ein weiteres Beispiel versteckt das Evolution-Fenster in der Fensterleiste:

(
if
	(and
		( matches (application_name) "evolution" )
		( matches (window_name) "^.*-.Evolution" )
	)
	(begin
		( println "--[ Evolution ]--" )
		( pin )
		( skip_tasklist )
		( minimize )
	)
)

Folgendes Beispiel öffnet Thunar und das GNOME-Terminal immer maximiert:

(
begin
    (if (is (application_name) "Thunar")        (maximize) )
    (if (is (application_name) "Terminal")      (maximize) )
)

Damit nur die Fenster des Dateimanagers maximiert werden, die auch Dateien anzeigen (also z.B. nicht "Neue Datei erstellen.."), können reguläre Ausdrücke verwendet werden, indem man den Operator matches benutzt:

(
if
        (and
                (is (application_name) "Thunar")
                (matches (window_name) ".+Dateimanager")
        )
        (maximize)
)

Um die Fensterdekoration (d.h. Rahmen und Titelleiste) aller Fenster zu entfernen, genügt (z.B. undecorate.ds):

(undecorate)

Bei manchen Anwendungen steht der Name, mit denen sie aufgerufen werden, an anderer Stelle. So sind die folgenden Programme wie folgt zu identifizieren:

Programm Beispiel für die Identifizierung
gedit
(if	(and	(is	(application_name)	"Text Editor"	)
		(is	(window_class) 		"Gedit"		)	)	(set_workspace 4)	)
gnome-terminal
(if	(and	(is	(application_name)	"Terminal"	)
		(is	(window_class) 		"Gnome-terminal")	)	(set_workspace 4)	)

Weitere Aktionen, die innerhalb von begin stehen können, sind

Aktion Wirkung
fullscreen Vollbild-Modus
focus Setze Fokus
center Zentrieren
minimize Minimieren
maximize Maximieren
maximize_vertically Vertikal maximieren
maximize_horizontally Horizontal maximieren
shade Rollen
unshade Entrollen
close Schließen
pin Pin(Sticky)Modus
unpin Pin Modus beenden
skip_pager Nicht im Pager anzeigen
skip_tasklist Nicht in Taskleiste anzeigen
above Vordergrund (top)
below Hintergrund (hinter anderen Fenstern)
undecorate Fensterdekoration entfernen
wintype TYPE Fensterdekoration ändern (TYPE kann sein normal, dialog, menu, toolbar, splashscreen, utility, dock, desktop)
geometry GEO Größe und Position, BxH+X+Y ( GEO kann z.B. sein: 300×200+0-22; 800x600“; +17+2)
print text Gibt den Text auf die Standard-Schnittstelle aus (ohne eine Zeilenschaltung am Ende), sinnvoll für Debug-Zwecke.
println text Gibt den Text auf die Standard-Schnittstelle aus (mit einer Zeilenschaltung am Ende), sinnvoll für Debug-Zwecke.
set_workspace n Verschiebt die Anwendung beim Start auf die Arbeitsfläche n. Die Desktop-Effekte müssen unter gnome abgeschaltet sein damit es wirkt.
set_viewport n Wie set_workspace, nur funktioniert es auch mit Desktopeffekten.

Sollte man sich nicht sicher sein, ob die erstellten Konfigurationsdateien korrekt eingelesen werden können, kann dies mit dem Parameter --debug überprüft werden:

devilspie --debug 

Mit (debug) in einer .ds-Datei kann man sich die aktuellen Fenster ausgeben lassen. Eine sehr ausführliche englische Anleitung (Stand 2010) findet man unter wiki.foosel.net 🇬🇧 (archivierte Version).

Fenster identifizieren

Wie aber findet man den benötigten Programmnamen (application_name) oder, um genauer zu differenzieren, den Titel (window_name) heraus?

Der Programmname entspricht der WM_CLASS 🇬🇧. Also öffnet man ein Terminal [5] und gibt folgenden Befehl ein:

xprop | grep WM_CLASS\(STRING\) 

Daraufhin verändert sich der Mauszeiger. Danach einfach auf das gewünschte Fenster klicken.

Der Titel wird in der Fensterdekoration oben angezeigt. Alternativ kann man ihn mit folgendem Befehl herausfinden:

xprop | grep WM_NAME\(STRING\) 

Für den Fall, dass ein Programm viele "Floating Windows" verwendet, die zu allem Überfluss auch noch variierende Titel verwenden, kann man für das Devil's-Pie-Skript anstatt application_name oder window_name auch window_role als Identifizierung verwenden:

xprop | grep WM_WINDOW_ROLE\(STRING\) 

Ein konkretes Anwendungsbeispiel hierfür wäre GIMP bis Version 2.6, dessen Dock und Bildfenster nicht über die beiden oben genannten Identifizierungsmöglichkeiten von Devil's Pie angesprochen werden können.

Sollte die oben beschriebene Methode zur Identifikation von Fenstern nicht funktionieren, muss eine .ds Datei im ~/.devilspie-Ordner mit dem Inhalt (debug) erstellt werden. Ist dies gemacht, wird nun devilspie im debug-Modus durch die Eingabe von

devilspie -d 

im Terminal ausgeführt. Nun werden alle momentan aktiven Fenster mit ihrem "Application Name", ihrer "Class" und ihrer "Geometry" angezeigt.

Diese Revision wurde am 15. Januar 2020 10:18 von DJKUhpisse erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Fenstermanager, Desktop