awesome – Ein Tiling-Fenstermanager

Neben den großen Desktopumgebungen wie GNOME oder KDE kann man auch leichtgewichtigere Fenstermanager wie Xfce oder LXDE verwenden. Eine besondere Klasse davon sind die so genannten Tiling-Fenstermanager. Diese ordnen alle Fenster automatisch so an, dass sie sich nicht überschneiden. Es ist also nur noch selten nötig, ein Fenster zu verschieben oder seine Größe zu ändern. awesome ist einer dieser Tiling-Fenstermanager.

Zu Beginn kann dieses Konzept recht verwirrend sein, aber sobald man sich an das Arbeiten mit einem Tiling-Fenstermanager gewöhnt hat, ist man damit schneller und produktiver als mit gewöhnlichen Fenstermanagern. awesome wendet sich, wie die meisten Tiling-Fenstermanager, an Nutzer, die gerne viele Konfigurationsmöglichkeiten haben. Man wird von awesome aber nicht dazu gezwungen, sich ausführlich mit der Konfiguration zu beschäftigen. Auch Einsteigern kann man empfehlen, sich awesome einmal anzuschauen.

awesome mit mehreren Fenstern.

awesome mit mehreren Fenstern.

Der Fenstermanager kann komplett über die Tastatur gesteuert werden, großteils ist aber auch die Bedienung mit der Maus möglich. Da awesome ein relativ neuer Fenstermanager ist, unterstützt er viele Freedesktop Standards, z.B. das Benachrichtigungsfeld (System Tray) oder Popups mit Nachrichten wie man es aus GNOME oder KDE gewohnt ist. awesome kann auch sehr gut mit mehreren Bildschirmen umgehen.

Die Konfiguration von awesome erfolgt über die Programmiersprache Lua. Alle Komponenten des Fenstermanagers entsprechen Lua Modulen. Die Konfigurationsdatei ist ein Lua-Programm, das alle Komponenten initialisiert und konfiguriert. Dadurch kann man die einzelnen Komponenten sehr frei konfigurieren oder diese auch entfernen. Dies hat im Gegensatz zu vielen anderen Tiling-Fenstermanagern auch den Vorteil, dass nicht für jede Komponente wie z. B. das Programmmenü ein extra Programm gestartet werden muss, man aber auch nicht weniger Konfigurationsmöglichkeiten hat.

Dieser Artikel bezieht sich nur auf awesome 3, frühere Versionen wurden komplett anders konfiguriert. Version 3 des Fenstermanagers befindet sich in den Paketquellen aller gängigen Distributionen mit Ausnahme von Fedora. Dort gibt es Probleme mit Abhängigkeiten von Programmbibliotheken. Informationen dazu findet man im awesome-Wiki.

Installation

Der Fenstermanager wird durch das Paket awesome über die Paketverwaltung installiert. Um awesome zu nutzen, muss dieser beim Login als Fenstermanager gewählt werden. Im Normalfall kann awesome einfach beim Anmelden im Login-Manager wie GDM oder KDM ausgewählt werden. Bei einigen anderen Login-Managern, wie z. B. XDM, muss die Datei ~/.xsession bearbeitet werden:

1
2
#!/bin/sh
exec awesome

Es reicht nicht aus, awesome im Terminal auszuführen, da zuvor der X-Server gestartet werden muss, aber noch kein anderer Fenstermanager laufen darf, wie z. B. Metacity oder Mutter bei GNOME.

Bedienung

Überblick

Beim Start befindet sich am oberen Bildschirmrand eine Leiste, die viele Funktionen bietet: Ganz links findet man ein Knopf, der bei einem Klick das Hauptmenü erscheinen lässt. Rechts davon ist die Liste mit den Tags. Diese sind hier einfach von 1 bis 9 durchnummeriert. Daneben ist die Fensterliste, in der alle Fenster mit den gewählten Tags angezeigt werden. Ganz rechts sieht man das aktuelle Layout, nach dem die Fenster angeordnet werden. Außerdem findet man dort eine Uhr und das Benachrichtigungsfeld, das vermutlich noch leer ist.

Obere Leiste von awesome.

Im Benachrichtigungsfeld kann z. B. der GNOME-Netzwerkmanager angezeigt werden. Das entsprechende Applet wird über nm-applet gestartet. Genauso kann man andere Applets für Energieverwaltung oder ähnliches benutzen.

Bevor nun die Steuerung von awesome genauer betrachtet wird, müssen noch ein paar Grundbegriffe geklärt werden.

Tags

awesome basiert auf Tags. Ein ähnliches Konzept kennen die meisten Linux-Nutzer von den verbreiteten Desktop-Umgebungen. Dort kann man mehrere virtuelle Desktops nutzen. So kann man beispielsweise auf der einen Arbeitsfläche den Browser geöffnet haben und surfen. Auf einer anderen Arbeitsfläche kann man dann mehrere andere Fenster öffnen und damit arbeiten. Das Trennen auf verschiedenen Arbeitsflächen hat den Vorteil, dass man schnell zwischen diesen hin und her wechseln kann.

Dies ist bei awesome fast so umgesetzt: Jedem Fenster wird mindestens ein Tag zugeordnet, wobei alle Fenster angezeigt werden, die einen bestimmten Tag haben. Der Tag entspricht also etwa einem Desktop. Das besondere im Vergleich zu gewöhnlichen Arbeitsflächen ist, dass ein Fenster auch mehrere Tags haben kann. Im Vergleich kann es sich also auf mehreren Arbeitsflächen gleichzeitig befinden. Genau so können auch mehrere Tags gleichzeitig angezeigt werden. awesome ordnet die Fenster dann immer so an, dass sich nichts überschneidet.

Layouts

Die Layouts bestimmen, wie die Fenster angeordnet werden. Beim Starten von awesome ist das Floating-Layout ausgewählt. Dabei wird kein Tiling angewendet, sondern die Fenster verhalten sich, wie man es gewohnt ist: Man kann sie verschieben und ihre Größe ändern (wie das geht, kommt später).

Die meisten Layouts ordnen die Fenster ähnlich einer Tabelle an. In der einen Hälfte des Bildschirms werden die Fenster meist größer dargestellt, in der anderen werden die restlichen Fenster kleiner dargestellt. Dieses Verhalten wird immer durch das Bild oben rechts in der Leiste beschrieben.

Es gibt noch ein paar exotischere Layouts, bei denen die Fenster beispielsweise spiralförmig kleiner werden. Außerdem gibt es Layouts, die immer ein Fenster im Vollbild zeigen – einmal mit der oberen Leiste und einmal wirklich auf dem ganzen Bildschirm.

Steuerung

awesome wird über Tastenkombinationen gesteuert, von denen hier nur die wichtigen genannt werden. Alle Tastenkombinationen können in der Manpage von awesomenachgelesen werden. Sie enthalten immer die Taste „Mod4“, womit die „Windows“-Taste gemeint ist. Diese wird auch „Super“-Taste genannt. Bei Mac handelt es sich hier um die „Command“-Taste.

Allgemein
„Mod4“ + „Enter“ Terminal öffnen
„Mod4“ + „R“ Eingabeaufforderung im Panel
„Mod4“ + „Shift“ + „C“ Fenster schließen
„Mod4“ + „Space“ nächstes Layout

Fenster
„Mod4“ + „J“ Fokus auf nächstes Fenster
„Mod4“ + „K“ Fokus auf vorheriges Fenster
„Mod4“ + „Shift“ + „J“ Wechsel mit nächstem Fenster
„Mod4“ + „Shift“ + „K“ Wechsel mit vorherigem Fenster
„Mod4“ + „Strg“ + „Space“ Fenster aus Tiling auskoppeln bzw. ins Tiling zurückholen

Tags
„Mod4“ + „1-9“ auf Tag 1-9 wechseln
„Mod4“ + „Shift“ + „1-9“ Fenster auf Tag 1-9 verschieben

Es benötigt ein wenig Übung, bis man mit awesome zurecht kommt, wenn man noch keinen Tiling-Fenstermanager verwendet hat. Am Anfang ist, wie gesagt, das Floating Layout ausgewählt, die Fenster werden also nicht automatisch angeordnet. Deshalb sollte man erst einmal mit „Mod4“ + „Space“ in ein Tiling Layout wechseln.

Zum Üben öffnet man am besten ein paar Terminals und Programme, verschiebt die Fenster und probiert alle Tastenkombinationen aus den Tabellen aus.

Um Fenster mit der Maus zu verschieben oder deren Größe zu ändern, muss „Mod4“ gedrückt sein. Mit der linken Maustaste kann man dann das Fenster verschieben, mit der rechten wird die Größe geändert.

Für den Anfang empfiehlt es sich, ein Cheatsheet mit allen Tastenkombinationen auszudrucken. Einen guten Überblick bietet das Cheatsheet von cmichi auf GitHub. Wer gerne bastelt, kann auch mein Cheatsheet in Form eines Würfels verwenden.

Konfiguration

Sobald man mit der Steuerung von awesome zurecht kommt, kann man sich mit den vielen Konfigurationsmöglichkeiten beschäftigen. Man konfiguriert awesome über das Lua Skript rc.lua. Programmierkenntnisse in Lua sind für kleinere Änderungen nicht nötig.

Die Konfigurationsdatei rc.lua befindet sich im Ordner /etc/xdg/awesome. Damit die Einstellungen nur für den aktuellen Nutzer geändert werden, sollte der Inhalt dieses Ordners zuerst nach ~/.config/awesome kopiert werden.

Die Datei rc.lua wird beim Start von awesome ausgeführt. Im Laufe des Skripts werden die Layouts, Tags, das Menü,das Panel und alle Tastenkombinationen definiert. Die Datei ist gut kommentiert, was das Bearbeiten erleichtert. Kommentare beginnen in Lua mit --.

Tags

In der Standardkonfiguration werden die Tags mit den Ziffern 1 bis 9 benannt. Man kann die Tags beliebig umbenennen. In der Konfigurationsdatei werden die Tags so definiert:

1
2
3
4
5
6
7
-- {{{ Tags
-- Define a tag table which hold all screen tags.
tags = {}
for s = 1, screen.count() do
-- Each screen has its own tag table.
tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1])
end

Man kann statt den Zahlen auch Wörter verwenden, die man in Anführungszeichen setzen muss:

1
tags[s] = awful.tag({ "www", "chat", "mail", 4, 5, 6, 7, 8, 9 }, s, layouts[1])

So kann man die Tags beliebig umbenennen. Um die Änderungen zu übernehmen, muss awesome neugestartet werden: Dies kann über das Menü oder mit der Tastenkombinationen „Mod4“ + „Strg“ + „R“ geschehen. Aber Achtung: Wenn ein Fehler in der Datei rc.lua ist, startet awesome nicht mehr richtig. Es gibt eine Möglichkeit, die Konfiguration auf Fehler zu überprüfen:

1
$ awesome -k

Dies bietet allerdings keine Garantie, dass wirklich kein Fehler vorhanden ist. Syntaxfehler kann man so aber immerhin verhindern.

Layouts

Alle verfügbaren Layouts werden in rc.lua in der Variable layouts gespeichert:

1
2
3
4
5
6
layouts =
{
awful.layout.suit.floating,
awful.layout.suit.tile,
...
}

Um das Standardlayout zu ändern, muss folgende Zeile bearbeitet werden. Die Namen der Tags sind dabei egal.

1
2
tags[s] = awful.tag({ "www", "chat", "mail", "work", 5, 6, 7, 8, 9 }, s,
layouts[1])

Die Ziffer bei layouts[1] bezeichnet die Position des Layouts in der Liste, beginnend bei 1. Der Standard ist hier also Floating. Damit Tiling verwendet wird, muss die Ziffer z. B. auf 2 geändert werden.

Es ist auch möglich, für jeden Tag ein eigenes Layout zu bestimmen, oder sogar, auf jedem Bildschirm die Tags unterschiedlich zu konfigurieren. Wie dies geht, wird in den FAQ beschrieben.

Rules

awesome ermöglicht es, Regeln für Programmfenster zu erstellen und einem Programm immer die gleichen Eigenschaften zuzuweisen. So kann man z. B. erreichen, dass der Browser stets den Tag „www“ bekommt.

In der Konfigurationsdatei steht fast am Ende:

1
2
3
4
5
6
-- {{{ Rules
awful.rules.rules = {
...
{ rule = { class = "MPlayer" },
properties = { floating = true } },
...

Hier wird bestimmt, dass MPlayer im Floating-Modus startet. Durch hinzufügen folgender Regel startet Firefox immer auf Tag 1. Auch wenn dieser „www“ heißt, wird er dennoch mit der Nummer 1 angesprochen.

1
2
{ rule = { class = "Firefox" },
properties = { tag = tags[1][1] } },

Bei tags[1][1] steht die erste Ziffer für den Bildschirm, also Bildschirm 1, die zweite für den Tag, also Tag 1. Möchte man, dass Firefox auf Tag 3 auf dem zweiten Bildschirm startet, müsste es tags[2][3] heißen.

Nun stellt sich noch die Frage, wie man an den Klassennamen für eine Regel kommt. Dies ist mit dem Programm xprop aus dem Paket x11-utils möglich:

1
$ xprop WM_CLASS

Nach dem Klick auf ein Fenster wird der Klassenname ausgegeben. Für xterm sieht die Ausgabe so aus:

1
WM_CLASS(STRING) = "xterm", "UXTerm"

Der Klassenname ist der zweite Name, hier also UXTerm. Der erste Name, hier xterm, kann mit der Variable instance abgefragt werden. Wichtig ist, dass die neuen Regeln zwischen den äußeren Klammern stehen.

1
2
3
4
awful.rules.rules = {
-- Hier müssen alle neuen Regeln hin
}
-- Und nicht hier

Weitere Informationen über die Regeln findet man in der Referenz von awesome.

Eigene Tastenkombinationen

Es ist auch möglich, eigene Tastenkombinationen hinzuzufügen oder die vorhandenen zu ändern. Die Definition der Tastenkombinationen beginnt so:

1
2
3
-- {{{ Key bindings
globalkeys = awful.util.table.join(
awful.key({ modkey, }, "Left", awful.tag.viewprev ),

Die Variable modkey wird am Anfang der Datei als „Mod4“ definiert. Um das Programm xterm mit der Tastenkombination „Alt“ + „T“ zu starten, ist folgender Eintrag nötig. Statt Alt muss man Mod1 schreiben.

1
awful.key({"Mod1"}, "t", function () awful.util.spawn("/usr/bin/xterm") end),

Ein weiteres Beispiel ist das Ändern der Lautstärke über die entsprechenden Tasten. Dabei wird das Programm amixer verwendet und der Masterkanal um 5 % lauter oder leiser gestellt.

1
2
3
4
5
awful.key({}, "XF86AudioRaiseVolume", function ()
awful.util.spawn("/usr/bin/amixer -q set Master 5\%+", false) end),
awful.key({}, "XF86AudioLowerVolume", function ()
awful.util.spawn("/usr/bin/amixer -q set Master 5\%-", false) end),
awful.key({}, "XF86AudioMute", function () awful.util.spawn("/usr/bin/amixer -q set Master toggle", false) end),

Die Keycodes der Tasten erhält man im Übrigen durch das Programm xev, das wie xprop auch im Paket x11-utils enthalten ist.

Menü

Das Menü wird ebenfalls in der Datei rc.lua definiert:

1
2
3
4
5
mymainmenu = awful.menu({ items = {
{ "awesome", myawesomemenu, beautiful.awesome_icon },
{ "Debian", debian.menu.Debian_menu.Debian },
{ "open terminal", terminal }
}})

mymainmenu ist das Hauptmenü, das beim Klick auf das Menüsymbol erscheint. In dieses Menü wird das in der Datei zuvor definierte myawesomemenu und das Menü mit den Programmen eingebunden. Außerdem enthält es einen Eintrag, um ein Terminal zu starten.

Ein Menüeintrag ist immer gleich aufgebaut: Der erste Parameter ist der angezeigte Name. Als Zweites wird ein Befehl angegeben, der ausgeführt wird, oder ein weiteres Menü. Zuletzt kann noch ein Icon angegeben werden, was aber nicht notwendig ist. Falls der Pfad zu einem Icon falsch ist oder das Dateiformat nicht unterstützt wird, wird das ganze Untermenü nicht angezeigt.

Automatisch erstelltes Programmmenü unter Debian.

Unter Debian und Ubuntu wird das Programmmenü in der Datei /etc/xdg/awesome/debian/menu.lua automatisch erstellt und aktualisiert. Diese Datei wird am Anfang der rc.lua eingebunden:

1
require("debian.menu")

Der Ordner /etc/xdg/awesome/debian muss auch nach ~/.config/awesome kopiert werden, damit das Einbinden immer noch funktioniert. Dies hat allerdings den Nachteil, dass das Menü nicht mehr weiter aktualisiert wird.

Eine Möglichkeit wäre das Aktualisieren der lokalen Menükonfiguration durch ein Skript. Dies ist im awesome-Wiki beschrieben.

Man kann das Menü auch manuell pflegen. Dies hat den Vorteil, dass es übersichtlicher bleibt.

Hintergrundbild

Das Hintergrundbild wird im verwendeten Thema definiert. Dieses wird am Anfang der rc.lua eingebunden:

1
beautiful.init("/usr/share/awesome/themes/default/theme.lua")

Für Änderungen empfiehlt es sich wieder, die entsprechenden Datei ins Benutzerverzeichnis zu kopieren. Hier sollte also/usr/share/awesome/themes/default/theme.lua nach ~/.config/awesome kopiert werden. Die oben genannte Zeile in rc.lua muss dann entsprechend angepasst werden:

1
beautiful.init(awful.util.getdir("config") .. "/theme.lua")

Statt awful.util.getdir("config") kann man natürlich auch den kompletten Pfad angeben. So funktioniert die Konfiguration aber auch, wenn sich das Benutzerverzeichnis ändert.

Um das Hintergrundbild zu ändern, muss die folgende Zeile in der Datei theme.lua bearbeitet werden:

1
theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/default/background.png" }

Hier kann nun der Pfad zum neuen Hintergrund eingetragen werden. Das Programm awsetbg ist ein Wrapper, der ein passendes Programm sucht, um das Bild anzuzeigen, wie z. B. feh.

awsetbg bietet auch die Funktion, das letzte Hintergrundbild wieder zu setzen. In der Datei theme.lua muss dann stehen:

1
theme.wallpaper_cmd = { "awsetbg -l" }

Jetzt setzt man sich das gewünschte Hintergrundbild einfach mit awsetbg und es wird bei jedem Starten wieder gesetzt. Das hat den Vorteil, dass man zum Ändern des Bildes nichts an der Konfigurationsdatei ändern muss.

Über ein Thema kann man das Aussehen von awesome auch noch weiter anpassen. Genauere Informationen dazu findet man wieder im awesome-Wiki. Dort gibt es auch eine Sammlung von Themes.

Widgets

Widgets können zu der oberen Leiste hinzugefügt werden und zeigen dann bestimmte Informationen an. Es gibt einige Bibliotheken für awesome, die Widgets für alle möglichen Zwecke bereitstellen. Hier sollen nur Vicious und Obvious genannt werden. Widgets können nicht nur Text, sondern auch Graphen, Bilder und Fortschrittsbalken anzeigen.

In den oben genannten Bibliotheken gibt es z. B. Widgets, um die Lautstärke, CPU Temperatur, Netzwerk Traffic oder ähnliches anzuzeigen. Auch ist es möglich Daten aus MPD (Music Player Daemon) auszulesen oder die Anzahl der ungelesenen Mails anzuzeigen.

Man kann sich natürlich auch eigene Widgets schreiben. Es ist zudem möglich, den Inhalt mit einem Shell-Skript zu erzeugen. Mit dem Programm awesome-client können die Widgets über das D-Bus-System verändert werden.

Fazit

awesome ermöglicht sehr produktives Arbeiten, da man sich kaum um die Anordnung der Fenster kümmern muss. Das Konzept ist anfangs zwar etwas gewöhnungsbedürftig, aber es lohnt sich auf jeden Fall.

awesome kann sehr flexibel konfiguriert werden. In diesem Artikel konnten natürlich bei weitem nicht alle Möglichkeiten genannt werden. Viele weitere Informationen und Ideen findet man auf der Projekthomepage, besonders im Wiki der Seite und den FAQ.


Der Artikel awesome – Ein Tiling-Fenstermanager von Sven Hertle, erschienen bei freiesMagazin unterliegt der CC-BY-SA-3.0 Unportted. Es wird die Erlaubnis gewährt, den Artikel unter den Bestimmungen der Creative-Commons-Lizenz zu kopieren, zu verteilen und/oder zu modifizieren.