2025-12-14
Salut nal',
C'est l'ère du bureau Wayland avec le retrait de X11 natif par :
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 :
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.
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.
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
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
Debian et Ubuntu ont encore une étape supplémentaire (que Fedora peut sauter) :
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
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
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.
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 😳.
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 \
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

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 :

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 😉.
# Fedora
sudo dnf install wf-recorder
# Debian/Ubuntu
sudo apt install wf-recorder
wf-recorder -f record.mkv
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 😉.
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 😉.
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 :

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 on a rassemblé 😉.
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 😃.
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