River kombiniert die Vorteile des Wayland-Protokolls mit der Produktivität und Übersichtlichkeit von Tiling-Window-Managern unter X11.
Das moderne Display-Server-Protokoll Wayland versucht, die Einschränkungen des in die Jahre gekommenen X11-Systems zu überwinden. Als schlankere und effizientere Alternative zielt es darauf ab, die Kommunikation zwischen der grafischen Benutzeroberfläche und der Hardware zu optimieren. Daraus resultieren eine bessere Performance, geringere Latenzzeiten und eine vereinfachte Architektur. Anfangs fehlten Wayland noch viele Funktionen, was das Interesse in der Community eher dämpfte. Mittlerweile steht jedoch außer Zweifel, dass es binnen weniger Jahren X11 vollständig ersetzen wird.
Eine effiziente Möglichkeit für das Management von Fenstern bieten unter Wayland sogenannte Tiling Compositors. Sie kombinieren die Vorteile des Wayland-Protokolls mit der Produktivität und Übersichtlichkeit von Tiling-Window-Managern unter X11. Im Gegensatz zu traditionellen Ansätzen ordnen diese Compositors die Fenster fliesenartig an, also ohne Überlappungen. Wie bei Tiling-Window-Managern erfolgt die Bedienung von Tiling Compositors in erster Linie über die Tastatur.
Eines der bisher wenig bekannten Exemplare dieser Gattung heißt River [1]. Ebenso wie bei Hyprland handelt es sich dabei um einen dynamischen Tiling Wayland Compositor, der die Fenster standardmäßig nach dem Master-and-Stack-Layout anordnet (Abbildung 1). Dabei nimmt das zuletzt geöffnete Programm automatisch ungefähr die Hälfte des Bildschirms ein. Ein manuelles Anordnen der Fenster wie bei Sway entfällt dadurch.

Abbildung 1: In der Standardeinstellung ordnet River die Fenster nach dem sogenannten Master-and-Stack-Layout an.
Im Gegensatz zu Hyprland verzichtet River jedoch bewusst auf optische Effekte wie abgerundete Ecken, Transparenz oder Animationen. Es ist daher nicht zuletzt für ehemalige Anwender minimalistischer Window Manager wie Dwm oder Bspwm interessant, die eine simple und effiziente Fensterverwaltung bevorzugen.
River installieren
Wie Hyprland stammt auch River aus der Arch-Linux-Welt, weshalb die Installation unter Arch und Derivaten mit sudo pacman -S river am einfachsten gelingt. Es empfiehlt sich, zusätzlich auch Foot einzurichten, das River in der Standard-Konfiguration als Terminalemulator verwendet. Als nützlich erweisen sich außerdem Hilfsprogramme wie die Statusleiste Waybar und das Anwendungsmenü Wofi (Abbildung 2).
Sofern Sie River auf einem System installieren, das bereits eine Desktop-Umgebung wie KDE Plasma mitbringt, müssen Sie keine zusätzlichen Programme wie Webbrowser, Dateimanager, Bildbetrachter, Texteditor und so weiter installieren.
Wie andere Wlroots-basierte Compositors arbeitet River mit dem Display-Manager SDDM zusammen. Dasselbe gilt vermutlich auch für andere Wayland-kompatible Display-Manager. Nutzen Sie keinen solchen, wechseln Sie mit [Strg]+[Alt]+[F3] auf eine Textkonsole und starten Sie den Compositor dort mit dem Befehl river.
Fedora führt ein River-Paket in den Paketquellen. Unter Debian und Ubuntu gestaltet sich die Installation etwas komplizierter: Hier gilt es, sowohl River als auch Wlroots [2] aus dem Quellcode zu kompilieren. Dabei sollten Sie vor allem zwei Dinge beachten: Kompilieren Sie unbedingt die Version von Wlroots, die das verwendete River-Release erfordert. So setzt etwa das zu Redaktionsschluss aktuelle River 0.3.2 Wlroots in der Version 0.17.2 voraus. Letzteres war zu diesem Zeitpunkt zwar nicht das neueste Release, doch mit dem aktuellsten scheiterte das Kompilieren von River (Abbildung 3).

Abbildung 3: Für Ubuntu und Debian gibt es keine Binärpakete von River. Beim Kompilieren des Programms gilt es, genau auf die Version der Wlroots-Bibliothek zu achten.
Achten Sie beim Kompilieren von Wlroots außerdem darauf, alle Abhängigkeiten zu erfüllen, insbesondere auch die optionalen. Unter Ubuntu 24.04 konnten wir im Test einige Pakete für die Xwayland-Unterstützung nicht finden, weshalb diese Funktion nicht verfügbar war. Ubuntu- und Debian-Nutzer sollten daher darauf achten, dass wichtige Anwendungen wie Dateimanager, Bildbetrachter, Texteditor und Webbrowser nativ unter Wayland laufen und kein Xwayland erfordern. Das ist bei einem Großteil der Programme wie etwa Dolphin, Thunar oder Firefox bereits der Fall. Unter Arch Linux und Derivaten funktionierten jedoch auch Programme wie Darktable oder Krita tadellos, die derzeit noch Xwayland brauchen.
Konfiguration anpassen
Haben Sie River unter Arch Linux aus dem Repository installiert und nutzen SDDM, gibt es im SDDM-Menü bereits einen Eintrag für River, der Compositor lässt sich theoretisch vom Display-Manager aus starten. Nutzen kann man River so jedoch noch nicht, denn es kennt keine Tastaturkürzel. Die definiert erst eine Konfigurationsdatei. Unter Arch Linux finden Sie im Verzeichnis /usr/share/river/example/ eine Vorlage.
Kopieren Sie von dort die Datei mit dem Namen init in das Verzeichnis ~/.config/river, öffnen Sie sie in einem Texteditor und nehmen Sie zumindest eine Änderung vor. Für ein deutsches Tastaturlayout fügen Sie am unteren Ende der Datei die Zeile riverctl keyboard-layout de in den Text ein. Falls Sie als Terminalemulator nicht Foot nutzen möchten, scrollen Sie danach nach oben und ändern Sie die erste, nicht auskommentierte Zeile riverctl map normal Super+Shift Return spawn foot. Ersetzen Sie hier foot durch den Namen des gewünschten Terminalemulators, etwa alacritty oder kitty. Sobald Sie die Änderungen in der Konfigurationsdatei gespeichert haben, können Sie River starten und nutzen.
Interessant ist in diesem Zusammenhang, dass es sich bei der Konfigurationsdatei von River eigentlich um ein Shell-Skript handelt. Dem Entwickler zufolge könnte sie auch in irgendeiner anderen Programmiersprache geschrieben sein, wie zum Beispiel Python. Sie muss lediglich zwei Bedingungen erfüllen: Der Dateiname muss init lauten, und sie muss ausführbar sein. Im offiziellen Wiki von River finden Sie auch Beispiele für River-Konfigurationsdateien in anderen Programmiersprachen.
Erste Schritte
Wenn Sie River das erste Mal starten, sehen Sie lediglich einen türkisfarbenen Bildschirmhintergrund. Um den Terminalemulator aufzurufen, drücken Sie [Super]+[Umschalt]+[Eingabe]. Das Terminal füllt zunächst den gesamten Bildschirm aus. Geben Sie irgendeinen Text in den Terminal ein, drücken Sie jedoch nicht die Eingabetaste. Starten Sie stattdessen mit [Super]+[Umschalt]+[Eingabe] ein weiteres Terminalfenster. Sie sehen, dass sich das erste Fenster auf weniger als die Hälfte des Bildschirms verkleinert hat und sich nun in der rechten Bildschirmhälfte befindet.
Den Platz links nimmt das neue Terminalfenster ein, das den Rest des Bildschirms ausfüllt. Geben Sie im neuen Terminal zum Beispiel den Befehl firefox ein und drücken Sie die Eingabetaste. Daraufhin startet der Webbrowser, den River wiederum so in der linken Bildschirmhälfte platziert, dass er etwas mehr als die Hälfte des Bildschirms ausfüllt. Die beiden Terminalfenster befinden sich rechts davon, wo sie sich den vorhandenen Platz teilen.
Drücken Sie [Super]+[Q], um das Firefox-Fenster wieder zu schließen. Mit [Super]+[Umschalt]+[ 2] verschieben Sie ein Fenster auf den zweiten virtuellen Desktop, zu dem Sie via [Super]+[ 2] wechseln. Mit [Super]+[Umschalt]+[E] beenden Sie River. Die Konfigurationsdatei init definiert noch zahlreiche weitere Tastaturkürzel.
Tastaturkürzel erstellen
Es wäre recht umständlich, jedes Programm aus einem Terminalfenster aufzurufen. Viel eleganter starten Sie Anwendungen mithilfe eines Programmstarters wie Wofi. Das erfordert, dass Sie in der Konfigurationsdatei von River ein Tastaturkürzel für Wofi erstellen. Öffnen Sie dazu die Konfigurationsdatei init mit einem Texteditor. Wenn Sie die Standardkonfiguration studieren, dann sehen Sie, dass man Tastaturkürzel für River nach einem verhältnismäßig einfachen Schema definiert.
Anhand des Tastaturkürzels etwa für Foot lässt sich die grundlegende Struktur von Tastaturkürzeln in River leicht erklären. Die Befehlszeile beginnt immer mit riverctl map normal. Das zeigt an, dass es sich um ein einfaches Tastaturkürzel im sogenannten normalen Modus handelt. River erlaubt es, für Tastaturkombinationen verschiedene Modi zu definieren. Das erlaubt, derselben Tastaturkombination situationsabhängig mehrere Aktionen beziehungsweise Befehle zuzuweisen.
Anschließend folgt mit Super+Shift Return das eigentliche Tastaturkürzel. Beachten Sie, dass die Angaben für Modifikationstasten wie Super, Shift, Control oder Alt immer durch Pluszeichen miteinander verbunden sein müssen. Zu guter Letzt folgt der Befehl spawn. Er zeigt an, dass es sich beim darauffolgenden Befehl um ein Shell-Kommando handelt. Am Ende steht der Name des auszuführenden Programms oder Befehls. Umfasst er mehr als ein Wort (Befehl) müssen Sie ihn in Anführungszeichen setzen.
Nach dem beschriebenen Schema erstellen Sie wie in der zweiten Zeile von Listing 1 gezeigt ein Kürzel, das mit [Super]+[W] den Anwendungsstarter Wofi aufruft. Sinnvoll ist daneben ein Shortcut für den Webbrowser Firefox (letzte Zeile).
Listing 1
Tastaturkürzel anlegen
### Anwendungsstarter Wofi aufrufen riverctl map normal Super W spawn "wofi -S run" ### Firefox starten riverctl map normal Super+Shift F spawn firefox
Damit die Konfigurationsänderungen greifen, speichern Sie die Änderungen, beenden River mit [Super]+[Umschalt]+[E] und starten dann den Compositor neu. Wenn Sie nun [Super]+[W] drücken, erscheint in der Mitte des Bildschirms das helle Fenster des Anwendungsstarters Wofi. An dessen oberen Rand befindet sich ein Eingabefeld, in das Sie den Namen des Programms eingeben, das Sie ausführen möchten. Anwendungen, deren Name die eingegebene Zeichenfolge enthält, erscheinen in der Liste unterhalb des Eingabefelds. Mit den Pfeiltasten wählen Sie dann das gewünschte Programm aus und starten es durch einen Druck auf die Eingabetaste.
Die Standardkonfiguration von Wofi fällt zugegebenermaßen optisch nicht besonders ansprechend aus. Wie man dem Programm ein besseres Erscheinungsbild verleiht, erklärt der Artikel “Effizientes Duo” über Waybar und Wofi [3].
Autostart
Der Befehl spawn erlaubt auch das Definieren von Programmen, die River automatisch beim Start ausführt. Dazu muss er direkt hinter riverctl stehen. Der dritte Bestandteil der Befehlskette ist der Name des aufzurufenden Programms. Die Statusleiste Waybar starten Sie etwa mithilfe der Konfigurationszeile riverctl spawn waybar. Um beim Start von River ein Hintergrundbild auf den Desktop zu zeichnen, installieren Sie das Programm Swaybg und ergänzen die Konfigurationsdatei um folgende Zeile:
riverctl spawn "swaybg -i /Pfad/zum/Bild.jpg -m fill"
Die Option -m fill eignet sich vor allem für Bilder, deren Seitenverhältnis nicht mit dem des Bildschirms übereinstimmt. Sie bewirkt eine geringfügige Vergrößerung des Bilds, wobei Swaybg oben und unten respektive links und rechts jeweils einen Streifen abschneidet, damit das Wallpaper exakt auf den Bildschirm passt. Auch das automatische Starten eines Polkit-Agents empfiehlt sich.
Mit riverctl spawn lassen sich beim Starten des Compositors auch Shell-Skripte ausführen. Das ist vor allem in Kombination mit den Programmen Swayidle und Swaylock sinnvoll. Sie dienen dazu, den Bildschirm bei Untätigkeit zu sperren und den PC nach einer bestimmten Zeit der Untätigkeit automatisch in den Standby zu versetzen. Erstellen Sie dafür im Verzeichnis ~/.config/river/ ein Shell-Skript mit dem Dateinamen sleep.sh und fügen Sie den Text aus Listing 2 ein. Speichern Sie die Änderungen und vergessen Sie nicht, die Datei ausführbar zu machen. Fügen Sie dann in die Konfigurationsdatei von River die folgende Zeile ein:
riverctl spawn /home/$USER/.config/river/sleep.sh
Das automatische Starten des Skripts bewirkt, dass Swayidle nach fünf Minuten den Bildschirm sperrt und nach weiteren fünf Minuten das System in den Ruhemodus versetzt. Die Bildschirmsperre greift auch dann, wenn Sie das System manuell in den Standby versetzen.
Listing 2
Autostart-Skript für Swayidle
swayidle -w \ timeout 300 'swaylock -f' \ timeout 600 'systemctl suspend' \ before-sleep 'swaylock -f'
Waybar konfigurieren
Beim Konfigurieren von Waybar für River gilt es, einige Besonderheiten zu beachten. Die Statusleiste besitzt vier River-spezifische Module. Das Modul mode signalisiert den gerade aktiven Modus für die Tastaturkombinationen. Das Modul tags zeigt die virtuellen Arbeitsflächen an und informiert darüber, auf welcher davon man sich gerade befindet. Die Module window und layout nennen den Namen des aktuell fokussierten Fensters beziehungsweise das gerade aktive Fensterlayout (Abbildung 4). Die wichtigsten Module sind zweifellos window und tags.
Um sie in der Waybar anzuzeigen, müssen Sie die Konfigurationsdateien von Waybar modifizieren. Öffnen Sie dazu als Erstes die Datei config.jsonc, die normalerweise in ~/.config/waybar/ liegt. Fehlt sie dort, kopieren Sie sie von /etc/xdg/waybar/ dorthin. Suchen Sie zunächst die Gruppe "modules-left". Sie umfasst die Module, die Waybar auf der linken Seite anzeigt. Ergänzen Sie die Liste der Module um "river/tags". Achten Sie darauf, nach dem Namen des Moduls ein Komma einzufügen, falls es nicht das letzte in der Liste ist.
Außerdem müssen Sie für das Modul einige zusätzliche Einstellungen definieren, insbesondere, wie viele virtuelle Desktops/Tags Waybar anzeigen soll und wie diese heißen. Fügen Sie dazu unterhalb der Modullisten den Text aus Listing 3 ein. Er legt fest, dass die Leiste maximal sechs durchnummerierte virtuelle Arbeitsflächen anzeigt.
Listing 3
River-Tags konfigurieren
"river/tags": {
"num-tags": 6,
"tag-labels": [ "1", "2", "3", "4", "5", "6" ]
},
Scrollen Sie nun wieder nach oben und fügen Sie in der Gruppe "modules-left" oder "modules-center" das Modul "river/window" ein. Außerdem müssen Sie für die Tags Gestaltungsvorgaben definieren, sonst erscheint das Modul nicht in der Leiste. Öffnen Sie dazu die Datei style.css im selben Verzeichnis und fügen Sie der Datei die Zeilen aus Listing 4 hinzu.
Der Code definiert unter anderem, dass die Hintergrundfarbe der Tag-Liste grau erscheint. Die Namen der verwendeten, jedoch nicht fokussierten Tags erscheinen in Weiß, der des fokussierten Tags in Rot. Die Gruppe #tags button:not(.occupied):not(.focused) benötigen Sie nur, wenn Sie nicht verwendete Tags ausblenden wollen.
Listing 4
CSS-Stylesheet der River-Tags
#tags button.occupied {
padding: 0 5px;
background-color: grey;
color: white;
}
#tags button.focused {
color: red;
padding: 0 5px;
background-color: grey;
}
#tags button:not(.occupied):not(.focused) {
font-size: 0;
min-width: 0;
min-height: 0;
margin: -17px;
padding: 0;
border: 0;
opacity: 0;
box-shadow: none;
background-color: transparent;
}
Weitere Möglichkeiten
Aus Platzgründen konnten wir hier lediglich die wichtigsten Einstellungen und Funktionen von River beschreiben. Obwohl es sich bei dem Programm um einen verhältnismäßig einfachen Wayland-Compositor handelt, lässt es sich sehr weitgehend anpassen und bietet zahlreiche weitere Konfigurationsmöglichkeiten.
So können Sie etwa den Abstand zwischen den Fenstern beziehungsweise zum Bildschirmrand präzise einstellen oder festlegen, dass der Master-Bereich des Layouts sich in der linken, rechten, oberen oder unteren Bildschirmhälfte befindet. Interessant ist auch die Möglichkeit, statt des eingebauten Fensterlayouts Rivertile eigene Varianten oder ein von der Community erstelltes Layout wie River-Dwindle (Abbildung 5) zu verwenden.

Abbildung 5: Neben dem eingebauten Layout Rivertile stehen für River mehrere von der Community erstellte Layouts wie hier Dwindle zur Verfügung.
Fazit
River ist ein von Dwm und Bspwm inspirierter, minimalistischer Tiling Compositor für Wayland. Er bietet zwar keine ausgefeilten visuellen Effekte wie Transparenz oder abgerundete Fensterecken, lässt sich dafür jedoch besonders einfach konfigurieren. Eine pfiffige Besonderheit des Programms stellen die Modi dar, mit deren Hilfe sich einer Tastenkombination situationsabhängig verschiedene Aufgaben zuweisen lassen. (tle)
Infos
-
Git-Repository von River: https://codeberg.org/river/river
-
Git-Repository von Wlroots: https://gitlab.freedesktop.org/wlroots/wlroots
-
Waybar und Wofi: Anna Simon, “Effizientes Duo”, LU 07/2024, S. 20, https://www.linux-community.de/50830






