L'architecture de Quickshell : le fondement d'un bureau Wayland moderne
Note —L'architecture de shell de bureau monoprocessus de Quickshell, basée sur C++ et Qt/QML, son intégration à Hyprland et la conception d'une interface sans latence.
Sommaire
Résumé : Les raisons pour lesquelles Quickshell exécute la barre, les notifications et les menus dans un seul processus sont expliquées. L'article aborde le gain de la structure à processus unique en termes de mémoire et de latence, la manière dont les panneaux sont placés via le protocole Wayland layer shell, et la connexion directe avec Hyprland IPC.
Pendant de longues années, les environnements de bureau Linux ont été composés de nombreux processus indépendants (daemons) fragmentés, cherchant sans cesse à communiquer entre eux via des sockets IPC. Un processus distinct pour le panneau supérieur, un autre daemon pour les notifications, un autre outil encore pour les indicateurs OSD de volume et de luminosité, et un binaire complètement différent pour l'écran de verrouillage… Cette structure n'engendrait pas seulement une consommation de mémoire superflue ; elle provoquait aussi des incohérences visuelles et des latences entre les éléments d'interface.
Quickshell, en changeant radicalement ce paradigme, regroupe tout le shell du bureau sous un seul processus de longue durée, à noyau C++ et à interface déclarative QML. L'architecture Quickshell, au cœur du bureau Omarchy, en parlant directement les protocoles Wayland modernes, transforme le bureau en un espace de travail entièrement façonnable (malleable).
1. Pourquoi une architecture à processus unique (Single-Process) ?
Dans les bureaux Wayland traditionnels, le panneau (par exemple Waybar ou AGS) fonctionne séparément, mako ou dunst gère les notifications, hyprlock fournit l'écran de verrouillage. Dans l'architecture Quickshell, en revanche :
- Partage d'état commun (Shared State) : Le panneau, le centre de notifications, les indicateurs OSD et la zone de notification système vivent dans le même espace mémoire. Lorsqu'un son change ou qu'une nouvelle notification arrive, aucun trafic de sockets complexe entre processus n'est nécessaire ; grâce au mécanisme de liaison réactive (property binding) de QML, l'interface se met à jour instantanément.
- Faible consommation de ressources : Quickshell utilise le graphe de scène (Scene Graph) accéléré par le matériel de Qt Quick. La consommation de mémoire au repos est inférieure à 35 Mo et l'utilisation du CPU est proche de 0 %.
- Démarrage instantané et rechargement à chaud (Live Reload) : Toute modification apportée aux fichiers QML s'affiche instantanément à l'écran sans qu'il soit nécessaire de redémarrer le processus du shell.
2. Protocoles de couche Wayland (Layer Shell)
Quickshell prend en charge nativement le protocole Wayland zwlr_layer_shell_v1. Ce protocole répartit les fenêtres en 4 couches fondamentales :
- Background : Fond d'écran et composants de la surface du bureau.
- Bottom : Icônes du bureau ou widgets d'arrière-plan.
- Top : Panneau supérieur, barre d'état et composants du dock.
- Overlay : Notifications, écran de verrouillage et indicateurs OSD plein écran.
Définir une fenêtre dans Quickshell QML ne prend que quelques lignes :
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. Intégration directe via IPC de Hyprland
Sur Omarchy, les événements Hyprland circulent via /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock. Quickshell convertit directement ces événements en signaux QML grâce à ses écouteurs de socket en C++ :
workspace>>id: lorsque l'espace de travail change, le numéro actif du panneau est mis à jour sans délai.activewindow>>title: le titre de la fenêtre active s'affiche instantanément au centre de la barre supérieure.fullscreen>>bool: lors du passage en plein écran, le panneau se masque automatiquement ou est relégué en arrière-plan.
Mon analyse
Quickshell fait se rencontrer la performance du C++ et un moteur d'interface QML moderne, réactif et esthétique, sans livrer le bureau Linux à des technologies web lourdes (Electron/Webview). La véritable force derrière la rapidité, la réactivité et la souplesse du bureau Omarchy, c'est l'architecture de Quickshell.