Intégration

Barres et panneaux via wlr-layer-shell, les modules waybar atlas-submap / atlas-plane, et le scriptage d'atlaswm par IPC avec atlasctl.

atlaswm s'intègre à l'écosystème Wayland standard. Barres, panneaux et lanceurs s'ancrent via wlr-layer-shell ; tout ce qui a un état est interrogeable et diffusable sur un socket IPC JSON, de sorte qu'une barre ou un script sait toujours ce que fait le compositor.

Barres et panneaux (wlr-layer-shell)

atlaswm implémente wlr-layer-shell (zwlr_layer_shell_v1), de sorte que les barres, panneaux et lanceurs — waybar, eww, fuzzel, wofi, … — s'ancrent à un bord d'écran, réservent de l'espace (les zones exclusives réduisent la zone de tuilage pour que les fenêtres ne se retrouvent pas sous la barre), se dessinent dans le bon ordre de profondeur (z-order), et reçoivent l'entrée pointeur/clavier. Les surfaces de couche appartiennent à la sortie, pas au plan, donc une barre ne fait jamais de panoramique ni de zoom avec le canevas.

Lancez votre barre et votre fond d'écran au démarrage de la session avec spawn-at-startup :

spawn-at-startup "waybar"
spawn-at-startup "swaybg" "-i" "/path/to/wallpaper.png"

Fond d'écran : utilisez swaybg (ou tout outil de fond d'écran layer-shell). hyprpaper nécessite l'IPC de Hyprland et ne fonctionnera pas ici.

waybar

Les modules intégrés de waybar (horloge, réseau, pulseaudio, zone de notification, batterie, …) fonctionnent tels quels. Les modules spécifiques à Hyprland (hyprland/workspaces, hyprland/submap, hyprland/window) ne fonctionnent pas — ils nécessitent l'IPC de Hyprland. Le dépôt fournit des remplacements dans contrib/waybar/ qui utilisent l'IPC propre à atlaswm.

atlas-submap — indicateur de sous-mode actif

Affiche quel sous-mode modal est actif (resize / planes / pan / …) pour que vous ne restiez jamais coincé dans l'un d'eux sans le savoir — comblant le vide laissé par le hyprland/submap désactivé. Vide quand aucun sous-mode n'est actif. Il est piloté par événements via atlasctl subscribe (pas d'interrogation, se reconnecte si atlaswm redémarre).

Prérequis : atlasctl dans le PATH et jq. Copiez le script à un endroit exécutable et ajoutez un module personnalisé continu — à noter : pas d'interval, il diffuse en flux :

"custom/atlas-submap": {
    "exec": "/home/you/.config/waybar/atlas-submap",
    "return-type": "json"
}

Placez "custom/atlas-submap" dans une liste modules-* (p. ex. modules-left, là où se trouvait hyprland/submap). style.css facultatif :

#custom-atlas-submap.active { color: @peach; font-weight: bold; }

atlas-plane — indicateur de plan

Affiche tout le pool de plans (p. ex. 0 1 2 3) et met en évidence le plan que le moniteur affiche actuellement — un indicateur d'espace de travail pour les plans. Également piloté par événements. Sans argument, il suit le plan du moniteur actif (adapté à une seule barre partagée) ; passez un nom de connecteur (atlas-plane DP-1) et faites tourner une barre par sortie pour des indicateurs par moniteur.

"custom/atlas-plane": {
    "exec": "/home/you/.config/waybar/atlas-plane",
    "return-type": "json"
}

Les deux scripts disposent de notes de configuration complètes dans contrib/waybar/README.md.

IPC : atlasctl

Le compositor écoute sur un socket Unix (JSON délimité par sauts de ligne, un objet par ligne) et exporte le chemin complet sous ATLASWM_SOCKET vers tout ce qu'il lance — atlasctl fonctionne donc directement depuis n'importe quel terminal à l'intérieur de la session, et depuis l'extérieur après export ATLASWM_SOCKET=…. Trois verbes :

atlasctl action submap:resize   # déclenche n'importe quelle chaîne d'action assignable
atlasctl query windows | jq     # interrogation ponctuelle
atlasctl subscribe              # diffuse les événements, un objet JSON par ligne

action

Prend le même vocabulaire que les raccourcis de configuration — tout ce qui est assignable est invocable. atlasctl action tag-toggle:work, atlasctl action plane-switch:3, atlasctl action overview-toggle, etc. C'est ainsi que vous scriptez le compositor ou que vous le reliez à des outils externes.

query

État ponctuel. Interrogations disponibles :

windows  focused  viewport  submap  mod  planes  tags
gather   summon   overview  anchors marks version

atlasctl query windows | jq vous donne chaque fenêtre avec son id, app_id, title, plane, tags, et ses indicateurs de flottant/plein écran — assez pour regrouper, compter ou cibler des fenêtres depuis un script.

subscribe

Un flux d'événements en direct. Sa première ligne est toujours un instantané de l'état courant ({"event":"snapshot","submap":null,"mod":"super","focused":3,"active_plane":0,…}), de sorte qu'une barre démarre correcte sans la danse interroger-puis-s'abonner. Ensuite, les événements arrivent en flux au fur et à mesure :

événementcharge utile
submap{"state":"enter","name":"resize"} / {"state":"exit"}
focus{"id":3} / {"id":null}
window{"id":3,"change":…}mapped, closed, float-on/-off, fullscreen-on/-off
plane{"change":…,"id":N}switch, created, closed
tag{"id":N,"tag":"work","change":…}added, removed
gather{"tag":"work","change":…}enter, dismiss
summon{"tag":"comms","change":…}enter, dismiss
overview{"change":…}enter, exit
config{"change":"reloaded"}

Aucun client ne peut nuire à la session : un abonné qui cesse de lire est déconnecté, une ligne corrompue reçoit une réponse {"error":…} sur une connexion encore ouverte, et le compositor ne se bloque jamais sur l'IPC. Codes de sortie : 0 ok, 1 réponse d'erreur du compositor, 2 erreur d'usage / de connexion.

atlasctl default-config imprime la configuration par défaut annotée — redirigez-la dans ~/.config/atlaswm/config.kdl pour partir d'une base documentée.

Diagnostic : la trace d'actions

Quand quelque chose se comporte étrangement, activez la trace et reproduisez le problème :

debug { trace #true }

Chaque raccourci (avec son contexte de sous-mode), résultat de redimensionnement, saisie (grab), entrée/sortie de sous-mode, mappage/fermeture de fenêtre et rechargement de configuration est ajouté à ~/.local/state/atlaswm/trace.log (neuf à chaque session). C'est le moyen le plus rapide de voir quelle action une touche a réellement déclenchée et ce qu'elle a ciblé — partagez le fichier quand vous signalez un bug.