Traduction automatique du turc (Cloudflare Workers AI), non relue par l'auteur. Lire l'original en turc

← Articles

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.

· 2 min de lecture
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.