2025-03-23
Comme je reviens un peu dans le monde du rendu graphique, je me suis dit que j'allais me remettre à jour sur le système d'affichage de Linux.
Ce qui m'avait frappé dans les tutoriaux X11 de la grande époque, c'est la simplicité du tout début. Créer un carré blanc avec une barre titre ? Morceau de cake !

Alors après bizarrement, dés qu'on voulait aller plus loin, ça devenait compliqué...
Bon là je dois divulgâcher : tout ne va pas être résolu à la fin de cet article. Mais une partie si ! Car la base système d'affichage a changé, c'est désormais Wayland.
Or la connaissance qui paradoxalement manque à beaucoup, c'est la manière la plus simple d'arriver à cet équivalent :

et idéalement on aurait même une progression : gestion de la fenêtre, rendu logiciel accéléré, glisser-déposer...
Eh bien justement, si j'en parle, c'est que que j'ai tout ce qu'il faut ici.
Ça se construit en un morceau de cake :
# Debian/Ubuntu:
sudo apt install libwayland-dev libegl-dev libgles-dev libvulkan-dev
# Fedora/RHEL:
sudo dnf install wayland-devel libglvnd-devel vulkan-loader-devel
git clone https://github.com/Tarnyko/suave_code_samples
cd suave_code_samples/C/wayland/
make
et après si vous faites par exemple :
./wayland-03-shm_software_rendering
vous aurez le carré blanc en logiciel sans aucune gestion de fenêtre :

à savoir le cas le plus simple possible, et là vous verrez que Wayland oblige à bien plus de travail...
... est-ce pour autant négatif ? Non ! Car une fois qu'on a les bases, la gestion de fenêtre apparaît bien plus évidente :
./wayland-08-input_shell

Vous pouvez même vous simplifier la vie avec une bibliothèque désormais très répandue :
# Debian/Ubuntu:
sudo apt install libdecor-0-dev
# Fedora/RHEL
sudo dnf install libdecor-devel
DECOR=1 make
dont on lance l'exemple avec :
./wayland-08bis-input_shell-libdecor

et maintenant, soyons fous, tentons le glisser-déposer :
# Debian/Ubuntu
sudo apt install weston
# Fedora RHEL
sudo dnf install weston
./wayland-09-drag_and_drop
en cliquant-gauche, maintenant et déplaçant d'un emplacement de notre fenêtre vers un terminal compatible ; comme weston-terminal que vous avez désormais :

Finalement, vous avez sûrement déjà entendu que Wayland est modulaire (raison pour laquelle certains clients de capture d'écran ne fonctionnent qu'avec certains compositeurs et pas d'autres, grrrr)... mais êtes-vous curieux de savoir ce que votre propre compositeur Wayland supporte ?
./wayland-02-list_interfaces-opengl_vulkan

Nous découvrons les versions non seulement les versions d'OpenGL/Vulkan supportées, mais aussi aussi la liste précise des protocoles supportés... les descriptions conviviales sont de moi !
Ici par exemple, la conclusion est évidente: si je veux regarder mes vidéos VLC du canap', il me manque le protocole "Screensaver Inhibiter" et je dois vite installer GNOME ou Hyprland 😉.
Ah mais par contre, OpenGL est supporté ?!? Testons donc ça :
./wayland-05-accelerated_rendering-opengl

Oui c'est le carré blanc mais en version accélérée par OpenGL. Ne vous plaignez pas : certes je n'ai pas dessiné de polygone pour ne pas choisir entre OpenGL "classique" et ES, mais j'ai quand même fait une itération de nuances de gris 😛 .
Wayland est un protocole minimaliste, en demi-teinte car :
Tout ceci fait de Wayland une bibliothèque destinée au développeur de toolkits ou moteurs, plutôt que d'applications.
Le protocole a permis de supprimer l'héritage dépassé de X11, en ne gardant que ce qu'on utilisait encore. Il n'a par contre pas apporté d'abstraction supplémentaire au développeur, laissant ce poids reposer sur les moteurs - comme avant.
Il n'empêche que "savoir parler Wayland" est une compétence demandée avec la suppression de X11 dans les distributions les plus récentes !
(P.S.: je vous laisse sur une énigme : combien de lignes faut-il pour afficher un carré blanc avec toute la puissance de l'accélération Vulkan? Réponse : je vous laisse cliquer là et moi par sécurité je me barre ->[])