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

← Beiträge

Quickshell IPC und Systemereignisse: Hyprland- und D-Bus-Integration

Bewertung —

Socket-basiertes IPC, Hyprland-Ereignislistener und D-Bus-Signale für sofortige Desktop-Benachrichtigungen und die Verwaltung von OSD-Fenstern.

· 2 Min. Lesezeit
Inhalt

Zusammenfassung: Anhand von drei Beispielen wird erklärt, wie Quickshell an Systemereignisse angebunden wird: Mediensteuerung über D-Bus mit MPRIS2, eine OSD-Anzeige, die beim Ändern von Lautstärke und Helligkeit erscheint, und Telemetrie, die von Hardwaresensoren gelesen wird.

Die kritischste Prüfung für Desktop-Shells ist, wie schnell und effizient sie auf Ereignisse im System reagieren können. Selbst eine Verzögerung von 100 Millisekunden bei der OSD-Anzeige, die auf dem Bildschirm erscheint, wenn Sie die Lauter-Taste auf der Tastatur drücken, lässt den Desktop träge wirken.

Quickshell bindet die Ereignisschleife (Event Loop) direkt an den Linux-Kernel, den D-Bus-Nachrichtenbus und die Hyprland-IPC-Sockets an und bietet so Reaktionszeiten im Mikrosekundenbereich.

1. D-Bus und Mediensteuerung (MPRIS2)

Quickshell hört auf das Protokoll org.mpris.MediaPlayer2 und erfasst den Status von Anwendungen wie Spotify, Firefox oder VLC in Echtzeit:

import QtQuick 2.15
import Quickshell.Services.Mpris 1.0

Item {
    id: mediaTracker
    
    readonly property var player: Mpris.players.values[0]
    
    Text {
        text: player ? (player.trackTitle + " — " + player.trackArtist) : "Medya çalmıyor"
        font.family: "JetBrains Mono"
        color: "#00ffcc"
    }
}

Sobald die Anwendung den Song wechselt, wird das D-Bus-Signal direkt von Quickshell erfasst; es wird keine zusätzliche Abfrageschleife (Polling) ausgeführt.

2. OSD-Anzeige für Lautstärke und Helligkeit

Unter Wayland wird für temporäre OSD-Fenster WlrLayershell.layer: WlrLayer.Overlay verwendet. Die OSD-Struktur, die beim Ändern der Lautstärke erscheint und nach 1,5 Sekunden sanft verschwindet:

import QtQuick 2.15
import Quickshell 1.0
import Quickshell.Wayland 1.0

PanelWindow {
    id: volumeOsd
    
    anchors {
        bottom: true
        horizontalCenter: true
    }
    anchors.bottomMargin: 80
    
    width: 240
    height: 48
    color: "#0e1117"
    radius: 10
    
    WlrLayershell.layer: WlrLayer.Overlay
    visible: false
    
    Timer {
        id: hideTimer
        interval: 1500
        onTriggered: volumeOsd.visible = false
    }
    
    function trigger(level) {
        progressBar.value = level;
        volumeOsd.visible = true;
        hideTimer.restart();
    }
}

3. Hardware- und Sensor-Telemetrie

Das C++-Backend von Quickshell bietet reaktive Provider, die Batterie-, Temperatursensoren und CPU-Frequenzen direkt im Linux-Verzeichnis /sys/class/ lesen können. Der Shell-Prozess verbraucht keine Ressourcen, solange er im Ruhezustand ist; er aktualisiert die Oberfläche nur, wenn sich der betreffende Sensorwert ändert.

Meine Lesart

  • Desktop-Ereignisse werden bereits veröffentlicht: Durch das Abhören von D-Bus und Hyprland-Sockets kann reagiert werden, ohne einen zusätzlichen Dienst zu schreiben.
  • Das OSD erscheint nur bei Bedarf: Bei einer Änderung öffnet es sich und schließt sich kurz darauf wieder.