Affichage Linux
Le système d'affichage de Linux utilise plusieurs technologies, protocoles, extensions, applications, serveurs (démon), pilotes et concepts pour réaliser le système de fenêtrage, par exemple :Xorg, Wayland, X11, OpenGL, RandR, XrandR, Résolution d'écran, DPI, Serveur d'affichage , etc. Cela peut être difficile à comprendre pleinement, mais chaque côté est destiné à un usage spécifique et ils ne sont pas utilisés tous ensemble en même temps.
Protocole X
Le système X Window, X11 (X version 11) est un système de fenêtrage pour les affichages bitmap, courant sur les systèmes d'exploitation de type Unix, X fournit le cadre de base d'un environnement graphique :dessiner et déplacer des fenêtres sur le périphérique d'affichage et interagir avec une souris et un clavier. X n'impose pas l'interface utilisateur, celle-ci est gérée par des programmes individuels. En tant que tel, le style visuel des environnements basés sur X varie considérablement; différents programmes peuvent présenter des interfaces radicalement différentes. X est né du projet Athena du Massachusetts Institute of Technology (MIT) en 1984. Le protocole X est à la version 11 (d'où "X11") depuis septembre 1987. La Fondation X.Org dirige le projet X, avec l'implémentation de référence actuelle , X.Org Server, disponible en tant que logiciel gratuit et open source sous licence MIT et licences permissives similaires.
Implémentation X
La plupart des distributions Linux utilisent X.Org Server qui est l'implémentation gratuite et open-source du serveur d'affichage pour le système X Window (X11) géré par la Fondation X.Org. Xorg/X seul ne prend pas en charge plusieurs fonctionnalités fournies telles que la mise à l'échelle ou le rendu, pour ce Xorg utilise des extensions comme XFixes, RandR (RandR est géré par xrandr
il peut par exemple configurer le panoramique, la résolution ou la mise à l'échelle), GLX (extension OpenGL), Render ou Composite qui provoque le rendu d'un sous-arbre entier de la hiérarchie de la fenêtre dans un tampon hors écran, les applications peuvent alors prendre le contenu de ce tampon et faire ce qu'ils veulent, le tampon hors écran peut être automatiquement fusionné dans la fenêtre parente ou fusionnés par des programmes externes, appelés gestionnaires de composition faire du compositing tout seul comme certains gestionnaires de fenêtres fais; Par exemple. Compiz, Enlightenment, KWin, Marco, Metacity, Muffin, Mutter et Xfwm. Pour les autres "non-compositing " gestionnaires de fenêtres, un gestionnaire composite autonome peut être utilisé, exemple :Picom, Xcompmgr ou Unagi. Extensions prises en charge par Xorg peut être listé avec :xdpyinfo -display :0 -queryExtensions | awk '/^number of extensions:/,/^default screen number/'
.
D'autre part Wayland est conçu comme un remplacement plus simple pour Xorg / X11, plus facile à développer et à entretenir, mais à partir de 2020, la prise en charge du bureau pour Wayland n'est pas encore entièrement prête autre que Gnome (par exemple, la prise en charge de KDE Kwin et Wayland); du côté des distributions, Fedora utilise Wayland par défaut. A noter que Wayland et Xorg peuvent fonctionner simultanément, cela peut être le cas selon la configuration utilisée. XWayland est une série de correctifs sur la base de code du serveur X.Org qui implémente un serveur X fonctionnant sur le protocole Wayland. Les correctifs sont développés et maintenus par les développeurs de Wayland pour la compatibilité avec les applications X11 lors de la transition vers Wayland, et ont été intégrés dans la version 1.16 du serveur X.Org en 2014. Lorsqu'un utilisateur exécute une application X depuis Weston, il fait appel à XWayland pour traiter la demande.
Toute la portée
Un serveur d'affichage ou serveur de fenêtre est un programme (comme Xorg ou Wayland) dont la tâche principale est de coordonner l'entrée et la sortie de ses clients vers et depuis le reste du système d'exploitation, le matériel et entre eux. Le serveur d'affichage communique avec ses clients via le protocole du serveur d'affichage, un protocole de communication qui peut être transparent sur le réseau ou simplement compatible avec le réseau. Par exemple, X11 et Wayland sont des protocoles de communication de serveur d'affichage.
Comme indiqué sur le schéma un gestionnaire de fenêtres est un autre élément important de l'environnement de bureau qui est un logiciel système qui contrôle le placement et l'apparence des fenêtres dans un système de fenêtrage dans une interface utilisateur graphique. La plupart des gestionnaires de fenêtres sont conçus pour fournir un environnement de bureau. Ils fonctionnent en conjonction avec le système graphique sous-jacent qui fournit la prise en charge des fonctionnalités requises pour le matériel graphique, les dispositifs de pointage et un clavier, et sont souvent écrits et créés à l'aide d'une boîte à outils de widgets. KDE utilise KWin comme gestionnaire de fenêtres (il a un support limité pour Wayland à partir de 2020), de même Gnome 2 utilise Metacity et Gnome 3 utilise Mutter comme gestionnaire de fenêtres.
Un autre aspect important d'un gestionnaire de fenêtres est le compositeur ou gestionnaire de fenêtres de composition , qui est un gestionnaire de fenêtres qui fournit aux applications un tampon hors écran pour chaque fenêtre. Le gestionnaire de fenêtres compose les tampons de fenêtre en une image représentant l'écran et écrit le résultat dans la mémoire d'affichage. Les gestionnaires de fenêtres de composition peuvent effectuer un traitement supplémentaire sur les fenêtres mises en mémoire tampon, en appliquant des effets d'animation 2D et 3D tels que le mélange, le fondu, la mise à l'échelle, la rotation, la duplication, la flexion et la contorsion, le mélange, le flou, la redirection des applications et la traduction des fenêtres dans l'un des nombreux affichages et bureaux virtuels. La technologie d'infographie permet de rendre des effets visuels en temps réel tels que des ombres portées, des aperçus en direct et des animations complexes. Étant donné que l'écran est à double tampon, il ne scintille pas pendant les mises à jour. Les gestionnaires de fenêtres de composition les plus couramment utilisés sont :Linux, BSD, Hurd et OpenSolaris-Compiz, KWin, Xfwm, Enlightenment et Mutter. chacun a sa propre implémentation, par exemple le compositeur de KWin de KDE ont de nombreuses fonctionnalités/paramètres comme la vitesse d'animation, la prévention des déchirures (vsync), les vignettes de fenêtre, la méthode de mise à l'échelle et peuvent utiliser OpenGLv2/OpenGLv3 ou XRender en tant que backend de rendu avec Xorg. (XRender/Render à ne pas confondre avec XRandR/RandR).
OpenGL (bibliothèque graphique ouverte) est une interface de programmation d'application (API) multilingue et multiplateforme pour le rendu de graphiques vectoriels 2D et 3D. L'API est généralement utilisée pour interagir avec une unité de traitement graphique (GPU) afin d'obtenir un rendu accéléré par le matériel. OpenGL est une bibliothèque de rendu qui peut être utilisée avec Xorg, Wayland ou toute application qui l'implémente. L'installation d'OpenGL peut être vérifiée avec glxinfo | grep OpenGL
.
La résolution d'affichage ou modes d'affichage d'un écran d'ordinateur ou d'un dispositif d'affichage est le nombre de pixels distincts dans chaque dimension qui peuvent être affichés. Il est généralement cité comme largeur × hauteur, avec les unités en pixels :par exemple, 1024 × 768 signifie que la largeur est de 1024 pixels et la hauteur est de 768 pixels. xrandr
peut être utilisé pour ajouter ou rendre/simuler une nouvelle résolution d'affichage.
Le PPP représente les points par pouce et est une mesure de l'impression/affichage spatial , en particulier le nombre de points individuels qui peuvent être placés sur une ligne dans un intervalle de 1 pouce (2,54 cm). Les écrans d'ordinateur n'ont pas de points, mais ont des pixels, le concept étroitement lié est les pixels par pouce ou PPI et donc DPI est mis en œuvre avec le concept PPI. Le 96
par défaut La mesure DPI signifie 96x96 verticalement et horizontalement. De plus, le paramètre X DPI (point par pouce) est-il uniquement destiné à la mise à l'échelle du texte ? Le contrôle qualité est très instructif.
Remarques
Certains outils graphiques de KDE : systemsettings5
> affichage, kcmshell5 xserver
et kinfocenter
.
Références
Liens et sources : 1,2,3,4,5,6,7,8,9,10,11 et 12.
La question est assez large, et beaucoup plus pourrait être écrit sur le sujet que cette réponse ne couvre. J'ai essayé de fournir une perspective historique sur l'évolution des graphiques Linux. Les graphiques, les systèmes de fenêtrage et les interfaces utilisateur graphiques (GUI) sous Linux ont subi de nombreux changements depuis le début des années 1990, lorsque le système X Window (X11) a été porté sur Linux.
Le système X Window
Le système X Window a été développé au MIT dans les années 1980. Le nom X11 fait référence à la version 11 du protocole X, mais X10 a également été utilisé en dehors du MIT avant d'être remplacé par la version 11 en 1987.
Le système X Window a été conçu pour fonctionner sur des systèmes graphiques qui étaient à la pointe de la technologie dans les années 1980. Un poste de travail typique avait un seul tampon de trame connecté à un simple contrôleur CRT qui affichait le contenu du tampon de trame sur un moniteur d'affichage. Avant l'ère des PC et des stations de travail, l'informatique se faisait via des terminaux de ligne série («muets») connectés à des ordinateurs centraux situés dans des salles des machines informatiques. Ce contexte historique a influencé la conception de X11 :les applications graphiques pouvaient être exécutées sur des ordinateurs distants, l'utilisateur interagissant avec le programme à l'aide de terminaux dotés de capacités graphiques. Le "terminal" peut être un poste de travail ou un terminal X dédié.
X11 a été conçu comme un système serveur-client. Le serveur X était la seule partie communiquant directement avec le matériel graphique. Les clients X sont des programmes d'application qui communiquent avec le serveur à l'aide du protocole X, soit à l'aide d'un socket de domaine Unix local, soit d'une connexion TCP/IP. Le protocole X est utilisé par le client pour envoyer des requêtes au serveur et recevoir des messages d'événement du serveur.
Les demandes incluent des messages pour :
- création de fenêtre
- mapper/démapper une fenêtre :rendre la fenêtre visible/invisible
- dessiner sur la fenêtre :dessiner des pixels, des lignes, des arcs, des ovales, des pixmaps, etc.
- afficher du texte en utilisant une police, une taille et un style spécifiés
- déplacement et redimensionnement des fenêtres, modification de l'ordre d'empilement des fenêtres, etc.
Les clients reçoivent des messages (liste non exhaustive) :
- répond aux demandes
- Événements de pression de touche et de clic de souris
- exposer les événements (une zone d'une fenêtre doit être redessinée)
- concerner les événements de gain/perte
Pour permettre à l'utilisateur de manipuler les fenêtres à l'écran, par exemple déplacer, redimensionner, fermer, monter et descendre une fenêtre, une application particulière appelée gestionnaire de fenêtres est prévue. Le gestionnaire de fenêtres peut également afficher des décorations de fenêtre telles que des bordures, des barres de titre et des menus globaux.
On pourrait dire que le serveur X11 est assez "haut de gamme", car il gère (ou du moins gère traditionnellement) toutes sortes de ressources :fenêtres, polices, pixmaps, colormaps, contextes graphiques (choses comme la couleur de premier plan/arrière-plan, largeur de ligne, etc. ). En plus de cela, le serveur s'occupe de choses comme les relations parent-enfant des fenêtres et l'ordre d'empilement des fenêtres.
Le protocole X est conçu pour être extensible. Le serveur X peut apprendre à faire de nouvelles astuces, et de nouveaux opecodes sont ajoutés au protocole pour que le serveur exécute ces astuces. Par exemple, l'extension XRender introduit un moyen de gérer la transparence ("alpha blending"). Cette extension a été introduite principalement pour prendre en charge les polices anti-aliasées, mais a également été utilisée pour les effets de bureau tels que les ombres portées sur les fenêtres. L'extension RandR ("Resize and Rotate") permet de redimensionner, faire pivoter et refléter la fenêtre racine à l'écran. Cela vous permet de projeter l'écran à l'aide d'un projecteur à l'envers ou d'utiliser un moniteur incliné.
L'extension GLX (OpenGL Extension to the X Window System) permet d'utiliser OpenGL dans une fenêtre fournie par le serveur X. Les appels à OpenGL sont intégrés dans les requêtes du protocole X.
À un moment donné de l'évolution de X11, la gestion des polices a été déplacée pour être gérée par le client. Les raisons de ce changement sont discutées dans Nouvelles évolutions du système X Window.
Rendu direct
Au début des années 2000, le matériel d'affichage avait parcouru un long chemin depuis les simples écrans bitmap en noir et blanc qui existaient lorsque le développement de X a commencé dans les années 1980. La surcharge relative X11 du modèle de communication inter-processus (IPC) était devenue trop importante, même lors de l'utilisation d'un socket local. La solution à cela était d'abandonner le principe selon lequel le serveur X est la seule partie qui parle directement au matériel et de laisser les clients parler directement à la carte graphique. L'infrastructure de rendu direct (DRI) était née.
DRI permet à une application client X de contourner le serveur X et de s'afficher directement sur la carte graphique. Étant donné que plusieurs applications de rendu direct en plus du serveur X traditionnel peuvent être actives en même temps, un composant du noyau appelé Direct Rendering Manager a été introduit pour arbitrer l'accès au matériel. Il existe trois versions de l'architecture DRI, la DRI d'origine (obsolète), la DRI2 et la DRI3.
Gestionnaires de fenêtres de composition
La prochaine innovation à entrer sur la scène graphique Linux était le gestionnaire de fenêtres de composition. Traditionnellement, chaque application cliente X était chargée de repeindre ses fenêtres (partiellement ou toute la fenêtre) à la demande. Le serveur X a envoyé à l'application un événement Expose lorsqu'un repaint était nécessaire en raison du mappage de la fenêtre à l'écran, ou si elle n'est plus masquée par une autre fenêtre. Lorsqu'une fenêtre superposée est supprimée, la fenêtre en dessous est exposée. Si vous ne repeignez pas cette zone, l'ancien contenu reste affiché. https://en.wikipedia.org/wiki/Artefact_visuel
Un gestionnaire de fenêtres de composition change cela. Les applications s'affichent dans leurs propres tampons hors écran, chacun étant une sorte d'écran séparé avec un accès exclusif par l'application propriétaire du tampon. C'est la tâche du gestionnaire de fenêtres de composition d'afficher ces tampons dans des fenêtres sur un écran réel, en coupant toutes les fenêtres qui sont masquées par d'autres fenêtres ou partiellement hors écran. Le gestionnaire de fenêtres affiche une "composition" des fenêtres.
Un gestionnaire de composition peut généralement également afficher des effets animés, tels que la mise à l'échelle, la déformation, la décoloration, la rotation, le flou des fenêtres. Par exemple, le déplacement d'une fenêtre peut la faire vaciller, ou des bureaux virtuels peuvent être affichés sur le côté d'un cube en rotation.
Paramètre du mode noyau
Traditionnellement, le serveur X s'occupait également de définir les modes de l'adaptateur graphique, comme la résolution et les taux de rafraîchissement. Le paramètre de mode a depuis été déplacé vers un composant du noyau Linux appelé Kernel Mode Setting (KMS). Cela a résolu de nombreux problèmes de basculement entre les consoles virtuelles de Linux.
Evdev
Le serveur X connaissait également les périphériques d'entrée et, par exemple, le type de souris devait être spécifié dans la configuration X. Le serveur X a été soulagé de cette tâche avec l'introduction du sous-système evdev du noyau Linux, qui fournit une interface d'événement d'entrée générique.
Wayland
Avec tous ces développements, de nombreuses tâches effectuées par le serveur X ont été déplacées en dehors du serveur X. En utilisant le rendu direct, les clients n'utilisent plus le protocole X. Grâce à KMS, le serveur X n'a pas besoin de s'occuper de la programmation de bas niveau des adaptateurs graphiques. Avec evdev, la gestion des périphériques d'entrée a été simplifiée dans le serveur X. Lors de l'utilisation d'un gestionnaire de fenêtres de composition réorganisant et déformant les fenêtres, le serveur X n'a plus aucune idée de ce qui se passe à l'écran. "Le gestionnaire de fenêtres est le nouveau serveur X".
Wayland est né de la prise de conscience que le processus du serveur X n'avait plus grand-chose à faire et qu'en supprimant l'intermédiaire (le serveur X), un système graphique de bureau beaucoup plus simple pouvait être obtenu. La rétrocompatibilité est assurée via Xwayland, un serveur Xorg modifié qui affiche les fenêtres X de niveau supérieur à l'aide des surfaces Wayland.
À proprement parler, Wayland n'est qu'un protocole qui définit la manière dont les clients communiquent avec le serveur d'affichage. Le protocole Wayland est assez différent du protocole X :le protocole Wayland ne définit pas les messages pour dessiner des graphiques ou du texte, ni ne gère les polices.
Dans l'architecture Wayland, le gestionnaire de fenêtres et le serveur d'affichage sont fusionnés en un seul composant logiciel, le gestionnaire de fenêtres de composition. Les clients peuvent demander, via une bibliothèque logicielle utilisant le protocole Wayland, une surface sur laquelle dessiner. Une "surface est un objet représentant une zone rectangulaire sur l'écran, définie par un emplacement, une taille et un contenu en pixels".
Les clients effectuent le rendu dans des tampons hors écran, qui sont ensuite attachés à une surface, produisant une sortie à l'écran. Le client peut utiliser différentes API pour effectuer le rendu :OpenGL, OpenGL ES, etc. ("Qu'est-ce que l'API de dessin ? Quoi que vous vouliez qu'elle soit") Le double tampon est utilisé :un client met à jour son image à l'aide d'un deuxième tampon, et lorsque ce tampon contient une image cohérente, il est commuté pour être affiché au prochain intervalle de suppression verticale du moniteur d'affichage. La devise de Wayland est :"Chaque cadre est parfait", c'est-à-dire que les fenêtres ne se déchirent pas, ne scintillent pas et ne clignotent pas.
La gestion des entrées dans Wayland passe par le compositeur, qui est le seul composant sachant quelle fenêtre se trouve sous le curseur de la souris (rappelez-vous, le compositeur peut également avoir déformé les fenêtres). Le compositeur transforme les coordonnées de l'écran en coordonnées locales de la fenêtre appropriée et envoie l'événement au client.
Si vous êtes intéressé par l'histoire qui a conduit à la création de Wayland, je vous recommande de regarder la présentation hilarante de Daniel Stone La véritable histoire derrière Wayland et X.