IPC Quickshell et événements système : intégration avec Hyprland et D-Bus
Note —Gestion des notifications de bureau instantanées et des fenêtres OSD via IPC basé sur des sockets, les écouteurs d'événements Hyprland et les signaux D-Bus.
Sommaire
Résumé : La manière dont Quickshell se connecte aux événements système est expliquée à travers trois exemples : le contrôle multimédia via MPRIS2 sur D-Bus, l'indicateur OSD qui apparaît lorsque le volume ou la luminosité change, et la télémétrie lue depuis les capteurs matériels.
L'examen le plus critique pour les shells de bureau est leur capacité à réagir rapidement et efficacement aux événements qui se produisent dans le système. Même un délai de 100 millisecondes dans l'indicateur OSD qui apparaît à l'écran lorsque vous appuyez sur la touche d'augmentation du volume du clavier suffit à donner une impression de lourdeur au bureau.
Quickshell offre des temps de réaction de l'ordre de la microseconde en connectant sa boucle d'événements (event loop) directement au noyau Linux, au bus de messages D-Bus et aux sockets IPC de Hyprland.
1. D-Bus et contrôles multimédias (MPRIS2)
Quickshell capture en temps réel l'état d'applications comme Spotify, Firefox ou VLC en écoutant le protocole org.mpris.MediaPlayer2 :
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"
}
}
Au moment où l'application change de morceau, le signal D-Bus est capté directement par Quickshell ; aucune boucle d'interrogation supplémentaire (polling) n'est exécutée.
2. Indicateur OSD de volume et de luminosité
Sous Wayland, WlrLayershell.layer: WlrLayer.Overlay est utilisé pour les fenêtres OSD temporaires. La structure OSD qui apparaît lorsque le niveau de volume change et disparaît en douceur après 1,5 seconde :
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. Télémétrie du matériel et des capteurs
Le backend C++ de Quickshell fournit des fournisseurs réactifs capables de lire directement la batterie, les capteurs thermiques et les fréquences CPU dans le répertoire Linux /sys/class/. Il ne consomme aucune ressource lorsque le processus du shell est en veille ; il ne rafraîchit l'interface que lorsque la valeur du capteur concerné change.
Mon interprétation
- Les événements du bureau sont déjà publiés : en écoutant D-Bus et les sockets Hyprland, on peut réagir sans écrire de service supplémentaire.
- L'OSD n'apparaît qu'en cas de besoin : il s'ouvre lors d'un changement et se ferme peu après.