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.
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.