Comment est organisée la stack graphique Linux?

Quelqu'un peut-il expliquer (avec un peu d'espoir avec une image), comment est organisée la stack graphique Linux? Je entends tout le time sur X / GTK / GNOME / KDE etc., mais je n'ai vraiment aucune idée de ce qu'ils font réellement et comment ils interagissent les uns avec les autres et d'autres parties de la stack. Comment s'intègre Unité et Wayland?

    Le système X Window utilise une architecture client-server. Le server X s'exécute sur la machine qui a l'écran (moniteurs + périphériques d'input), tandis que les clients X peuvent s'exécuter sur n'importe quel autre ordinateur et se connecter au server X en utilisant le protocole X Xlib, ou le XCB événementiel non bloquant plus moderne). Le protocole X est conçu pour être extensible et possède de nombreuses extensions (voir xdpyinfo(1) ).

    Le server X ne fait que des opérations de bas niveau, comme la création et la destruction de windows, la réalisation d'opérations de dessin (de nos jours, la plupart des dessins sont faits sur le client et envoyés en tant qu'image au server) un server X exécute X :1 & Xephyr :1 & (Xephyr exécute un server X embarqué sur votre server X actuel), puis exécute xterm -display :1 & passer au nouveau server X (vous devrez peut-être configurer l'autorisation X en utilisant xauth(1) ).

    Comme vous pouvez le voir, le server X fait très peu, il ne tire pas les barres de titre, ne minimise pas la window / iconification, ne gère pas le placement des windows … Bien sûr, comme xterm -geometry -0-0 , mais vous aurez généralement un client X spécial faisant les choses ci-dessus. Ce client s'appelle un gestionnaire de windows . Il ne peut y avoir qu'un seul gestionnaire de windows actif à la fois. Si vous avez toujours ouvert le server X nu des commands précédentes, vous pouvez essayer d'exécuter un gestionnaire de windows comme twm , metacity , kwin , compiz , larswm , pawm , …

    Comme nous l'avons dit, X ne fait que des opérations de bas niveau, et ne fournit pas de concepts de plus haut niveau comme les buttons, les menus, les barres d'outils, … Ils sont fournis par des bibliothèques appelées toolkits , par exemple: Xaw, GTK, Qt, FLTK …

    Les environnements de bureau sont des collections de programmes conçus pour offrir une expérience user unifiée. Les environnements de bureau fournissent généralement des panneaux, des lanceurs d'applications, des plateaux système, des panneaux de contrôle, une infrastructure de configuration (où sauvegarder les parameters). Certains environnements de bureau bien connus sont KDE (construit à l'aide de la boîte à outils Qt), Gnome (en utilisant GTK), Enlightenment (en utilisant ses propres …

    Certains effets de bureau modernes sont mieux réalisés en utilisant du matériel 3D. Donc, un nouveau composant apparaît, le gestionnaire composite . Une extension X, l'extension XComposite, envoie le contenu de la window au gestionnaire composite. Le gestionnaire composite convertit ces contenus en textures et utilise du matériel 3D via OpenGL pour les composer de multiples façons (fusion alpha, projections 3D, …).

    Il n'y a pas si longtime, le server X parlait directement aux périphériques matériels. Une partie importante de la gestion de ce périphérique a été déplacée vers le kernel du operating system: DRI (permettant l'access au matériel 3D par X et les clients de rendu direct), evdev (interface unifiée pour la gestion des périphériques d'input), KMS , GEM / TTM (memory management de texture).

    Donc, avec la complexité de la gestion des périphériques maintenant en dehors de X, il est devenu plus facile d'expérimenter avec des systèmes de windows simplifiés. Wayland est un système de windows basé sur le concept de gestionnaire composite, c'est-à-dire que le système de window est le gestionnaire composite. Wayland utilise la gestion du périphérique qui a été déplacée à partir de X et qui utilise OpenGL.

    Quant à Unity, c'est un environnement de bureau conçu pour avoir une interface user adaptée aux netbooks.

    La stack traditionnelle est construite sur 3 composants principaux:

    • X server qui gère l'affichage
    • Gestionnaire de windows qui met des windows dans des frameworks, des poignées minimisant les windows, etc. Cela fait partie de la séparation du mécanisme de la politique dans Unix
    • Clients effectuant des tâches utiles en affichant le site Web stackexchange. Ils peuvent utiliser le protocole X directement (suicide), utiliser xlib ou xcb (un peu plus facile) ou utiliser des outils tels que GTK + ou QT.

    L'architecture X a été rendue réseau permettant ainsi aux clients d'être sur un hôte séparé puis sur un server.

    Jusqu'ici tout va bien. Cependant, c'était l'image du path du return. De nos jours, ce n'est pas le processeur qui gère les charts mais le GPU. Il y a eu plusieurs tentatives pour l'incorporer dans le model – et le lieu où le kernel se met en place plus largement.

    Tout d'abord, il y a eu des hypothèses concernant l'utilisation de la carte graphique. Par exemple, seul le rendu à l'écran était supposé. Je ne peux pas find cette information sur wikipedia en ce moment mais DRI 1 a également supposé qu'une seule application utilisera OpenGL en même time (je ne peux pas citer tout de suite mais je peux creuser le bug là où il était proche comme WONTFIX avec note à attendre à DRI 2).

    Quelques solutions temporaires ont été proposées pour le rendu indirect (nécessaire pour la WM composite):

    • XGL – proposition précoce supportant des applications parlant directement à la carte
    • AIGLX – proposition acceptée qui utilise les propriétés réseau du protocole OpenGL
    • Solution propriétaire de NVidia

    Les travaux sur l'architecture plus récente (DRI 2) ont été lancés. Cela comprenait:

    • Prise en charge du kernel pour la memory management (GEM / TTM)
    • Kernel (KMS) permettant de changer la résolution dans le kernel, évitant ainsi les retards lors de la commutation entre X et console et quelques autres fonctionnalités (comme l'affichage du message sur la panique même si X est en cours d'exécution).

    D'une certaine façon orthogonale pour passer au kernel le travail sur les pilotes Gallium ont été démarrés. La bibliothèque Mesa a commencé par l'implémentation d'OpenGL sur le processeur, puis elle a commencé à utiliser l'accélération GPU. Il a toujours été serré à OpenGL. Dans OpenGL 3.0, le model a changé de manière significative et la réécriture de la bibliothèque était inévitable. Cependant, ils en profitent pour split le code en plusieurs couches en extrayant du code commun et en fournissant des API de bas niveau permettant de mettre en œuvre plusieurs API 3D en plus – permettant par exemple à Wine de communiquer directement avec Gallium au lieu de passer par l'OpenGL Couche API (qui peut ne pas avoir d'appels directs 1-1).


    Wayland est un projet qui considère ce qui précède un peu compliqué et avec trop "d'histoire". Le design de 1984 (bien que très modifié et adapté) ne correspond pas au début de 21 c. selon les promoteurs.

    Il est supposé offrir une plus grande flexibilité et de meilleures performances même si certaines fonctionnalités importantes comme le support OpenGL complet (et important pour certains – support réseau) manquent encore.


    Un peu plus sur les environnements de bureau et les gestionnaires de windows. Le gestionnaire de windows est une application responsable du comportement de la window – par exemple, il est responsable de la gestion des espaces de travail, de la barre de titre (la chose en haut de l'écran avec le titre windo et les buttons minimiser / agrandir / fermer) etc.

    Premièrement seulement WM minimal a été utilisé mais ensuite l'user a commencé à vouloir des environnements de bureau – c.-à-d. La version plus vedette, qui incluait le démarrage de menu, l'arrière-plan de bureau etc. Cependant la plupart des parties de l'environnement de bureau n'est pas un gestionnaire de windows bien qu'elles soient souvent embeddedes.

    Après un certain time, le WM composite a été introduit qui utilise OpenGL et le rendu indirect pour faire leur travail. Ils fournissent non seulement des effets charts, mais permettent également une implémentation plus aisée de certaines fonctionnalités d'accessibilité (comme la loupe).

    Tout d'abord, il n'y a pas vraiment de stack graphique Linux. Linux n'a pas de capacités d'affichage graphique.

    Cependant, les applications Linux peuvent utiliser des affichages charts et il existe un certain nombre de systèmes différents pour le faire. Les plus communs sont tous construits au-dessus des windows X.

    X est un protocole réseau car au milieu d'une stack de protocoles X, vous pouvez avoir un réseau en tant que composant standard. Regardons un cas d'utilisation spécifique. Un physicien de Berlin veut faire une expérience au CERN en Suisse sur l'un des collisionneurs de particules nukeyaires. Il se connecte à distance et exécute un programme d'parsing de données sur l'une des baies de supercalculateurs du CERN et affiche les résultats sur son écran.

    À Berlin, le physicien dispose d'un terminal X exécutant un logiciel server X qui fournit une capacité d'affichage graphique aux applications distantes. Le logiciel X-server a un framebuffer qui parle au pilote de périphérique spécifique pour le matériel spécifique. Et le logiciel du server X parle le protocole X. Ainsi, les couches peuvent être des périphériques charts-> pilote de périphérique-> frame buffer-> X server-> X protocol.

    Ensuite, en Suisse, l'application se connecte à un écran en utilisant le protocole X et envoie des commands d'affichage graphique comme «draw rectangle» ou «alpha blend». L'application utilise probablement une bibliothèque graphique de haut niveau et cette bibliothèque sera à son tour basée sur une bibliothèque de niveau inférieur. Par exemple, l'application peut être écrite en Python en utilisant le toolkit WxWidget qui est construit sur GTK qui utilise une bibliothèque appelée Cairo pour les commands de dessin graphique de base. Il peut également y avoir OPENGL également au sumt du Caire. Les couches peuvent être comme ceci: WxWidgets-> GTK-> Cairo-> X Toolkit-> X protocole. Il est clair que c'est le protocole au milieu qui connecte les choses, et puisque Linux prend également en charge les sockets UNIX, un transport entièrement interne des données, ces deux types de choses peuvent fonctionner sur une machine si vous le souhaitez.

    X fait reference au protocole et à tout élément fondamental de l'architecture, tel que le server X qui exécute l'affichage graphique, le périphérique de pointage et le keyboard.

    GTK et QT sont deux bibliothèques d'interface graphique à usage général qui prennent en charge les windows, les boîtes de dialog, les buttons, etc.

    GNOME et KDE sont deux environnements de bureau qui gèrent les windows sur le bureau graphique, fournissent des applets et des trucs utiles comme les barres de buttons. Ils permettent également à plusieurs applications de communiquer via le server X (terminal X) même si les applications s'exécutent sur différents ordinateurs distants. Par exemple, copyr et coller est une forme de communication interapplication. GNOME est construit sur GTK. KDE est construit sur le dessus de QT. Et il est possible d'exécuter des applications GNOME sur un bureau KDE ou des applications KDE sur un bureau GNOME, car ils fonctionnent tous avec le même protocole X sous-jacent.

    C'est son organisation, vous en apprendrez plus sur cette image qu'à partir de plusieurs pages de text:

    entrer la description de l'image ici

    Linux sur le bureau et certains servers est toujours tous les charts X et frame buffer. Sous la window X -Il y a GTK + et Qt, YES BOTH utilise le système X, là encore il y a beaucoup d'environnements de bureau – Gnome, KDE utilise X display et leurs shells, etc.

    Btw, Il y avait une video récente de Linux conf (http://blip.tv/file/4693305/). Keith Packard d'Intel a parlé de X et GL * C'était intéressant.