GUI = graphical user interface = moyens pour concevoir
un environnement informatique "convivial" pour l'utilisateur composés
de :
- un générateur d'image --> assuré par le serveur
X
- un système de fenêtrage X-Window
- une interface de programmation --> bas niveau XLib, haut niveau:
Motif, Open Look, ...
- des utilitaires de services (desktop, window manager, ...)
architecture client-serveur de X-Window:
serveur X = serveur de ressources : écran, clavier,
souris, ..., le serveur est donc près du terminal !
client = programme utilisant Xlib, librairie de requêtes et interface
du protocole X.
communication = protole X : requête émise par le client à
destination du serveur, événement émis par le serveur
à destination d'un client, communication asynchrone par message sur
divers réseaux de communication.
window manager = gestionnaire de fenêtre = client particulier
lancement du serveur : startx qui lance (xinit) un serveur X et un premier
client .xinitrc, et d'éventuels autres : xterm, xclock, le window
manager fvwm, ...
window manager :
- aide l'utilisateur du terminal sous X pour déplacer ses fenêtres,
modifier leur taille, iconiser, définir l'application qui recevra
la frappe au clavier, ...
- modifie les requêtes du client en les redirigeant au wm, exemple
XCreateWindow en (0,0) alors qu'il y a déjà une fenêtre
xterm.
Fenêtres :
Elles sont hiérarchisées en structure d'arbre : parent et
fille. Racine de l'arbre : la fenêtre racine, root window qui occupe
tout l'écran, elle constitue le bureau. Une fenêtre fille ne
peut être visible qu'à l'intérieure de sa fenêtre
parente. Les fenêtres soeurs peuvent se recouvrir comme dans une pile
(modifiable). Les fenêtres possédent des attributs graphiques
: taille, position, ..., mais aussi de comportements relativement aux événements
dont elles sont le siège : souris, clavier, ... Les fenêtres
sont des ressources "pas chères", n'hésitez pas
à en créer !
Pixel, Pixmap, Bitmap :
Un point de l'écran recoit un pixel d'information caractérisant
sa couleur et codé sur un entier de n bits. n=1 pour noir et blanc.
Le nombre de couleur possible est 2 puissance n. Le codage des couleurs
peut être direct ou indirecte. Un pixmap de profondeur n est une matrice
de pixel, et est constitué de n plans de bits. Un bitmap est un pixmap
de profondeur n=1.
Requête :
- à sens unique : ordre du client à transmettre au serveur,
exemple XDrawString. Ces messages sont stockés dans un tampon du
client, puis propagés par lots, enfin exécutés dans
l'ordre per le serveur. Mécanisme asynchrone, avec vidage du tampon
possible : XNextEvent, XFlush, XSync, XSynchronise.
- à sémaphore : question du client au serveur, exemple XQueryPointer
position actuelle de la souris. Les requêtes tamponées sont
transmises, puis la requête à sémaphore, le client est
alors suspendu jusqu'à la réception du message de "réponse"
du serveur. Mécanisme couteux en temps.
Evénement :
- alerte-événement : le serveur informe le client d'un événement
du matériel (souris, clavier) ou de la conséquence d'une requête
(le déplacement d'une fenêtre en rend visible une autre). Elles
peuvent être traitées ou ignorées par le client receveur,
selon l'ordre d'émission ou selon d'autres priorités;
- anomalies-erreurs : le serveur informe le client d'une erreur détectée,
exemple dessin dans une fenêtre inexistante. Du fait de la communication
asynchrone, l'événement-erreur arrive bien après la
requête l'ayant provoquée.
index général | fonctions de la XLib | événements | types dans XLib |