[[Vorlage(Getestet, bionic)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Programme_starten: Programme starten] [:Autostart: Automatischer Start von Programmen] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/config.png, 48, align=left)]] [wikipedia:Devil’s_Pie:] ist ein Fenstererkennungs-Programm, welches die Funktionalität von [:Fenstermanager:Fenstermanagern] erweitern kann. Inspiriert vom [wikipedia:Sawfish: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: * Der Webbrowser startet immer auf der dritten Arbeitsfläche und erscheint nicht in der Taskliste * Der Chat-Client hat ein Systray-Plugin, startet immer auf der sechsten Arbeitsfläche und erscheint nicht in der Taskliste * der RSS-Reader erscheint ebenfalls nicht in der Taskliste Die Weiterentwicklung konzentriert sich auf den Nachfolger [https://www.nongnu.org/devilspie2/ Devilspie2] {en}, dessen Syntax jedoch nicht mit Devil's Pie kompatibel ist. = Installation = Devil's Pie ist in den offiziellen Paketquellen enthalten und kann über folgendes Paket installiert [1] werden: {{{#!vorlage Paketinstallation devilspie, universe }}} = 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 = [[Bild(./gdevilspie_logo.png, 48, align=right)]] 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 [wikipedia:Regul%C3%A4rer_Ausdruck: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: {{{#!vorlage Befehl 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 [iawm::][https://web.archive.org/web/20150418115815/http://www.foosel.org/linux/devilspie wiki.foosel.net] {en} (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 [http://tronche.com/gui/x/icccm/sec-4.html#WM_CLASS WM_CLASS] {en}. Also öffnet man ein Terminal [5] und gibt folgenden Befehl ein: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 {{{#!vorlage Befehl devilspie -d }}} im Terminal ausgeführt. Nun werden alle momentan aktiven Fenster mit ihrem ''"Application Name"'', ihrer ''"Class"'' und ihrer ''"Geometry"'' angezeigt. = Links = * [iawm::][https://web.archive.org/web/20160817020836/http://www.burtonini.com/blog/computers/devilspie Projektseite] {en} - archiviert Version vom 17.08.2016 * [wikipedia:Devil’s Pie:] - Wikipedia * [gnomeprojects:DevilsPie:Devil's Pie documentation] {en} - Erklärung der Syntax * [http://karl-tux-stadt.de/ktuxs/?p=604 Mika’s Devil's Pie Howto] {de} - Blogbeitrag, 06/2007 * [https://www.knetfeder.de/linux/index.php?id=165 Linux-Vorteile nutzen: Programme automatisch auf verschiedene Arbeitsflächen verteilen] {de} - Blogbeitrag, 03/2014 # tag: Desktop, Fenstermanager