Ma vie rêvée

Aller au contenu | Aller au menu | Aller à la recherche

Comment marche X11/xorg et toute la clique ? Généralités, protocole X11, rendu 2D

Plan général

  1. Les bases, le rendu 2D
  2. Le rendu 3D direct
  3. Le rendu 3D indirect
  4. Composite et XGL
  5. AIGLX
  6. Suite et fin (ou comment ne plus avoir d'idée pour le titre)

Il y a des moments où on a pas envie de faire des trucs constructifs (i.e. mes sujets pour l'exam de chimie par exemple). hier, Je me suis donc mis à tester inkscape. Et histoire de pas faire ça dans le vide et de me clarifier certains points, j'ai donc décidé de schématiser le fonctionnement de X11.

Préambule

Cet article est basé sur ce que je comprend du fonctionnement de X11. Il est loin d'être parfait et comporte peut-être des erreurs. si c'est le cas, j'apprécierais qu'on me les signale pour pouvoir améliorer le tout.

Le début de la fin

Pour ceux qui ne le sauraient pas, X11 est le protocole qui est implémenté par xorg, le truc qui s'occupe de faire un bel affichage graphique sous les différents *nix modernes (linux, et BSD surtout). Son fonctionnement est un peu compliqué et je vais donc vous le détailler dans un schéma réalisé avec inkscape (cliquer pour la version plus grande, le svg est dispos sur demande).

X11 en rendu 2D

Explication de texte

X11 fonctionne sur le modèle client/serveur, on a donc d'un côté le client X (la xlib ou plus récemment, xcb) qui parle aux applications et au serveur X et d'un autre côté, le serveur X qui parle au matériel et au client X.

Suivons un peu le cheminement de tout ça. Imaginons que je vienne d'ouvrir openoffice writer et que je veuille taper du texte. La fenêtre d'openoffice est affichée sur mon écran par ma carte graphique. Celle-ci a reçu les infos du serveur X qui s'est adressé à sa partie 2D par le biais du pilote DDX.
J'appuie sur une touche (A). Le serveur X reçoit l'information comme quoi j'ai tapé sur la touche A, il va alors transmettre cette information au client X, celui-ci va alors la faire parvenir à openoffice.
Openoffice réagit et commande alors l'affichage de la lettre A sur la partie qu'elle destine à l'écriture. Elle envoie alors cette information au client X qui la transmet au serveur X. Le serveur X reçoit la commande et la converti en une commande compréhensible par la carte graphique grâce à son pilote.
La carte graphique trace la lettre et l'affiche sur l'écran.

C'est vrai que dit comme ça, ça peut sembler un peu usine à gaz. Mais il y a quand même un énorme avantage dans cette organisation ; le client et le serveur n'ont absolument pas besoin d'être sur la même machine ! En conséquence, il devient très simple d'avoir une machine puissante qui ne comporte que le client X (le serveur d'application) et une ou plusieurs machine peu puissante qui ne possède que le serveur X (le client d'application) et utilisent les applications sur le serveur d'applications. On fait ainsi simplement de l'affichage déporté.

Ce qui manque dans l'explication de texte

Bien sur, ce que j'ai écris au dessus n'est qu'un aperçu du fonctionnement du protocole X11, j'ai passé sous silence les toolkits graphiques qui sont des bibliothèques d'objets qui évitent à chaque application de réinventer la roue pour faire du graphique, j'ai également omis de parler des polices et du rendu côté serveur de celles-ci ainsi que de plein d'autres trucs (les window manager par ex).
Si je suis pas trop feignasse, je devrais d'ici peu palier un peu ces manques en vous parlant du rendu direct, du rendu indirect, de XGL et si j'arrive à comprendre correctement de AIGLX et de Glucose. Avec bien sur quelques schémas à la clé ; parce que inkscape, c'est bien :D

Un peu de biblio