wmii::Konfiguration und Plugins

Window Manager Improved 2

wmii-Desktop
wmii-Desktop: Emacs, 2 × aterm

Im Sommer und Herbst 2006 habe ich den Windowmanager wmii benutzt. Mittlerweile bin ich auf seinen »kleinen Bruder« dwm umgestiegen – die Informationen auf dieser Seite beziehen sich alle noch auf die Version 3.1 von wmii und sind veraltet. Die unten stehenden Skripte funktionieren möglicherweise auch mit neueren Versionen von ruby-wmii, doch sind sie zum Teil fehlerhaft. Auf meiner dwm-Unterseite habe ich für dwm angepasste Versionen mancher Skripte, in denen ich die Funktionalität überarbeitet habe.

wmii steht für »Window Manager Improved 2« und ist ein schlanker Fenstermanager, der – ähnlich wie Larswm, Ion, evilwm und ratpoison – auf möglichst effektive Bedienbarkeit mit der Tastatur optimiert ist und sich an innovative Konzepte des Plan-9-Betriebssystems anlehnt. Im Gegensatz zu traditionellen Fenstermanagern und Desktop Environments (etwa Microsoft Windows, MacOS (X), Gnome oder das von mir zuvor genutzte KDE), die dem »WIMP«-Prinzip folgen (WIMP = Windows, Icons, Menues, Pointers (Maus)) setzt wmii auf ein alternatives Paradigma.

Fenster werden von wmii in Spalten (columns) verwaltet. Jede Spalte besitzt ein individuelles Layout: In ihr dargestellte Fenster können maximiert sein, untereinander dargestellt oder gestapelt (stacked) werden. Natürlich können die Fenster zwischen den Spalten verschoben werden. Zudem gibt wmii das unter Unix-Systemen übliche Workspace-Prinzip (dem Gruppieren von Anwendungen in bestimmten Ansichten, das Ergebnis sind gleichsam mehrere Desktops) zugunsten des »Tagging« auf: Fenster werden mit einem oder mehreren Tags versehen und werden in diesen Ansichten dann dargestellt. Dabei kann das Fenster jeweils entsprechend seiner Position im Layout unterschiedlich dargestellt werden. Diese Mechanismen ermöglichen ein »dynamisches Windowmanagement«, über das es auf der Homepage des Projektes heißt:

»Dynamic window management states that it is the window manager's job to manage windows – and not the user's job to have to set up some specialized layout that will only work for one specific work scenario. This has been the larswm motto for a long time. In contrast to static window management, the user rarely has to think about how to organize windows, no matter what he is doing or how many applications are running at the same time. The window manager adapts to the current environment and helps the user manage and mold it to his needs, rather than forcing it to use a preset, fixed layout and trying to shoehorn all windows and applications into it.«

Zudem ist wmii hochkonfigurierbar. Durch eine IPC-Schnittstelle (Interprozesskommunikation, ermöglicht die Kommunikation mit wmii), die am 9P-Protokoll von Plan 9 angelehnt ist, ist es möglich auf alle Ressourcen des Fenstermanagers über das Dateisystem zuzugreifen. Dies ermöglicht eine hohe Skriptbarkeit und individuelle Konfigurierbarkeit.

Die Programmierbarkeit von wmii führt zu einer Unmenge von Konfigurationsmöglichkeiten. Da es in der Welt der freien Software üblich ist mit anderen zu teilen, stellen viele wmii-Benutzer ihre Konfigurationsdateien zur Verfügung. Ich benutze ein Ruby-Skript von Mauricio Fernandez, das sich durch einfache Erweiterbarkeit mittels Plugins auszeichnet. In sein Skript sind viele sinnvolle Erweiterungen integriert bis hin zu einem flexiblen Bookmark-Manager, der komplett über Tastatur bedienbar ist und optional sogar eine del.icio.us-Integration anbietet.

Die Statuszeile meines Rechners sieht etwa so aus:

wmii-Statusleiste

Gegenüber Mauricios Version habe ich zusätzlich einen Wetterdienst eingebunden sowie eine Anzeige, welcher Song gerade abgespielt wird. Letztere ist allerdings auf eine Zusammenarbeit mit dem amarok-Musicplayer limitiert; ein entsprechendes Plugin für xmms findet sich auf den Seiten von Andy Gimblett. Zudem habe ich ein Clipboard für die Zwischenablage unter X als Plugin geschrieben.

Alle drei Erweiterungen sind als Plugin realisiert und sollten daher problemlos in Mauricios Skript integriert werden können. Zunächst der Quelltext für das Wetterplugin:

Download als html | txt

Genutzt wird ein Service des US-amerikanischen nationalen Wetterdienstes, der die weltweit gesammelten Wetterdaten per Webinterface zur Verfügung stellt. Von Benutzerseite ist lediglich der ICAO-Code der nächstgelegenen Wetterstation bzw. des Flughafens, an den diese angeschlossen ist. Der Code besteht aus einer vierstelligen Buchstabenfolge, von denen der erste (USA) bzw. die ersten beiden (der Rest der Welt) Buchstabe die Länderkodierung darstellen (etwa K für USA und ED für Deutschland), die restlichen den Flughafen bestimmen. Für meine Heimatstadt Hannover lautet der Code etwa EDDV, was voreingestellt ist. Der Flughafen kann eingestellt werden über einen Eintrag wie

  plugin_config["ollis-plugins:weather"]["metar"] = "eddv"
in wmii-config.rb. Eine Liste der verfügbaren ICAO-Codes findet sich hier.

Das Plugin ruft regelmäßig die lokalen Wetterdaten ab und stellt die Temparatur in der Statuszeile dar. Ein Linksklick auf das Feld öffnet ein Fenster, in dem nähere Informationen gegeben werden:

Wetter-Anzeige

Das Clipboard-Plugin merkt sich die letzten Selektierungen und stellt diese zur Anwahl bereit. Am ehesten lässt sich seine Funktionalität vielleicht anhand einer animierten Grafik aufzeigen:

Clipboard-Animation

Die verschiedenen Selektierungen können mit den Cursortasten angewählt werden. Zusätzlich kann mittels einer inkrementellen Suche die Auswahl eingegrenzt werden. Mit Return wird die Auswahl abgeschlossen.

Eine typische Konfiguration für das Plugin sieht so aus:

  plugin_config["ollis-plugins:clipboard"]["no_of_buff"] = 10
  from "olli@sopos.org" do
    use_bar_applet "clipboard"
    use_binding "clipboard_select"
  end

Zunächst wird die Anzahl der gemerkten Selektierungen auf 10 festgelegt. (Das ist zugleich der Standardwert, daher kann man auf diese Zeile auch verzichten.) Danach wird das Plugin geladen.

Das Clipboard-Plugin setzt das Kommandozeilentool xclip voraus. In der Debian-Distribution ist es enthalten, es kann einfach (als root) mittels aptitude install xclip installiert werden.

Ein weiteres Feature ist die Ausgabe der X-Window-Auswahl auch über einen Tastaturshortcut. Das setzt allerdings ein kleines C-Programm (updated: v0.1) voraus, das zunächst kompiliert werden muss. Diese Erweiterung kann dann mit

  plugin_config["ollis-plugins:clipboard"]["mouseclick_prog"] = "/path/to/klicki 2"
  from "olli@sopos.org" do
    use_binding "clipboard_print"
  end

eingebunden werden. Das C-Programm ist ganz schnell zusammengehackt und ziemlich dirty, ich bin für Verbesserungen dankbar.

Ich habe die Funktionen an MODKEY-h bzw. MODKEY-Shift-h gebunden, was meinem Tastaturlayout geschuldet ist. Die meisten Leute werden sich das umdefinieren wollen. – Anyway, hier ist der Code des Plugins:

Download als html | txt

Demgegenüber ist das Now-Playing-Plugin recht simpel gestrickt. Es hat die Funktion, den gerade abgespielten Song zu erfragen und in der Statuszeile darzustellen, wobei maximal die ersten ca. 35 Zeichen dargestellt werden (wenn es 36 oder 37 Zeichen sind, werden sie auch noch komplett dargestellt, deshalb das circa). Den gerade gespielten Song liest das Plugin aus der Datei ~/.nowplaying aus; es ist Aufgabe des Musicplayers, den aktuellen Song dort hineinzuschreiben. Unter Amarok kann dies mittels eines Plugins realisiert werden: Kurrently. Inwieweit andere Player ähnliche Funktionalitäten bieten, ist mir nicht bekannt, es gibt jedoch ein ruby-wmii-Plugin mit ähnlicher Funktionalität für xmms.

Download als html | txt

Die Plugins verteile ich sowohl unter den Bedingungen der GNU General Public License Version 2 oder eine spätere, von der Free Software Foundation herausgegebene, Version, wie auch unter denen der in der Ruby-eigenen Lizenz genannten. (Ihre Wahl, suchen Sie sich eine Lizenz aus.)

Wer Interesse daran hat: Meine wmii-Konfigurationsdatei und meine eigenen Plugins. In letzteren überschreibe ich einige Sachen der Standardplugins, die mir nicht so gut gefallen haben, das meiste sind jedoch bloß kosmetische Änderungen. Meine Konfigurationsdatei ist etwas eigen, da ich zum einen kein vi-Nutzer bin und mich nicht so recht an die Navigation mittels der Tasten hjkl gewöhnen kann, mit der standardmäßig die Fenster zwischen den Columns und innerhalb dieser bewegt und der Fokus umgeschaltet wird. Da ich mit zehn Fingern schreibe, ruht der rechte Zeigefinger auf dem j und müßte umgreifen, um das h zu erreichen. Ich bevorzuge daher die (auf deutschen Tastaturen) jklö-Tasten zum Navigieren. Entsprechend sind diese Tasten umbelegt. Zudem schreibe ich nicht mit dem Standard-QWERTY-Layout, sondern setze auf eine alternative, auf die deutsche Sprache optimierte Tastaturbelegung: das von Hanno Behrens entwickelte NEO-Tastaturlayout. Einige weitere Anpassungen ergeben sich daraus, dass ich ein Microsoft Natural Multimedia Keyboard benutze, dessen Sondertasten ich zum Teil auch unter wmii einsetze. Im Zusammenhang mit dem NEO-Tastaturlayout könnte auch meine xmodmap-Datei von Interesse sein, aus Gründen, derer ich mich nicht mehr recht erinnere, gibt es sogar deren zwei.


www.cacert.org
© 2006–2008 Oliver Heins <olli@sopos.org>
GnuPG-Key: https://sopos.org/pgp/olli.asc
GnuPG-Fingerprint: F27A BA8C 1CFB B905 65A8 2544 0F07 B675 9A00 D827
Letzte Änderung dieser Seite: Mittwoch, 6. August 2008, 01:15.