Professional Documents
Culture Documents
Pierre-Alain Muller
IBM
TX
DEC
Serveurs
HP
WS
Pierre-Alain Muller
Grce la transparence rseau il est possible dexcuter les applications sur le CPU le plus
appropri (machine la moins charge, binaire pour ce CPU, base de donne centralise, protection
par machine, ...).
Il nest pas ncessaire de modifier les applications pour utiliser un cran connect un autre CPU.
Pour lutilisateur, tout se passe comme si le terminal X tait connect plusieurs ordinateurs
simultanment. De mme, une application X peut utiliser plusieurs crans en mme temps.
App 1
App 2
TX
App
TX 1
TX 2
TX 3
Pierre-Alain Muller
X fonctionne avec une large gamme de terminaux graphiques. En couleur, en niveaux de gris et
monochrome.
1.3. Les dispositifs d'entre
X offre un ensemble de mcanismes pour la distribution des informations en provenance des
utilisateurs vers les applications.
Les utilisateurs gnrent des informations dentre par lintermdiaire des touches du clavier ou des
boutons de la souris. Ces informations sont distribues par le systme X sous la forme
dvnements.
De nombreux types dvnements permettent de dterminer les changements appliqus aux fentres
et la hirarchie des fentres.
X supporte un grand nombre de claviers et de jeu de caractres.
1.3.1. La souris (tablette, boule, scanner, ...)
La souris est le dispositif dentre le plus populaire, il est utilis la fois pour dsigner et pour
slectionner. Lutilisateur pointe une position sur lcran en dplaant une petite image dnomme
sprite (mouse cursor), X utilise le terme de pointer . Les applications clientes peuvent
changer la forme du sprite volont (exemple : pour indiquer une activit longue => la montre ou le
sablier). Un point particulier (le hotspot ) dfinit la position prcise du sprite sur lcran. Le
sprite est dans une fentre lorsque le hotspot est dans cette fentre.
1.3.2. Le clavier
A chaque touche du clavier correspond un code didentification. Le client peut traduire ce code en
caractre ASCII sil le dsire. Le code est compltement indpendant des claviers ce qui rend les
applications indpendantes des constructeurs.
3
Pierre-Alain Muller
Root Window
D
A
C
H
E
G
Le serveur X cre les fentres suite aux requtes des clients. Le serveur encapsule toutes les
informations utiles sur les fentres. Les applications clientes ne connaissent les fentres que par
lintermdiaire dun identificateur. Les clients peuvent demander au serveur de modifier ou
dplacer les fentres, sans pour autant tre le propritaire de la fentre. Une application A peut donc
modifier une fentre cre par une application B. Cette fonctionnalit est utilise par les
gestionnaires de fentres par exemple.
1.4.1. La hirarchie des fentres
X organise les fentres en hirarchie ( window tree ). La fentre racine est dnomme la root
window . Le serveur X cr une fentre racine pour chaque cran plac sous son contrle. La root
window occupe lensemble de lcran, elle ne peut pas tre redimensionne ou dplace. Chaque
fentre (sauf la root window) a une fentre parente et peut avoir des fentres filles (sous-fentres).
X impose peu de restriction sur la taille et la position des fentres, mais seule les parties de sousfentres qui intersectent avec leur fentre parente sont visibles.
Pierre-Alain Muller
Parent
Child
Il est possible dempiler les fentres de mme rang ( siblings ). La fentre du dessus cache alors
les parties des fentres du dessous avec lesquelles elle intersecte. Lordre dempilement peut tre
altr entre fentres de mme rang. Du point de vue de lutilisateur, les descendants dune fentre
font surface en mme temps que la fentre parente.
Root Window
WA
WC
WB
WD
WE
WG
WF
WH
X
(0, 0)
(50, 100)
X
(0, 0)
Pierre-Alain Muller
Le rfrentiel de chaque fentre bouge avec la fentre, de sorte que les applications peuvent y
placer des sous-fentres indpendamment de la position de la fentre parente.
1.4.3. Rgles de visibilit des fentres
Les fentres ne sont pas ncessairement visible sur lcran ds leur cration. En effet, lallocation
des structures de donnes dans le serveur X, et linvocation des procdures dpendant du matriel
sont disjointes. Une fentre est rendue effectivement visible par lopration map . En fait, une
fentre - mme mappe - peut ne pas tre visible du fait des points suivants :
la fentre est entirement recouverte par une autre fentre
un anctre de la fentre nest pas mapp
la fentre nest pas dispose dans la zone visible dun anctre.
1.4.4. Conservation du contenu des fentres
Comme les fentres peuvent tre recouvertes en tout ou partie tout moment, il faut tre capable de
prserver leur contenu afin de pouvoir le restaurer lorsque la fentre sera de nouveau visible. De
nombreux systmes de fentres enregistrent le contenu de lcran sous la forme dune bitmap ou
raster . Cette approche demande une grande quantit de mmoire pour le serveur X ds lors que
le nombre de fentres augmente.
Dans X, ce sont les applications (les clients) et non le serveur X, qui sont responsables pour la
reconstitution du contenu des fentres. Chaque client doit donc tre prt, tout moment,
redessiner le contenu des fentres quil utilise. Toutefois, certains serveurs X offrent la possibilit
optionnelle denregistrer des rasters. Cette technique est connue sous lappellation de backing
store , mais ne peut tre considre comme toujours disponible, et les clients doivent donc toujours
tre capables de reconstruire le contenu des fentres.
1.5. Les vnements
Le serveur X communique avec ses clients par lintermdiaire de messages asynchrones appels
vnements. Les vnements sont gnrs directement, ou indirectement, suite aux manipulations
effectues par les utilisateurs (frappe dune touche du clavier, mouvement de la souris, click de
bouton, ...). Le serveur gnre galement des vnements pour informer les clients des changements
relatifs aux fentres. Par exemple lorsque le contenu dune fentre doit tre restaur, le serveur
gnre un vnement expose . X possde 33 types dvnements et offre un mcanisme qui
permet aux clients de dfinir de nouveaux vnements.
En plus des vnements lis aux fentres, X permet de traiter des vnements de type chiens de
garde par la procdure XtAddTimeOut (interval, proc, data) , et galement de sabonner
des arrives dinformation sur des descripteurs de fichiers au moyen de la procdure XtAddInput
(source, condition, proc, client_data).
Pierre-Alain Muller
Le serveur envoie les vnements dans une file associe chaque client. Chaque vnement
regroupe le type de lvnement, lidentification de la fentre concerne et ventuellement des
donnes spcifiques chaque type dvnements.
La plupart des applications X sont contrles par les vnements ( event-driven ) cest--dire
quelles sont conues pour attendre des vnements et les traiter squentiellement. Ce modle est
particulirement bien adapt pour les applications inter-actives, car il laisse le contrle lusager.
Une application peut galement envoyer un vnement ( une autre application par exemple) au
moyen de la procdure XSendEvent (display, window, propagate, mask, &event).
Liste des vnements de X :
ButtonPress, ButtonRelease, MotionNotify, MapNotify, EnterNotify, FocusIn,
LeaveNotify, FocusOut, Expose, GraphicsExpose, NoExpose, VisibilityNotify,
KeyPress, DestroyNotify, UnmapNotify, MapRequest, ReparentNotify, ResizeRequest,
ConfigureNotify, GravityNotify, CirculateNotify, CirculateRequest,
PropertyNotify, SelectionClear, KeymapNotify, SelectionNotify, ColormapNotify,
ClientMessage, MappingNotify, SelectionRequest, KeyRelease, ConfigureRequest,
CreateNotify
Pierre-Alain Muller
fonctionnalits trs complet pour accder et contrler les crans, les fentres et les dispositifs
dentre.
Nota : Xlib peut tre utilise en Ada par lintermdiaire de Bindings (bibliothque interface)
ou par la Ada Xlib de Gary Barnes.
La programmation dapplications graphiques partir de Xlib est difficile car le niveau dabstraction
de cette bibliothque est trs bas ( assembleur graphique ). Pour simplifier les dveloppements
des interfaces utilisateurs, des botes outils on t construites partir de la Xlib. Citons Interviews
(Stanford), Andrew (Carnegie Mellon), Xray (HP), CLUE (Texas Instruments) et dans notre cas X
Toolkit. X Toolkit se dcompose en deux couches : Xt Intrisincs et les Widgets. En fait, Xt sert de
base de nombreux jeux de widgets aux fonctionnalits identiques mais lapparence diffrente.
Motif dfinit un ensemble de widgets conus pour tre intgrs facilement avec Xt et Xlib de sorte
que les clients peuvent (et souvent doivent) utiliser simultanment les trois niveaux de logiciel.
Application
Widget Set
Xt Intrinsics
X Lib
Network Connection
X Server
Pierre-Alain Muller
Traite-vnements
Widget
Traite-vnements
Widget
Main Loop
Au lieu dcrire une grande boucle qui contient toute la logique du programme, le programmeur se
contente dassocier les traitements appropris chaque widgets. Cette approche simplifie lcriture
des programmes qui peuvent tre rdigs dans un style plus dclaratif (Si A faire B).
2.1. Fonctionnalits de base de Xt
2.1.1. Initialisation des Intrinsics
Etablissement de la connexion avec le (ou les) serveurs X, et allocation des ressources.
XtInitialize (name, class, options, noptions, &argc, argv)
Pierre-Alain Muller
GDF. La fentre X associe a un shell widget est fille de la root window. Les applications qui
possdent plusieurs fentres indpendantes doivent crer plusieurs TopLevelShells.
10
Pierre-Alain Muller
=>
untyped pointer
char *
Exemple :
Call Back
Widget
Callback List
XmNactivateCallback, XmNarmCallback,
XmNdisarmCallback
11
Pierre-Alain Muller
Chaque application possde une file dvnements remplie par le serveur X. XtNextEvent rcupre
un vnement, puis XtDispatchEvent part la recherche du traite vnement correspondant.
Il est possible dinsrer un traitement supplmentaire dans la boucle dvnements, lorsque
lapplication dsire prendre la main de temps en temps, par exemple pour effectuer des tches non
interactives. La fonction non bloquante XtPending() permet de savoir si la file dvnements est
vide.
While (TRUE)
{
if (XtPending ())
{
XtNextEvent (& event);
XtDispatchEvent (& event);
} else
.....
}
}
12
Pierre-Alain Muller
De faon gnrale, une table de translation contient une liste dexpressions qui possdent chacune
une partie gauche et une partie droite, spares par un double point. La partie de gauche spcifie
laction de lusager et la partie de droite la procdure excuter.
*translations:<Btn1Down>, <Btn1Up>:ArmAndActivate()
*translations:Ctlr<Btn1Down>:ArmAndActivate()
3. Le gestionnaire de ressources de X
Les ressources sont toutes les informations personnalisables par lusager. Par convention, les
applications X devraient permettre la personnalisation de la plupart des donnes utilises, tout en
offrant des valeurs par dfaut raisonnables. En fait, lutilisateur peut personnaliser les ressources
sil le dsire, mais il nest pas oblig de le faire. Notons que le programmeur doit faire un effort
pour rendre lapplication personnalisable, ce nest pas compltement automatique.
3.1. Spcification des ressources
X maintient une base de donnes qui contient la fois les prfrences des utilisateurs et les valeurs
par dfaut. Les applications peuvent retrouver la valeur dune ressource, durant leur excution, en
questionnant le gestionnaire de ressources. Le GDR se distingue des SGBD traditionnels, car il
contient des informations gnrales sur les ressources, du genre Tous les boutons sont rouges ou
Tous les champs de saisie de texte sont long de 80 caractres . Par contre les requtes sont
prcises : Couleur du bouton Quit de lapplication mail ? .
3.1.1. Noms et classes des ressources
Chaque ressource possde un nom et une classe. Par exemple : emacs et
Editor ,
destroyCallback et Callback . Les noms et les classes des ressources sont des chanes de
caractres, les valeurs les plus utilises sont dfinies dans le fichier StringDefs.h . Il est possible
dajouter de nouveaux noms et de nouvelles classes de ressources.
Par convention, le nom des ressources commence par une lettre minuscule, alors que le nom des
classes commence par une majuscule. Frquemment, les noms de ressource et de classe sont
identiques, sauf pour la premire lettre capitale. La nom de classe est fixe par le programmeur du
widget, le nom de ressource (en fait de widget) est dtermin par le programmeur de lapplication.
Une application rcupre la valeur dune ressource en spcifiant prcisment la ressource dsire,
sous la forme dun chemin daccs au travers de larbre de widgets (spars par des points).
13
Pierre-Alain Muller
draw
(Draw)
panel
(XmBulletinBoard)
commands
canvas
options
(XmRowColumn)
(XmDrawingArea)
(XmRowColumn)
*commands*Background: red
14
Pierre-Alain Muller
5_ Le RM compare les entres de la gauche vers la droite, et les premiers lments sont prioritaires
par rapport aux suivants.
draw*XmBulletinBoard*foreground: green
Conclusion : cest un peu difficile lorsque le nombre de ressources est lev ! Cela peut aussi
prendre du temps lors du dmarrage de lapplication.
3.1.3. Chargement des ressources
Les ressources sont charges lors du dmarrage de lapplication, dans lordre suivant :
1_
/usr/lib/X11/$LANGapp-defaults/<class>
2_
/usr/lib/X11/app-defaults/<class>
3_
$XAPPLRESLANGPATH<class>
4_
$XAPPLRESDIR<class>
5_
RESOURCE_MANAGER property
6_
$HOME/.Xdefaults
7_
$XENVIRONMENT
8_
$HOME/.Xdefaults-<hosts>
9_
// si 1 choue
// si 3 choue
// si 5 n'existe pas
// si 7 n'existe pas
15
Pierre-Alain Muller
4. Les couleurs
X propose un modle qui dissimule la diversit des matriels daffichage derrire une interface
commune. Cette approche permet de construire des applications versatiles, qui fonctionnent de
faon satisfaisantes sur des crans noirs et blancs, en niveaux de gris, ou couleur.
X est conu pour les environnements multitches, cest--dire des systmes qui demandent le
partage des crans entre plusieurs applications. Cette contrainte complique considrablement le
modle des couleurs, car un cran donn ne peut afficher quun nombre limit de couleurs
simultanment, et les diffrentes applications devront donc se partager les couleurs disponibles un
moment donn.
Une approche simple consiste limiter le nombre total de couleurs disponibles. Cest la solution
retenue sur des ordinateurs rudimentaires (choix entre 8 ou 16 couleurs prdfinies).
Cette solution nest pas satisfaisante pour construire un environnement graphique de qualit, cest
pourquoi X se distingue en proposant une technique qui permet chaque application dallouer
autant de couleurs que ncessaire, tout en encourageant le partage de couleurs entre applications.
4.1. Les tables de couleurs (colormaps)
X utilise des colormaps , cest--dire des tableaux qui contiennent des couleurs. Les applications
accdent aux couleurs par lintermdiaire dun index dans la colormap. La colormap introduit une
indirection entre lindex utlis par les applications et la couleur affiche sur lcran. Les crans
possdent une profondeur, exprime en nombre de bits par pixel (on parle galement de plans
dcran). Un cran monochrome possde une profondeur de 1 bit. Le nombre de couleurs quun
cran peut afficher simultanment est donne par la relation couleurs = 2 plans.
Diffrentes applications peuvent partager la mme table des couleurs. Par dfaut, les fentres
hritent de la table de leur parent et la plupart des applications peuvent utiliser la table de la root
window. Cette colormap est appele default colormap . Le serveur y alloue deux couleurs, le
blanc et le noir ; les autres couleurs y seront rajoutes par les applications qui le dsirent. Une
application qui ncessite un grand nombre de couleurs peut crer une nouvelle colormap, diffrente
de la colormap par dfaut. La fonction
XInstallColormap (display, map)
permet de positionner la colormap par dfaut, et donc den changer selon les besoins. Toutefois,
lorsque seulement une application a besoin dune colormap particulire, la fonction
XSetWindowColormap (display, window, cmap)
permet dassocier une colormap avec une fentre (et ses enfants par hritage).
5. Les images
16
Pierre-Alain Muller
En plus des images visibles lcran, X offre des trois catgories dimages non visibles : les
pixmaps , les bitmaps et les Ximages .
5.1. Les pixmaps
Une pixmap est une zone de mmoire similaire une rgion rectangulaire de lcran, mais sans
correspondance visible. Les pixmaps ont une profondeur exprime en bits. La fonction
XCreatePixmap (display, drawable, width, height, depth)
cr une pixmap associe avec le mme cran que le drawable spcifi. Les pixmaps servent
principalement pour sauvegarder le contenu de fentres. Les pixmaps peuvent galement tre
utilises pour construire des images de fond partir de petits motifs lmentaires (tiles de 16x16).
5.2. Les bitmaps
Les bitmaps sont des pixmaps avec une profondeur de 1. Elles peuvent tre cres par la fonction
XCreateBitmapFromData (display, drawable, data, width, height)
Les donnes tant des sries de bits qui reprsentent la valeur de chaque pixel. Lditeur bitmap,
livr avec X, permet de construire des fichiers bitmaps directement exploitable par la fonction
prcdente.
5.3. Les Ximages
X offre un mcanisme de transfert dimages entre applications et le serveur X, par lintermdiaire
dune structure de donnes Ximage. Cette structure sauvegarde les informations dans une
reprsentation canonique, indpendante des particularits de chaque machine. Lallocation dune
Ximage seffectue par la fonction
XCreateImage (display, visual,
bitmap_pad, bytes_per_line)
depth,
format,
offset,
data,
width,
height,
les images peuvent galement tre extraites dun drawable par la fonction
XGetImage (display, drawable, x, y, width, height, plane_mask, format)
17
Pierre-Alain Muller
18
Pierre-Alain Muller
Pierre-Alain Muller
alphabtiques. Les fontes doivent tre charges pour tre disponibles (une fonte consomme des
ressources). La fonction XLoadFont (display, font_name) charge la fonte et retourne un
identificateur de fonte. Chaque fonte est dcrite par une structure de donnes XFontStruct qui peut
tre rcupre par la fonction XQueryFont (display, font_ID). Cette structure contient :
lidentificateur de la fonte, la direction (gauche ou droite), lencombrement du plus petit caractre,
lencombrement du plus gros caractre, la hauteur par rapport la ligne de base, la profondeur par
rapport la ligne de base, et un tableau de XCharStruct qui dcrit chaque caractre en dtail.
Cette structure contient entre autres les informations suivantes :
short
short
short
short
short
lbearing;
rbearing;
width;
ascent;
descent;
g
Des fonctions de Xlib (comme XTextWidth ou XTextExtents) permettent dobtenir des
informations sur lencombrement global de chanes de caractres.
7.2. Lcriture du texte
X affiche le texte dans un drawable au moyen des fonctions suivantes :
XDrawString (display, drawable, gc, x, y, str, length) //foreground only
et
XDrawImageString (display, drawable, gc, x, y, str, length)
Pierre-Alain Muller
21
Pierre-Alain Muller
Motif fournit de nombreuses fonctions pour manipuler les chanes composites, comme :
XmStringCreate, XmStringLtoRCreate, XmStringFree, XmStringSeparatorCreate,
XmStringCompare, XmStringEmpty, XmStringConcat, XmStringLength
Pierre-Alain Muller
23
Pierre-Alain Muller
Conclusion
X est un bon exemple de systme de fentres, mais il devient de plus en plus complexe.
X est ouvert, extensible.
Par X on entend plutt Xlib, Xt Intrinsics, Motif, ...
La programmation reste difficile, il faut saider de constructeurs dinterfaces.
24