Wayland

Wayland est un protocole permettant à un compositeur de communiquer avec ses clients ; un compositeur étant un gestionnaire de fenêtres qui utilise un tampon en mémoire pour gérer chaque fenêtre et y appliquer des effets visuels ; les clients du compositeur sont les fenêtres à afficher.

Wayland est aussi le nom de la bibliothèque logicielle implémentant ce protocole.

Une couche de compatibilité, XWayland, permet de faire fonctionner les applications pour Xorg avec Wayland. Toutes les applications existantes peuvent donc utiliser Wayland par ce biais, à l'exception de celles qui requièrent les droits d'administration. Un environnement qui supporte ce protocole (GNOME Shell, KDE Plasma, Enlightenment …) est cependant nécessaire.

Pourquoi Wayland ?

Jusqu'à présent, l'affichage était géré par Xorg, un logiciel proposant une implémentation libre d'un protocole (X11) datant des années 80.

Les usages ont beaucoup changé depuis, avec la généralisation des compositeurs graphiques avec des effets visuels avancés pour afficher les fenêtres, et donc un rendu complexe. Cela n'était pas du tout optimal, le protocole X11 n'ayant évidemment pas été conçu pour ça.

De plus, X11 pose un problème de sécurité, puisque les informations sont échangées (entre les fenêtres/applications) sans aucun souci de confidentialité, autorisant des applications à en "espionner" d'autres. C'est tout particulièrement dramatique dans le cas où un utilisateur s'amuserait à lancer des applications graphiques en tant qu'administrateur : ça constitue une faille potentielle de sécurité majeure.

Wayland lui, isole les entrées/sorties de chaque fenêtre, et limite la quantité de code exécutée en tant que root1).

L'architecture de Wayland est optimisée pour le fonctionnement des compositeurs, et facilite le rendu aujourd'hui complexe de l'image des fenêtres, en toute sécurité et avec de meilleures performances.

Pré-requis

Wayland fonctionne seulement avec les systèmes utilisant KMS (Kernel-based mode-setting), une fonctionnalité du noyau dépendant entre autres du pilote de carte graphique utilisé. Par exemple, avec les pilotes propriétaires nVidia, des réglages manuels peuvent être nécessaires2).

Un compositeur implémentant le protocole Wayland (Mutter, Kwin, Enlightenment, Weston…) est aussi nécessaire (sinon Wayland tout seul ne fait rien, et c'est toujours un serveur X qui serait utilisé).

Les pilotes de cartes graphiques implémentent pour la plupart une API (interface de programmation) nommée GBM (Generic Buffer Management), à l'exception des pilotes propriétaires nVidia qui implémentent dans leur coin EGLStreams, EGLStreams n'étant pas supportée par tous les compositeurs existants (Sway et Mutter semblent être les seuls au moment de la rédaction de cet article).

Environnements compatibles

Les environnements de bureau majeurs suivants supportent Wayland :

Environnement Variante Versions compatibles
GNOME Shell Ubuntu (variante par défaut, versions 17.10 et postérieures)
Variante Ubuntu GNOME (versions 17.04 et antérieures)
Compatible depuis GNOME Shell 3.12 environ.
Wayland est utilisé par défaut sur Ubuntu avec GNOME Shell depuis la version 17.10
Enlightenment Aucune variante dédiée.
Seule la version E17 est disponible dans les dépôts d'Ubuntu antérieurs à Cosmic.
Compatible depuis la version E19
KDE Plasma Environnement par défaut de Kubuntu Fonctionnement encore imparfait mais possible depuis environ Ubuntu 16.04

Wayland est aussi très utilisé dans le domaine des smartphones avec Linux (Plasma Mobile, Tizen OS, Sailfish OS), et même des montres connectées GNU/Linux (Asteroid OS) !

D'autres gestionnaires de fenêtres moins répandus (et donc aussi absents des dépôts), ainsi que des environnements spécifiques à certaines utilisations marginales, ne sont pas détaillés ici.

Bibliothèques graphiques

Ces informations sont fournies à titre indicatif, mais un système distribué nativement avec une session "Wayland" 3) devrait théoriquement gérer tout seul ces configurations.

GTK+ 3

Régler la variable d'environnement GDK_BACKEND=wayland.

GTK+ 3 est la bibliothèque utilisée par les applications des environnements GNOME, MATE, Cinnamon, Budgie, …

Qt 5

Pour faire fonctionner une application Qt 5 avec le plugin Wayland, régler la variable d'environnement QT_QPA_PLATFORM=wayland-egl (le paquet fournissant le plugin devant être installé).

Qt est la bibliothèque utilisée entre autres par les environnements KDE Plasma, LXQt, ou encore l'interface de LiriOS (non disponible pour Ubuntu).

Clutter

Régler la variable d'environnement CLUTTER_BACKEND=wayland.

Clutter est entre autres utilisé pour les parties "pas en GTK+" de GNOME Shell.

SDL

Un support expérimental de Wayland existe depuis SDL 2.0.2 ; Pour lancer une application SDL (principalement des jeux vidéo) sur Wayland, réglez SDL_VIDEODRIVER=wayland.

GLFW

Un support expérimental de Wayland existe depuis GLFW 3.1 et peut être activé avec l'option CMake -DGLFW_USE_WAYLAND=ON au moment de la compilation.

EFL

Les bibliothèques EFL (environnement Enlightenment et applications liées) supportent totalement Wayland. Voir cette page.

Weston

Weston est l'implémentation de référence d'un gestionnaire de fenêtre avec composition graphique pour Wayland.

Un article lui est dédié ici.

Ce que nous apprend Weston

En terme de performances, on voit que les fenêtres peuvent être pivotées, animées, zoomées, leurs transparences modifiées, etc. bref, des effets de composition plutôt complexes. Pourtant, Weston reste très rapide, fluide et léger en mémoire. En comparaison, les temps de réactions des applications utilisant XWayland se ressentent d'ailleurs parfois.

Avec Wayland, l'enregistrement de l'écran (capture photo ou vidéo) doit être géré par l'environnement, alors qu'il était jusqu'à présent indépendant de l'environnement utilisé. Vos anciens logiciels de capture d'écran pour Xorg risquent de ne plus fonctionner !

Il s'agit là d'une question de sécurité : les applications n'ayant pas la possibilité de "connaître" la position et le contenu des fenêtres de leurs voisines avec Wayland, ces informations doivent être "demandées" à l'environnement (et notamment au compositeur en ce qui concerne les fenêtres).

Problèmes divers

Connexion à la session impossible

Tous les gestionnaires de sessions ne sont pas capables de lancer des sessions avec Wayland.

Il faut donc s'assurer d'utiliser un gestionnaire de sessions compatible, comme GDM ou SDDM.

Impossible de lancer une application comme admin

Wayland n'autorise pas de manipulations aussi dangereuses : lancer des applications en tant que root représente une surface d'attaque importante pour un éventuel cracker. L’élévation des privilèges devra désormais être gérée par chaque application en fonction de ses besoins (voir les applications en exemple dans la note suivante) via polkit.

Pensez prioritairement à avoir des usages "sains" des droits d'administration (applications adaptées à la gestion moderne des droits, ou ligne de commande) :

Alternativement, il est toujours possible d'utiliser la session X.org pour certains usages n'ayant pas d'alternative.
La commande décrite dans cette note réduit à néant les efforts de Wayland pour sécuriser la session.

Une possibilité pour contourner le mécanisme de sécurité de Wayland est d'utiliser xhost pour autoriser "root" à accéder à la session X de l'utilisateur. En tant qu'utilisateur normal :

xhost si:localuser:root

Après la manipulation, il faut retirer l'accès (sinon vous laisseriez un "trou" dans la sécurité du système) :

xhost -si:localuser:root

Applications non-compatibles

Plusieurs catégories d'applications ont un fonctionnement reposant directement sur Xorg, et ne fonctionnent donc pas avec Wayland :

  • Logiciels de capture d'écran (FIXME, …). Plusieurs alternatives compatibles existent déjà (FIXME, …) ;
  • Logiciels de partage d'écran (TeamViewer, …). Plusieurs alternatives compatibles existent déjà (FIXME, …) ;
  • Logiciels proposant une barre de tâches indépendante du compositeur et de l'environnement (tint2, Docky, Cairo-Dock, …). Utilisez donc plutôt votre environnement, il propose normalement une fonctionnalité équivalente ;

Détecter les applications tournant sur Xwayland

Vous devez installer xeyes. Lancez l'application et cliquez si la fenêtre que vous voulez tester. Bougez la souris sur cette fenêtre si les yeux bougent alors l'application tourne sur Xwayland. Merci à Sergey Bugaev(Anglais).

Voir aussi

1)
Pour plus de détails, voir ces explications très complètes d'un développeur d'Ubuntu sur le forum
3)
comme la session par défaut d'Ubuntu 17.10 par exemple