Sommaire
- Installer notre compositeur : labwc
- Outils pour notre compositeur
- Se lancer : remplacer GNOME par labwc

Salut nal',
C'est l'ère du bureau Wayland avec le retrait de X11 natif par :
* l'édition GNOME de Fedora 43 et RHEL 10 ;
* Ubuntu 25.10 et donc probablement sa future LTS.
Toutes ces distributions fournissent des environnements de bureau bien gras, un saint duopole de l'interface graphique libre ; qui, annonçons-le après 10 ans de prototypage, fonctionne plutôt bien (même avec une carte NVIDIA, c'est dire !).
Mais une telle installation ne convient pas à tout le monde ni à tous les cas :
- quid de l'embarqué ?
- remémorons-nous nos premières années… on installait le serveur X, un gestionnaire de fenêtres parmi une floppée et nos applis. Notre bureau était fait sur mesure, il était modulaire… (je remontre une telle installation ici d'ailleurs).
Le projet Wayland fournit un compositeur de référence : Weston.
Étant écrit à 90% par des gens de l'embarqué, il remplit haut la main le premier critère ! Et fournit plein de fonctions : un lanceur, deux gestionnaires de fenêtres, du rendu logiciel ou accéléré 3D (avec Vulkan depuis peu), un enregistreur vidéo, un serveur RDP…

En vrai si tu es dans l'embarqué, tu devrais vraiment considérer Weston ; en suivant p.ex. son excellente documentation. Mais il n'est pas vraiment modulaire : c'est-à-dire que peu écrivent des modules pour Weston (j'étais l'un des rares, et reprendrai peut-être bientôt 😉…).
C'est pourquoi je vais présenter ici…. l'autre famille.
Installer notre compositeur : labwc
wlroots est une bibliothèque permettant à chacun d'écrire son propre compositeur en abstrayant le code redondant (initialisation du GPU, gestion des entrées…).
Il permet en fait de revenir à une logique de "gestionnaire de fenêtres" sous Wayland ; ce wiki en liste plein !

labwc est mon petit chouchou parmi ceux-ci : il est traditionnel, léger et maintenu. Il dit s'inspirer d'un certain OpenBox (que je t'avoue ne pas avoir utilisé).
Nous allons installer sa dernière version nous-mêmes.
Prérequis
Debian 13 "Trixie"/Ubuntu 25.04 "Plucky Puffin"
sudo apt install libxml2-dev libpng-dev librsvg2-dev liblcms2-dev libcairo2-dev libpango1.0-dev libsystemd-dev
sudo apt install wayland-protocols libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libvulkan-dev
sudo apt install xwayland libxcb-render-util0-dev libxcb-errors-dev libxcb-icccm4-dev libxcb-ewmh-dev
sudo apt install libx11-xcb-dev libxcb1-dev libxcb-image0-dev libxcb-composite0-dev libxcb-shm0-dev libxcb-dri3-dev libxcb-present-dev libxcb-res0-dev libxcb-xinput-dev
sudo apt install glslang-tools hwdata libcap-dev libegl-dev libegl1-mesa-dev libgles2-mesa-dev
sudo apt install libinput-dev libseat-dev libdisplay-info-dev libsfdo-dev libliftoff-dev
sudo apt install git meson
Vérifiez que vous avez bien au moins Wayland 1.23.1 :
pkg-config --modversion wayland-client
# 1.23.1
Fedora 42 (mise à jour)
sudo dnf install libxml2-devel libpng-devel librsvg2-devel lcms2-devel cairo-devel pango-devel systemd-devel
sudo dnf install wayland-devel wayland-protocols-devel libxkbcommon-devel libdrm-devel mesa-libgbm-devel vulkan-loader-devel
sudo dnf install xorg-x11-server-Xwayland-devel xcb-util-renderutil-devel xcb-util-errors-devel xcb-util-wm-devel
sudo dnf install libinput-devel libseat-devel libdisplay-info-devel libsfdo-devel libliftoff-devel
sudo dnf install wlroots-devel git meson
Vérifiez que vous avez bien wlroots 0.19 :
pkg-config --modversion wlroots-0.19
# 0.19.2
Installer
Debian et Ubuntu ont encore une étape supplémentaire (que Fedora peut sauter) :
Compiler wlroots 0.19.2
git clone https://gitlab.freedesktop.org/wlroots/wlroots --branch 0.19.2
cd wlroots/
meson setup build/ --wrap-mode=nodownload
meson compile -C build/
sudo meson install -C build/ --skip-subprojects
Vérifiez que vous avez bien wlroots 0.19 :
pkg-config --modversion wlroots-0.19
# 0.19.2
Compiler labwc 0.9.2
git clone https://github.com/labwc/labwc --branch 0.9.2
cd labwc/
meson setup build/ --wrap-mode=nodownload
meson compile -C build/
sudo meson install -C build/ --skip-subprojects
Verifier
Nous pouvons maintenant préparer la configuration du clavier français :
mkdir ~/.config/labwc
echo "XKB_DEFAULT_LAYOUT=fr" > ~/.config/labwc/environment
et tester :
labwc

Un fond noir que rien ne permet de changer, un menu avec une seule application au clic-droit, aucune fonction apparente… c'est spartiate !
C'est parce labwc n'est pas conçu pour fonctionner seul mais avec un écosystème d'outils qui, tous, utilisent le protocole wlr-layer-shell de wlroots. Une liste quasi-intégrale de ceux-ci est fournie ici ; je vais vous présenter les indispensables.
Outils pour notre compositeur
Terminal : foot
foot est un digne remplaçant du vénérable xterm, qui ne dépend d'aucun toolkit ni même de X11 : il est pur Wayland.
Sa fonction reprise de xterm qui me fait craquer : il supporte les images au format Sixel de DEC :flushed:.
curl -O https://raw.githubusercontent.com/saitoha/libsixel/master/images/snake.six
cat snake.six

# Fedora
sudo dnf install foot
# Debian/Ubuntu
sudo apt install foot
Pour l'avoir par défaut dans labwc, il suffit de le positionner en haut dans /usr/local/bin/lab-sensible-terminal :
terminals="\
foot \
x-terminal-emulator \
Lanceurs : LavaLauncher (statique) - Cairo-Dock (dynamique)
LavaLauncher est une barre de lancement statique, comme celle de Weston.
# Fedora
sudo dnf install breeze-icon-theme lava-launcher
# Debian/Ubuntu
sudo apt install breeze-icon-theme
# (doit compiler)
git clone https://git.sr.ht/~leon_plickat/lavalauncher
cd lavalauncher/
sed -i "/^subdir('doc')\$/s/^/#/" meson.build
meson setup build/ --wrap-mode=nodownload
meson compile -C build/
sudo meson install -C build/ --skip-subprojects
Configurez-la p.ex. avec ce lavalauncher.conf que je fournis :
mkdir ~/.config/lavalauncher
curl https://tarnyko.net/repo/labwc/lavalauncher.conf > ~/.config/lavalauncher/lavalauncher.conf
Pour la lancer au démarrage de labwc :
echo "lavalauncher &" > ~/.config/labwc/autostart

Cairo-Dock est une superbe alternative dynamique qui auto-découvre vos lanceurs d'applications ; sa version Ubuntu/Debian stable est un peu ancienne et cassée ici, mais la 3.6.1 de Fedora 42 fonctionne à merveille sur labwc :
sudo dnf install cairo-dock-core
echo "cairo-dock -c &" > ~/.config/labwc/autostart

Fond et verrouillage d'écran : swaybg - swaylock
Ces 2 outils liés au compositeur Sway nous fourniront l'essentiel :
# Fedora
sudo dnf install swaybg swaylock
# Debian/Ubuntu
sudo apt install swaybg swaylock
Définissons un fond d'écran au démarrage avec swaybg (l'image doit exister ; elle vient ici du paquet "weston") :
echo "swaybg -m stretch -i /usr/share/weston/background.png" >> ~/.config/labwc/autostart
De plus, vous avez peut-être remarqué mon icône de cadenas sur LavaLauncher ; swaylock verrouillera sans chichis :

Capture et enregistrement d'écran : grim & slurp - wf-recorder
grim prend des captutes d'écran, et slurp peut lui indiquer une région d'écran cliquée interactivement par l'utilisateur :
# Fedora
sudo dnf install grim slurp wl-clipboard
# Debian/Ubuntu
sudo apt install grim slurp wl-clipboard
Ils seront notre première occasion de définir des raccourcis clavier globaux via le fichier rc.xml (que je fournis) :
curl https://tarnyko.net/repo/labwc/rc.xml > ~/.config/labwc/rc.xml
echo 'grim - | wl-copy' | sudo tee /usr/local/bin/grim-screen.sh
echo 'grim -g "$(slurp)" - | wl-copy' | sudo tee /usr/local/bin/grim-region.sh
sudo chmod a+x /usr/local/bin/grim-*.sh
Nous pouvons dorénavant utiliser [Impr.Écran] et [Super]+[Impr.Écran] pour copier tout ou partie de l'écran dans le presse-papiers, et coller dans n'importe quelle application.

Pour enregistrer l'écran, wf-recorder est la référence. Attention : il tire FFmpeg et je ne lui ai pas encore trouvé de meilleure interface qu'un SIGHUP :wink:.
# Fedora
sudo dnf install wf-recorder
# Debian/Ubuntu
sudo apt install wf-recorder
wf-recorder -f record.mkv
Clavier virtuel : wvkbd
wvkbd est une semblance du vénérable xvkbd fournissant un clavier virtuel ; idéal pour l'embarqué !
# Fedora
curl -O https://download.copr.fedorainfracloud.org/results/fed500/wvkbd/fedora-42-x86_64/08982658-wvkbd/wvkbd-0.16-1.fc42.x86_64.rpm
sudo rpm -ivh wvkbd*.rpm
# Debian/Ubuntu
sudo apt install wvkkb
Une fois installé, on peut le faire apparaître et disparaître à volonté :
wvkbd-mobintl -H 200 --hidden &
# faire apparaître
killall -SIGUSR2 wvkbd-mobintl
# faire disparaître
killall -SIGUSR1 wvkbd-mobintl

Pour le démarrer automatiquement et le faire surgir d'un raccourci clavier, vous savez désormais comment faire 😉.
Bureau distant VNC : wayvnc
Rien ne vaut WayVNC pour le contrôle distant via le protocole VNC :
# Fedora
sudo dnf install wavnc
# Debian/Ubuntu
sudo apt install wayvnc
Faisons-le écouter en clair sans mot de passe (pour la démo) :
wayvnc 0.0.0.0
Pour chiffrer et utiliser un mot de passe, il faut forcément créer une clé TLS ; je vous laisse lire la documentation :wink:.
Configuration d'écrans : wlr-randr - wdisplays
wlr-randr reprend partiellement la classique syntaxe XRandR :
# Fedora
sudo dnf install wlr-randr wdisplays
# Debian/Ubuntu
sudo apt install wlr-randr wdisplays
pour une configuration facile de vos écrans :
wlr-randr --output WL-1 --mode 1024x768
# pivoter l'écran
wlr-randr --output WL-1 --transform 90
wlr-randr --output WL-1 --transform normal
# positionner l'écran 1 à droite de l'écran 2
wlr-randr --output WL-1 --right-of WL-2
(remplacez éventuellement "WL-1" par le résultat de : wlr-randr | head -n 1 | cut -d' ' -f1)
Si vous préférez un outil graphique, wdisplays est un outil GTK3 ne dépendant donc pas du bureau GNOME :

Résumé
Bravo : après tous ces efforts, on est maintenant iso-fonctionnels avec Weston ! Eh oui, on n'a pas plus de fonctions, on a surtout échangé le serveur RDP pour VNC ; mais pu sélectionner chaque composant individuel 😉.
Se lancer : remplacer GNOME par labwc
Vous avez probablement utilisé toutes les commandes ci-dessus depuis un bureau pré-existant ; à ce moment, le compositeur se lance comme une fenêtre, et c'est parfait pour prototyper :smiley:.
Il est temps de démarrer avec labwc en bureau principal !
Désactivez GNOME, l'écran devient noir…
sudo systemctl disable gdm --now
Si vous avez une carte NVIDIA avec le driver propriétaire, assurez-vous d'avoir au moins sa version 555.42 et faites :
echo "options nvidia-drm modeset=1" | sudo tee /etc/modprobe.d/nvidia.conf
sudo reboot
Une pression sur [Ctrl]+[Alt]+[F2] nous amènera sur un login en mode texte, où après connexion nous n'aurons plus qu'à faire :
labwc
Et voilà !
P.S. : si les applications X11 ne se lancent pas, c'est possiblement parce que les capacités du GPU ne conviennent pas à Xwayland. Dans ce cas, passer en rendu logiciel :
echo "WLR_RENDERER=pixman" >> ~/.config/labwc/environment

# Rha, coquille !
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
Aux modérateurs, cette section:
Fedora 42 (mise à jour)
Vérifiez que vous avez bien wlroots 0.19 :
devrait en fait être :
Fedora 42 (mise à jour)
Vérifiez que vous avez bien wlroots 0.19 :
Merki 😀
[^] # Re: Rha, coquille !
Posté par Benoît Sibaud (site web personnel) . Évalué à 4 (+1/-0).
Corrigé, merci.
# wlr-randr
Posté par Meku (site web personnel) . Évalué à 5 (+3/-0).
J'ai parcouru le journal puis quand j'ai vu la commande wlr-randr, j'ai vite installé ça sur ma machine pour la tester. Ça fait des mois que je cherche un moyen pratique en ligne de commande pour gérer l'affichage.
Et puis :
ಥ﹏ಥ
(Je suis sous Gnome 49.2)
J'ai vu que ça marchait avec Cosmic Desktop.
[^] # Re: wlr-randr
Posté par Tarnyko (site web personnel) . Évalué à 4 (+2/-0). Dernière modification le 14 décembre 2025 à 18:23.
Hello Meku ; alors :
C'est attendu, et tristement prévisible : comme son nom l'indique un petit peu, wlr-randr ne supporte que les compositeurs exposant la famille de protocoles wlr
(c'est-à-dire ceux basé sur la lib wlroots ; dont labwc de cet article… et COSMIC apparemment, tu me l'apprends !).
Comme ça à vue de nez, je peux prédire que ça ne marchera pas non plus sous KDE Plasma ni Weston.
Ceux-ci gèrent eux-mêmes leurs réglages vidéos, avec ou sans protocole externe pour interagir avec. Techniquement, ils pourraient le supporter (via un module ?) mais ne le font pas de base, et personne n'a jugé bon d'écrire un tel module on dirait…
Rien à voir mais : GNOME ne propose pas un truc par D-Bus ?
[^] # Re: wlr-randr
Posté par Meku (site web personnel) . Évalué à 3 (+1/-0).
Si mais je cherchais une commande plus universelle et indépendante de l'environnement de bureau, à la xrandr. C'est pour ça que wlr-randr m'a tout de suite intéressé.
Sinon, l'interface wlr-output-management-unstable-v1 est encore expérimentale, ce qui peut expliquer la non implémentation par Gnome et d'autres.
Sur https://wayland.app/protocols/wlr-output-management-unstable-v1 tout en bas on peut avoir l'état d'implémentation de cette interface par compositeur.
KWin et Gamescope ne l'implémentent pas non plus.
[^] # Re: wlr-randr
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
Ils ne l'implémenteront probablement pas eux-mêmes : ce n'est pas "dans la famille", pour ainsi dire.
Si on voulait le faire léger et hors de Mutter (leur compositeur), on pourrait imaginer un petit processus indépendant qui expose le protocole et lance les commandes D-Bus qu'il attend. Ce serait un chouette projet pas trop gros !
[^] # Re: wlr-randr
Posté par Meku (site web personnel) . Évalué à 3 (+1/-0).
Oui mais j'espère qu'un jour ce genre d'interface « migre » dans le core wayland.
Le contrôle de Mutter via D-Bus, si c'est dans une commande généraliste qui encapsule les interfaces des autres Desktops, ok, mais si c'est une commande propre à Gnome, c'est moins top car pas portable (toujours mieux que rien mais bon).
[^] # Re: wlr-randr
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
C'est l'idée (enfin normalement) !
Le protocole Wayland n'a pas voulu définir ces aspects côté serveur, alors chacun a fait à sa sauce.
L'encapsulation ne va objectivement pas dans wlr-randr, éventuellement dans GNOME… mais ils l'accepteront pas tel quel ; pour ça je suggérais un module indépendant. À la fin le protocole le plus utilisé "gagnera" logiquement.
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.