Niri 26.04: Scrollender Tiling-Wayland-Compositor
(github.com/niri-wm)- Die scrollende Tiling-Wayland-Compositor wurde durch Verbesserungen bei Hintergrundunschärfe, Screencasting, Rendering und der gesamten Eingabeverarbeitung deutlich ausgereifter
- Hintergrundunschärfe ist jetzt im Mainline-Zweig enthalten, sodass Fenster und Layer-Shell-Elemente mit Unterstützung für
ext-background-effectUnschärfe auch ohne separate niri-Konfiguration anfordern können und sich Unschärfe zusätzlich per Regel auf niri-Seite erzwingen lässt - Beim Screencasting wurden sowohl im PipeWire- als auch im
wlr-screencopy-Pfad die Cursor-Behandlung, der Start dynamischer Casts, IPC-Abfragen und erzwungenes Beenden sowie Probleme mit mehrfachen Kopien und der Freigabe von Ressourcen überarbeitet - Die Rendering-Struktur wurde von einem iteratorbasierten auf ein pushbasiertes Modell umgestellt, wodurch der Aufbau der Render-Listen auf den Hauptmaschinen 2- bis 3-mal und auf einem alten Eee PC 8-mal schneller wurde, bei zugleich geringerem Speicherverbrauch
- Auch ältere Hardware und Eingabeumgebungen wurden verbessert, etwa Screenshots und Screencasts auf alten Intel-Systemen, Konflikte zwischen IME und GTK-4-Popups, hochfrequente Mäuse und Tablet-Mapping sowie DMA-BUF-Beschleunigung in verschachteltem niri, wodurch sich der praktische Einsatzbereich erweitert
Wichtige Änderungen
- Die GitHub-Organisation wurde vom persönlichen Account zu niri-wm verschoben; zugehörige Projekte wurden dabei ebenfalls neu organisiert
- awesome-niri: Liste zugehöriger Projekte
- artwork: Sammlung von Badges und Hintergrundbildern
- Enthalten sind auch Änderungen für Paketierer
- Die minimal unterstützte Rust-Version wurde auf 1.85 angehoben
niri.servicehardcodiert den niri-Binärpfad nicht länger mit/usr/bin/- Die Struktur der dinit-Service-Datei wurde geändert: 3bfa4a7
Hintergrundunschärfe
- Hintergrundunschärfe wurde in den Mainline-Zweig aufgenommen, und Fenster sowie Layer-Shell-Komponenten können über das Protokoll
ext-background-effectUnschärfe anfordern- Mehrere Shells und Apps können dies ohne zusätzliche niri-Konfiguration direkt nutzen
- Dank Material Shell v1.4.5: kann in den Einstellungen aktiviert werden
- Noctalia-Shell: mit Einstellungen und Dokumentation
- Unterstützung für den Vicinae-Launcher
- foot v1.26:
blur=true - kitty v0.46.2:
background_blur 1 - Ghostty: Unterstützung ab v1.4 geplant
- Quickshell: Unterstützung ab v0.3 geplant
- winit: Unterstützung ab v0.31 geplant
- Auch wenn eine App
ext-background-effectnoch nicht unterstützt, kann Unschärfe auf niri-Seite über window-rule und layer-rule aktiviert werden- Details und Einschränkungen sind in der Dokumentation zu Window Effects zusammengefasst
- In niri konfigurierte Unschärfe benötigt einen korrekten
geometry-corner-radius - Bei komplexen Surface-Formen funktioniert dies nicht
- Es gibt sowohl xray blur als auch normale Unschärfe; Standard ist xray blur
- xray blur berechnet die Unschärfe des Hintergrundbilds nur einmal und verwendet sie wie ein statisches Bild wieder, was deutlich effizienter ist
- Neu berechnet wird nur, wenn sich das Hintergrundbild ändert
- Bei animierten Hintergrundbildern fällt der Effizienzvorteil geringer aus
- Mit dem neuen
layer-Matcher lässt sich normale Unschärfe stattdessen nur auf Layer wie top oder overlay anwenden
- Die Umsetzung der Unschärfe war so anspruchsvoll, dass dafür Änderungen an der Rendering-Struktur nötig waren
- Normale Unschärfe liest bereits gerenderte Pixel mitten im Frame erneut ein, macht sie unscharf und setzt das Rendering dann fort
- Für xray blur mussten Fensterpositionen durch den gesamten Rendering-Code weitergereicht werden, damit der Hintergrund korrekt ausgeschnitten wird
- In Overview musste Unterstützung für xray blur hinzugefügt werden, ohne die Eigenschaft zu verlieren, Overview nicht erneut zu rendern
- Es musste außerdem mit für Screencasts ausgeblendeten Fenstern zusammenarbeiten
- xray kann auch ohne Unschärfe allein verwendet werden; ebenso lassen sich Noise zur Minderung von Farbbanding und Sättigungseffekte separat nutzen
- Mit dem neuen
popups-Block können per window rule oder layer rule auch auf Popup-Menüs Transparenz und Hintergrundeffekte angewendet werden- Bei Formen, die keine abgerundeten Rechtecke sind, etwa GTK-4-Popups mit
has-arrow=true, kann das Ergebnis unnatürlich wirken - Web-Apps oder Electron verwenden keine Wayland-Popups, daher kann niri sie nicht verarbeiten
- Clients, die
ext-background-effectdirekt implementieren, können auch komplexere Unschärfeformen handhaben
- Bei Formen, die keine abgerundeten Rechtecke sind, etwa GTK-4-Popups mit
Optionale include
- Für config include wurde optionales include hinzugefügt
- Mit
include optional=true "optional-config.kdl"schlägt das Laden der Konfiguration nicht fehl, auch wenn die Datei fehlt - Fehlt die Datei, wird bei jedem Reload der Konfiguration zwar eine Warnung protokolliert, die Konfiguration wird aber weiter geladen
- Wenn die Datei später auftaucht, wird die beobachtete Änderung erkannt und automatisch neu geladen
- Existiert die Datei, enthält aber Syntaxfehler, gilt das weiterhin als fehlgeschlagenes Parsen
- Mit
- In include-Pfaden wird
~zum Home-Verzeichnis expandiert~/file.kdlwird zu/home/user/file.kdlexpandiert
Pointer-Warping und Scrollen
- Während einer Geste zum Scrollen der Ansicht wird der Pointer nun von einem Bildschirmrand auf die gegenüberliegende Seite gewarpt
- Das Verhalten ähnelt Blender
- Dadurch lässt sich auch bei einem Start nahe am Monitorrand natürlich weiter durch mehrere Fenster scrollen
Verbesserungen beim Screencasting
- Das Screencasting von niri wurde sowohl über xdg-desktop-portal-gnome via PipeWire als auch über
wlr-screencopyverbessert. -
Cursor-Behandlung beim Fensterscreencast
- PipeWire unterstützt nun Cursor-Metadaten, statt den Cursor direkt in die Videoframes zu zeichnen.
- Der Cursor ist nicht mehr im Videoframe enthalten; stattdessen werden Cursor-Icon und Koordinaten in einem separaten Buffer gesendet.
- Verbraucher wie OBS oder Browser zeichnen den Cursor dadurch selbst.
- Das funktioniert sowohl bei Monitor- als auch bei Fensteraufnahmen.
- Bei Fensteraufnahmen wird der Cursor nur dann angezeigt, wenn er tatsächlich auf dieses Fenster oder dessen Pop-ups zeigt.
- Auch Drag-and-Drop-Icons werden mitgezeichnet.
- Bei der Implementierung wurde zudem ein Speicherbeschädigungsproblem in PipeWire aufgedeckt und behoben.
- Außerdem wurde eine Diskrepanz zwischen der beabsichtigten PipeWire-Funktionsweise und Implementierungen von Verbrauchern wie libwebrtc festgestellt.
- In den getesteten Umgebungen funktioniert es korrekt.
- Mit
screenshot-window show-pointer=truelässt sich der Pointer auch in Fensterscreenshots einblenden.
- PipeWire unterstützt nun Cursor-Metadaten, statt den Cursor direkt in die Videoframes zu zeichnen.
-
Geändertes Startverhalten für Dynamic cast target
- Dynamic cast target ist eine Funktion, mit der sich das Screencast-Ziel per Tastenkürzel sofort umschalten lässt.
- Bisher startete sie zunächst mit einem 1×1 großen schwarzen Pixel-Videostream.
- Jetzt wird der Start des Videostreams verzögert, bis das erste echte Ziel ausgewählt ist.
- Dadurch lässt sich das kurzzeitige 1×1-Video in Microsoft Teams vermeiden.
-
Cast IPC
- Laufende Screencasts lassen sich nun per IPC abfragen.
- Mit
niri msg castskönnen aktive Casts angezeigt werden. - Im Event-Stream kann man Cast-Events abonnieren.
- Das Objekt
Castliefert Typ, aktuelles Ziel und Aktivstatus. - PipeWire-Screencasts liefern eine Node-ID, wlr-screencopy dagegen die Client-Prozess-ID.
- DankMaterialShell zeigt bereits mithilfe dieser IPC einen Screencast-Indikator an.
- Mit
niri msg action stop-cast --session-id <ID>lässt sich ein PipeWire-Screencast zwangsweise beenden.
-
Einschränkungen und Fixes rund um wlr-screencopy
- wlr-screencopy bietet keine robuste Möglichkeit, zwischen Screencast und Screenshot zu unterscheiden, daher sind einige Heuristiken nötig.
- xdg-desktop-portal-wlr hält dauerhaft ein einzelnes wlr-screencopy-manager-Objekt, wodurch sich der Endzeitpunkt nicht direkt erkennen lässt.
- Diese Probleme werden durch das neue Protokoll
ext-image-copy-capturegelöst, das in niri aber noch nicht enthalten ist.
-
Weitere Screencast-Fixes
- Ein Problem wurde behoben, bei dem bei der Damage-Kopie der Cursor bei wlr-screencopy-Clients immer mit enthalten war, auch wenn der Client ihn nicht wollte.
- Das Verhalten bei gleichzeitig angeforderten Kopien mehrerer Frames mit Damage wurde korrigiert.
- Ein Problem wurde behoben, bei dem wlr-screencopy-Daten in niri in einigen Fällen, etwa nach dem Beenden des Clients, nicht freigegeben wurden.
- Die Standardanzahl der PipeWire-Screencast-Buffer wurde von 16 auf 8 reduziert.
- Die Reihenfolge der Struct-Felder wurde angepasst, um ein Use-after-free-Problem in
pipewire-rszu vermeiden. - Ein Rendering-Problem wurde behoben, bei dem beim Wechsel eines Dynamic-cast-Ziels auf ein Fenster die Z-Order für einen Frame falsch war.
Animationen und Fensterverhalten
- Die Synchronisierung von Animationen ist präziser geworden.
- niri erlaubt zwar die getrennte Konfiguration einzelner Animationen, führt sie aber synchronisiert aus, wenn sie exakt zusammenpassen müssen.
- Animationen zur Fenstergrößenänderung werden mit den dadurch ausgelösten horizontalen View-Verschiebungsanimationen synchronisiert.
- Ein Problem wurde behoben, bei dem beim Verlassen von Fullscreen oder Maximized die Synchronisierung der View-Verschiebung fehlte, sodass das Fenster sofort zurücksprang, während der Bildschirm noch langsam scrollte.
- Ein Problem wurde behoben, bei dem die horizontale Verschiebungsanimation anderer Tile-Fenster bei bestimmten Drag-Pfaden übersprungen wurde.
- Es trat auf, wenn ein maximiertes Fenster per Drag aus dem maximierten Zustand gelöst und, falls es ursprünglich floating war, wieder in den Floating-Zustand versetzt wurde,
- und sich dabei die Logik für das Scrollen zu linken oder rechten Workspaces bei einem Drag nahe am Monitorrand überlappte.
- Fix-Commit: df3f3979e936ed6800b4fbd55843bb0fe2554f15
- Auch ein Problem wurde behoben, bei dem die ganz linke Spalte eines Workspace nach dem Herausziehen und erneuten Ablegen nicht an ihre ursprüngliche Position, sondern nach rechts einsortiert wurde.
- Die Anzeigedauer von Benachrichtigungen über Konfigurationsfehler wird nun nicht mehr von den Animationseinstellungen für Verlangsamung/Beschleunigung beeinflusst.
IME und Pop-ups
- Ein altes Problem, bei dem GTK-4-Pop-up-Eingabefelder und IME nicht zusammen funktionierten, wurde mit einem Workaround gelöst.
- Bei aktivem IME wie Fcitx5 ließen sich Text-Pop-ups nicht öffnen.
- Die Pop-ups griffen Pointer und Tastatur, und auch das IME verwendete einen Keyboard-Grab, was zu einem Konflikt führte.
- niri verwarf daraufhin den Pop-up-Grab, wodurch sich das Pop-up oft sofort wieder schloss.
- Einige Prüfungen wurden gelockert, damit es funktioniert, ohne die Smithay-Struktur vollständig umzubauen.
- IME-Nutzer können nun beispielsweise in Nautilus Dateinamen umbenennen.
Drag-and-Drop und Eingabegeräte
- Während eines Drag-and-Drop-Vorgangs kann die Aktion nun mit Escape abgebrochen werden.
- Auch bei Eingabegeräten allgemein gab es mehrere Fixes.
- Ein Problem wurde behoben, bei dem das System mit der Zeit langsamer wurde, wenn Mäuse mit hoher Polling-Rate zusammen mit
hide-after-inactive-msoder einem Idle-Monitoring-Daemon verwendet wurden. - Mit libwayland-server v1.23 oder neuer wird die Größe des Wayland-Buffers erhöht, damit Fenster bei Mausbewegungen mit hoher Polling-Rate über nicht reagierenden Fenstern nicht so schnell abstürzen.
- Es wurde die Tablet-Option
map-to-focused-outputhinzugefügt, mit der statt eines fest angegebenen einzelnen Outputs der aktuell fokussierte Output verwendet werden kann. - Ein Problem wurde behoben, bei dem der Cursor am obersten Pixel eines Workspace nicht immer korrekt auf ein maximiertes Fenster zeigte.
- Ein Problem wurde behoben, bei dem Alt-Tab schon auf Mauseingaben reagierte, bevor es auf dem Bildschirm sichtbar war.
on-button-down-Scrolling von Trackballs funktioniert nun auch in der Overview.- Der Num-Lock-Status bleibt nun auch nach dem Laden einer benutzerdefinierten .xkb-Keymap erhalten.
- Ein Problem wurde behoben, bei dem Eingabegeräte gar nicht verwendet werden konnten, wenn der Start über tmux von einer anderen TTY aus erfolgte.
- Das Laden von libinput-Plugins wurde aktiviert.
- Ein Problem wurde behoben, bei dem das System mit der Zeit langsamer wurde, wenn Mäuse mit hoher Polling-Rate zusammen mit
GPU-Profiling und Rendering-Optimierung
- Für Tracy, das in Smithay und niri verwendet wird, wurde integriertes GPU-Profiling hinzugefügt
- In Smithay wurde Unterstützung dafür aufgenommen, GPU-Timestamp-Queries abzusetzen, fertige Werte zu sammeln und an Tracy zu senden: Arbeits-PR
- Sowohl interne GPU-Arbeit von Smithay als auch GPU-Arbeit des Compositors selbst kann nun mit Bereichen markiert werden
- Es lässt sich nachvollziehen, wie sich innerhalb eines einzelnen Frames das Rendering von DRM-Buffern und das Rendering von PipeWire-Screencast-Buffern überlappen
- Auf Multi-GPU-Systemen lassen sich außerdem Tracks pro GPU prüfen
- Es konnte bestätigt werden, dass die Blur-Performance nicht langsamer ist als erwartet, und auch die Diagnose von dropped frames durch GPU-Rendering-Engpässe wurde einfacher
- Die Methode zum Aufbau der Render-Liste wurde von einer iteratorbasierten auf eine push-basierte Struktur umgestellt
- Bisher wurden Render-Elemente in der Form
-> impl Iterator<Item = ...>zusammengesetzt - Dabei gab es verschiedene Komplexitäten wie bedingte Verzweigungen, lifetimes, das Leihen von
&self, Konflikte mit&mut Renderer, Zwischenallokationen fürVecund Probleme an crate-Grenzen - In der neuen Struktur nimmt die Render-Funktion
push: &mut dyn FnMut(Element)entgegen und fügt Elemente per Push ein - Zwischenfunktionen können die bisherige Logik beibehalten, indem sie Closures verwenden, die das übergeordnete
pushkapseln - Temporäre
Vecs entfallen, und auch die Borrowing-Probleme verschwinden - In niri wurde der Vorteil eines vorzeitigen Iterator-Abbruchs in der Praxis nicht benötigt
- Bisher wurden Render-Elemente in der Form
- Durch dieses Refactoring wurde der Aufbau der Render-Liste deutlich schneller
- Auf der Hauptmaschine 2- bis 3-mal schneller
- Auf einem alten Eee PC 8-mal schneller
- Der Aufbau der Render-Liste ist zwar nicht die eigentliche GPU-Rendering-Zeit, wird aber häufig ausgeführt, auch wenn der Bildschirm nicht neu gezeichnet wird, daher ist der Effekt der Verbesserung groß
- Auch der Speicherverbrauch wurde reduziert, und im neuen Pfad bleiben Allokationen größtenteils nur noch beim Erweitern des Ausgabevektors übrig
- Ausführliche Motivation und Diff finden sich im PR
Unterstützung für ältere Hardware
- Die Ursache dafür, dass Screenshots auf alten Intel-Laptops fehlschlugen, stellte sich als falscher OpenGL-Enum-Wert in Smithay heraus und wurde behoben: PR zur Ursachenanalyse
- Auch die niri-Shader wurden leicht optimiert, sodass selbst auf der eingeschränkten GPU eines sehr alten ASUS Eee PC
- Fenstergrößenänderungs-Animationen
- abgerundete Ecken des Compositors
- wieder funktionieren
Weitere Verbesserungen
- Ein Problem mit VRAM-Lecks, das auf manchen Systemen nach dem Beenden bestimmter Apps auftrat, wurde behoben
- Das Protokoll
ext-foreign-toplevel-listwurde hinzugefügt, wodurch sich in Quickshell und ähnlichen Projekten Wayland-Fensterobjekte leichter mit niri-IPC-Fenster-IDs verknüpfen lassen - Wenn in der Konfiguration ein Fehler durch doppelte Bindings auftritt, wird nun auch die Position der ersten Definition desselben Bindings angezeigt
- Beim Ziehen von Fenstern mit Mod+LMB wird nun ein grabbing cursor angezeigt
- Für
niri msg action load-config-filewurde das Argument--pathhinzugefügt, sodass sich zur Laufzeit auf eine andere Konfigurationsdatei umschalten lässt - Nested niri erhält DMA-BUF-Unterstützung, sodass Hardware-Beschleunigung auch nach der Abschaffung von Mesas
wl_drmwieder funktioniert - Das Padding, das niri bei layer-shell-Popups nahe am Bildschirmrand eingefügt hatte, wurde entfernt
- Änderungen an der Standardkonfiguration sind ebenfalls enthalten
- Mod+M:
maximize-window-to-edges - Mod+Shift+R:
switch-preset-column-width-back
- Mod+M:
- Das Debug-Flag
force-disable-connectors-on-resumewurde hinzugefügt, um beim Wechsel auf TTY oder beim Aufwachen aus dem Standby den Bildschirm zwangsweise auf blank zu setzen - Es wurde behoben, dass Fensterecken im windowed fullscreen nicht korrekt als rechte Winkel dargestellt wurden
- Ein Problem wurde behoben, durch das der Bildschirm weiter neu gezeichnet wurde, solange die Overview geöffnet war
- Das Rendering des gradient border mit
relative-to=workspace-viewwährend interaktiven Dragging wurde leicht korrigiert - Das Rendering des Diaeresis-Shortcuts im Dialog „Important Hotkeys“ wurde verfeinert
- Die Beschreibung von
expel-window-from-columninniri msg actionwurde passend zum tatsächlichen Verhalten auf das Ausstoßen des unteren Fensters korrigiert - Mehrere Panics wurden behoben, die auftreten konnten, wenn Clients kürzlich entfernte Outputs verwenden wollten
- Es wurde behoben, dass
clip-to-geometryfehlerhaft renderte, wenn es zusammen mit Clients verwendet wurde, diey_invert-Buffer anhängen - Der OpenBSD-Build wurde repariert
- Nested niri setzt nun die eigene Fenster-
app-id - Wenn eine neue GPU eingesteckt wird, wird die Debug-Einstellung
ignore-drm-deviceerneut ausgewertet, sodass auch symbolische Links unter/dev/dri/by-path/genutzt werden können
Smithay-Updates übernommen
- Mit den Smithay-Updates kommen auch mehrere grundlegende Verbesserungen
- Die automatische GPU-Auswahl wurde auf manchen Geräten wie ARM-Macs verbessert
- Asahi und Pinephone funktionieren nun direkt ohne manuelle Einstellung von
render-drm-device - Das Verhalten einiger layer-shell-Clients wie wl_shimeji wurde verbessert
- Die Unterstützung für Docks, bei denen die Monitor-EDID spät geladen wird, wurde verbessert
- Screenshots und Screencasts funktionieren auf älteren Intel-Systemen
- Ein Problem wurde behoben, bei dem alte Outputs zurückblieben, wenn während des Standby ein USB-C-Dock getrennt wurde
- Ein
zxdg_exporter_v2-Panic in einigen Clients wurde behoben - Ein Speicherleck in Clients, die Clipboard-Protokolle nicht explizit zerstören, wurde behoben
- Panics in Zusammenhang mit text-input content hint und purpose, die ab den GTK-4.23-Entwickler-Releases auftraten, wurden behoben
- Drag-and-drop, IME-Texteingabe, Multi-GPU und die Gesamtperformance wurden ebenfalls verbessert
1 Kommentare
Hacker-News-Kommentare
Niri ist so gut, dass es sich, seit ich vor etwa 5 Monaten gewechselt bin, wie eine der besten Entscheidungen der letzten Jahre anfühlt, Windows hinter mir gelassen zu haben
Ich bin dem Autor wirklich sehr dankbar
Meine dotfiles enthielten ursprünglich Installationsskripte für CLI-Tool-Konfigurationen, Theme-Umschaltung usw., und inzwischen unterstützen sie Niri auf Arch-basierten Systemen ebenfalls vollständig
Wenn man schnell eine neue Desktop-Umgebung ausprobieren will, ist https://github.com/nickjj/dotfiles ein ziemlich guter Startpunkt
Ich nutze es sowohl auf meinem Haupt-Desktop als auch auf meinem Reise-Laptop
Ist inoffiziell, aber wirklich großartig
Mit Win/Cmd + L wechselt man zwischen Tiling und Scrolling, und ich nutze das inzwischen sehr oft
Dank Niri bin ich zum ersten Mal mit scrollbasierter Fensterverwaltung in Kontakt gekommen, und es hat sofort Klick gemacht
Vor Kurzem hat OmniWM für den Mac einen vollständigen Niri-Emulationsmodus pro Workspace bekommen, und zum Glück ist er auch mit Sequoia kompatibel, sodass es sofort mein primärer Fenstermanager geworden ist
[1] https://github.com/BarutSRB/OmniWM
Als ich Niris Ansatz zum ersten Mal gesehen habe, hat er mir sofort gefallen, und ich habe auf dem Mac weiter nach etwas Ähnlichem gesucht
Es ist die beste Implementierung, die ich bisher ausprobiert habe, und klar, es gibt ein paar kleine quirks, aber zumindest für mich taugt es absolut als Daily Driver
Besonders die tabbed columns sind wirklich gut
Applaus an Maintainer und Mitwirkende
Wenn du einen Mac nutzt, kann ich OmniWM empfehlen
Es bietet nicht nur Niri-artige Layouts, sondern auch Layouts, die näher an Hyprland sind, und dadurch ist das Arbeiten auf macOS deutlich angenehmer geworden
https://github.com/BarutSRB/OmniWM
Ich hatte schon einmal darüber gepostet, als ich gerade angefangen hatte, es zu nutzen, aber nachdem ich es weiter verwendet habe, finde ich es wirklich gut und kann es klar empfehlen
Nach diesem Video wird niemand Lust bekommen, die Software auszuprobieren, und selbst als bestehender Nutzer hätte man fast das Bedürfnis, sie zu deinstallieren
Ich nutze die PaperWM extension für GNOME, und Niri scheint sich vermutlich davon inspirieren zu lassen
Es ist definitiv eine interessante Arbeitsweise, aber sobald man mehr als 3 Fenster in einem Workspace hat, fühlt es sich etwas umständlich an, daher liebe ich es nicht uneingeschränkt
Ich probiere es aber weiterhin ernsthaft aus, und da es eine GNOME extension ist, ist es schön, den Rest der GNOME-DE ohne große zusätzliche Einrichtung weiter nutzen zu können
Man musste sich eben auch um Dinge wie top bar, idle timeout und Benachrichtigungen kümmern
Vor Kurzem habe ich aber erfahren, dass es Desktop-Shells für Wayland gibt, die vieles von dem liefern, was man aus Umgebungen wie GNOME erwartet, und das ohne großen Aufwand
Sie enthalten Konfigurationsdialoge, App-Tray, Ressourcenüberwachung und top bar
Ich nutze gerade dank material shell, und es ist wirklich cool, dass man Desktop-Shell und Compositor frei kombinieren kann
Mein Workflow ist insgesamt besser geworden, und ich konnte dadurch auch noch zwei oder drei andere Extensions wie desktop grid löschen
Ich habe mich komplett daran gewöhnt, schnell zwischen mehreren dedizierten Fullscreen-Workspaces zu wechseln und Fenster nur per Tastatur zu verwalten, also an diesen Tiling-WM-Workflow
Normalerweise habe ich pro Workspace eine App oder ein Terminal mit tmux offen und stelle nur gelegentlich zwei Apps nebeneinander
Mich interessiert wirklich, wie sich bei Leuten mit einem ähnlichen Ablauf das mentale Modell verändert, wenn sie zu Niri wechseln
Ein Workspace mit Steam und einem Spiele-Wiki, ein Workspace mit Emacs und einem Dokumenten-Browser, ein Workspace mit Godot und Apps für die Spieleentwicklung usw.
Das Gute an Niri ist, dass man fast nie das Gefühl hat, zu viele Fenster zu haben und etwas schließen zu müssen
Es ist ziemlich einfach, Dinge getrennt und geordnet zu halten
Ich verstehe nicht so ganz, warum man Workspaces pro App verwenden sollte
Ich mag es auch nicht, wenn in einem Firefox Arbeit und Hobby-Tabs durcheinander sind
awesome, qtile, kurz xmonad, dann i3, beim Wechsel zu Wayland sway und auch ein wenig hyprland
Das Problem war immer, dass horizontale Anordnungen mit mehr als 3 Fenstern nicht gut funktionieren und vertikale Splits zu klein werden
Gleichzeitig kam es oft vor, dass ich neben dem, was ich gerade las, ein neues Fenster öffnen oder neben dem Terminal einen ipython-Plot sehen wollte
Jedes Mal musste ich es dann per stacked layout bündeln oder in einen neuen Workspace verschieben, was ziemlich viel Reibung erzeugte und meinen Arbeitsfluss immer wieder unterbrach
In Niri öffne ich einfach ein neues Fenster, es erscheint an der richtigen Stelle, und die anderen Fenster bleiben links und rechts erhalten, sodass ich einfach hin scrollen kann
Mein Workflow ist dadurch jetzt etwas unordentlicher als früher, aber gerade das gefällt mir
Klassische Tiling-WMs verlangen Ordnung und machen sie leicht, aber in Niri muss man nicht unbedingt aufräumen
Wenn ich ein Fenster einmal nicht sofort finde, nutze ich die Übersicht, und ich habe mit rofi auch Fenstersuche ergänzt
Anfangs habe ich aus sway-Gewohnheit weiter benannte Workspaces benutzt, inzwischen aber nicht mehr
Workspace 1 war ein Fullscreen-Terminal mit zellij, 2 der Browser, 3 etwa zwei Chat-Apps, und dazwischen bin ich mit Shortcuts gewechselt
Anfangs habe ich Niri genutzt, weil es leichter und anders als Plasma war, inzwischen hat sich aber auch mein Workflow etwas verändert
Die meisten Fenster nutze ich immer noch in Bildschirmgröße, und ich organisiere weiterhin ähnlich: 1 für Entwicklung, 2 für Browser und gelegentlich einen Mail-Reader, 3 für Chat-Apps
Allerdings öffne ich jetzt viel häufiger neue Terminal-Fenster, wenn ich kurze Befehle eintippe oder lang laufende Aufgaben offen lassen will
Unter KDE lagen solche Fenster übereinander im Hintergrund, jetzt stehen sie innerhalb von 1 nebeneinander
Rückblickend wirkt der frühere Wechsel per Alt-Tab inzwischen ziemlich umständlich, und mit Super-hjkl zwischen Fenstern zu gehen fühlt sich viel leichter an
Natürlich ist das subjektiv, aber dieses Gefühl, dass Fenster nebeneinander statt übereinander liegen, macht den Workflow leichter
Mit manuellen Tiling-WMs wie i3 oder sway und einem großen Monitor kann man den Bildschirm in mehrere Arbeitsbereiche aufteilen, in denen jeweils mehrere Apps mit unterschiedlichen Rollen liegen, und so die Zahl der Workspaces reduzieren
Scrolling ist ein ähnlicher, aber anderer Workflow und passt besonders gut, wenn auf kleineren Bildschirmen Flexibilität wichtig ist
Dieser Workflow passt eher zu Floating-WMs
Der eigentliche Vorteil von Tiling-WMs liegt im tatsächlichen Kacheln von Fenstern, und für mich ist die holy trinity aus Browser, Editor und Terminal entscheidend
Außerdem sollte man sich räumlich mit super+hjkl oder den Pfeiltasten bewegen können
Deshalb wirken Workspaces pro Projekt viel natürlicher und eher wie ein echter Tiling-WM-Workflow
Niri macht das deutlich besser, weil neue Fenster rechts geöffnet werden und das aktuelle Layout nicht zerstören
Wenn man zum Beispiel ein PDF öffnet, kann man leicht zum neuen Fenster wechseln, ohne die bestehende Anordnung zu verlieren
Hier sind verwandte Links
The dank case for scrolling window managers - https://news.ycombinator.com/item?id=46820468 - Jan 2026 (61 comments)
Niri 25.11 released with alt-tab and other improvements - https://news.ycombinator.com/item?id=46097051 - Nov 2025 (1 comment)
Niri – A scrollable-tiling Wayland compositor - https://news.ycombinator.com/item?id=45461500 - Oct 2025 (229 comments)
The Future Is Niri - https://news.ycombinator.com/item?id=43342178 - March 2025 (216 comments)
Niri: A scrollable-tiling Wayland compositor - https://news.ycombinator.com/item?id=37367687 - Sept 2023 (37 comments)
Wenn du die NNN (Niri-Nix-Noctalia) dots ausprobieren willst, kannst du gern mein flake nehmen
https://github.com/MostlyKIGuess/nix-flake-public
Selbst Dinge wie Dark Mode waren mit viel Handarbeit verbunden, und Noctalia sieht genau nach der Richtung aus, die ich mir gewünscht hatte
Danke für den Hinweis
Ich nutze den wl-only-Branch von mangowm (auf Basis von wlroots 0.20)
Er braucht deutlich weniger Ressourcen, hat mehr Layouts und weniger Probleme
Niri sieht bei den visuellen Effekten zwar besser aus, aber es ist auf jeden Fall einen Versuch wert
Für HDR muss man noch warten
https://github.com/mangowm/mango
Bei mir war Niri wirklich rock solid
Es wirkt, als hätte ein russisches Genie etwas gebaut, das besser ist als 100 Millionen Dollar an Claude-Tokens
Also definitiv kein kompletter kollektiver Wahnsinn, deshalb soll offenbar lieber jeder SPY kaufen
Wenn man die Release Notes liest, sind sie fast schon für sich genommen schön
Ende letzten Jahres bin ich nach über 10 Jahren mit i3 zu Niri gewechselt
Das horizontale Scrollen, das nicht an die Monitorgröße gebunden ist, und die Zahl der Workspaces, die nicht durch die Anzahl der konfigurierten Hotkeys begrenzt wird, fühlen sich wirklich befreiend an
Auch grafisch ist das Ganze sehr ausgereift
Mein einziger verbleibender Kritikpunkt ist, dass die X-Kompatibilitätsschicht xwayland-satellite Drag-and-Drop zwischen X-Apps und Wayland-Apps noch nicht unterstützt
[1]: https://davidyat.es/2026/01/28/niri/
[2]: https://github.com/Supreeeme/xwayland-satellite/issues/133
Früher hatte ich die Gewohnheit, immer dieselben Dinge auf denselben Workspaces zu haben, sodass ich sie leicht wiederfand, aber jetzt verteilt sich das Layout viel stärker
Und ich vermisse scratch ziemlich stark
Mit etwas mehr Fleiß bei der Konfiguration ließe sich das vermutlich beheben, aber bisher habe ich noch keine Zeit dafür aufgebracht