Maschinelle Übersetzung aus dem Türkischen (Cloudflare Workers AI), vom Autor nicht geprüft. Türkisches Original lesen

← Beiträge

Quickshell-Architektur: Das Fundament eines modernen Wayland-Desktops

Bewertung —

Die Architektur der prozessbasierten Desktop-Shell von Quickshell auf Basis von C++ und Qt/QML, die Hyprland-Integration und das Design einer Oberfläche ohne Latenz.

· 3 Min. Lesezeit
Inhalt

Zusammenfassung: Es wird erklärt, warum Quickshell Leiste, Benachrichtigungen und Menüs in einem einzigen Prozess ausführt. Der Artikel behandelt den Gewinn der Ein-Prozess-Architektur in Bezug auf Speicher und Latenz, wie Panels mit dem Wayland-Layer-Shell-Protokoll platziert werden und die direkte Anbindung über Hyprland IPC.

Linux-Desktopumgebungen bestanden über viele Jahre aus einer Vielzahl unabhängiger Prozesse (Daemons), die fragmentiert waren und ständig versuchten, über IPC-Sockets miteinander zu kommunizieren. Ein eigener Prozess für die obere Leiste, ein eigener Daemon für Benachrichtigungen, ein weiteres Werkzeug für OSD-Anzeigen von Lautstärke und Helligkeit und eine völlig andere Binärdatei für den Sperrbildschirm … Diese Struktur führte nicht nur zu unnötigem Speicherverbrauch; sie verursachte auch visuelle Inkonsistenzen und Verzögerungen zwischen den Oberflächenelementen.

Quickshell ändert dieses Paradigma grundlegend und fasst die gesamte Desktop-Shell unter einem einzigen langlebigen Prozess mit C++-Kern und deklarativer QML-Oberfläche zusammen. Die Quickshell-Architektur, die im Zentrum des Omarchy-Desktops steht, spricht moderne Wayland-Protokolle direkt an und verwandelt den Desktop in einen vollständig formbaren (malleable) Arbeitsbereich.

1. Warum eine Ein-Prozess-Architektur (Single-Process)?

In traditionellen Wayland-Desktops läuft das Panel (zum Beispiel Waybar oder AGS) separat, mako oder dunst verwalten die Benachrichtigungen und hyprlock stellt den Sperrbildschirm bereit. In der Quickshell-Architektur hingegen:

  1. Gemeinsame Zustandsteilung (Shared State): Panel, Benachrichtigungszentrum, OSD-Anzeigen und System-Tray leben im selben Speicherbereich. Wenn sich die Lautstärke ändert oder eine neue Benachrichtigung eintrifft, ist kein komplexer Socket-Verkehr zwischen Prozessen nötig; dank des reaktiven Bindungsmechanismus (property binding) von QML wird die Oberfläche sofort aktualisiert.
  2. Geringer Ressourcenverbrauch: Quickshell nutzt die hardwarebeschleunigte Szenengrafik (Scene Graph) von Qt Quick. Der Speicherverbrauch im Leerlauf liegt unter 35 MB und die CPU-Auslastung nahe 0 %.
  3. Sofortiger Start und Live-Reload: Jede Änderung an QML-Dateien wird sofort auf dem Bildschirm sichtbar, ohne den Shell-Prozess neu starten zu müssen.

2. Wayland-Layer-Protokolle (Layer Shell)

Quickshell unterstützt das Wayland-Protokoll zwlr_layer_shell_v1 nativ. Dieses Protokoll teilt Fenster in 4 grundlegende Ebenen ein:

  • Background: Hintergrundbild und Desktop-Grundkomponenten.
  • Bottom: Desktop-Symbole oder Hintergrund-Widgets.
  • Top: Obere Leiste, Statusleiste und Dock-Komponenten.
  • Overlay: Benachrichtigungen, Sperrbildschirm und Vollbild-OSD-Anzeigen.

Ein Fenster in Quickshell QML zu definieren, besteht aus nur wenigen Zeilen:

import Quickshell 1.0
import Quickshell.Wayland 1.0

Scope {
    PanelWindow {
        id: topBar
        anchors {
            top: true
            left: true
            right: true
        }
        height: 38
        
        WlrLayershell.layer: WlrLayer.Top
        WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
        
        color: "#08090b"
        
        // Bar içeriği ve modülleri burada tanımlanır
    }
}

3. Direkte Integration über Hyprland IPC

Auf Omarchy fließen Hyprland-Ereignisse über /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock. Quickshell wandelt diese Ereignisse mit C++-Socket-Listenern direkt in QML-Signale um:

  • workspace>>id: Wenn der Arbeitsbereich wechselt, wird die aktive Nummer im Panel ohne Verzögerung aktualisiert.
  • activewindow>>title: Der Titel des aktiven Fensters wird sofort in die Mitte der oberen Leiste geschrieben.
  • fullscreen>>bool: Beim Wechsel in den Vollbildmodus wird das Panel automatisch ausgeblendet oder in den Hintergrund geschoben.

Meine Lesart

Quickshell liefert den Linux-Desktop nicht an schwerfällige Webtechnologien (Electron/Webview) aus; es verbindet C++-Performance mit einer modernen, reaktiven und ästhetischen QML-Oberflächen-Engine. Die eigentliche Stärke hinter der Schnelligkeit, Reaktionsfreudigkeit und Flexibilität des Omarchy-Desktops ist die Quickshell-Architektur.