X11

 

X11

X Window System, X11 ou simplement X est un protocole de système de fenêtrage qui gère l'écran, la souris et également le clavier. Il est souvent appelé X Window.

 

C'est le système standard ouvert d'interaction graphique avec l'utilisateur sur les UNIX (Linux, BSD, etc.). Le serveur X est optionnel sur macOS (qui utilise nativement Quartz). Il est possible d'installer un serveur X sur la plupart des systèmes d'exploitation, dont Windows1. On dit communément d'une application qu'elle tourne sous X lorsqu'elle est conçue pour l'environnement X.

 

X est actuellement dirigé par la Fondation X.Org, avec son implémentation actuelle : X.Org.

 

Le System X prent en charge un ou plusieurs écrans contenant des fenêtres ou sous-fenêtres superposées.

 

X fonctionne suivant le modèle client/serveur :

 

  • le logiciel serveur X tourne sur un terminal intelligent (client léger) doté d'un écran, d'un clavier et d'une souris ; il reçoit et sert des requêtes d'affichage, d'entrées de texte et de déplacement de souris sur un port logiciel

 

  • un ou plusieurs logiciels client X, depuis des ordinateurs locaux ou distants (logiciel graphique) se connectent au serveur X et lui envoient leurs requêtes d'affichage en utilisant le protocole X au travers de la bibliothèque X (Xlib). Le client est simplement l'application logicielle (jeu, traitement de texte, calculatrice…) qui utilise alors le protocole X pour déléguer au serveur X les tâches d'IHM.

 

Le Serveur X peut fournir des services d’affichage pour n’importe quel nombre d’écrans : couleur, niveaux de gris ou monochrome.

 

Toutes les fenêtres d’un serveur X sont organisées en hierarchies strictes. En haut de chaque hiérarchie se trouve une fenêtre racine qui couvre chacun des écrans d’affichage. Chaque fenêtre racine est partiellement ou complètement couverte par des fenêtres enfants

 

Toutes les fenêtres, à l’exception des fenêtres racines, ont des parents.

 

Il y a habituellement au moins une fenêtre pour chaque programme d’application.

 

Un programme X comprend trois étapes essentielles :

 

La première consiste à contacter le serveur de la station avec laquelle il interagit, c'est le rôle du XOpenDisplay.

 

Puis il doit créer des fenêtres et positionner leurs paramètres, ce que font ici XCreateSimpleWindow et XMapWindow.

 

Finalement, il doit gérer les événements qui se produisent dans la fenêtre, ce que fait la boucle infinie qui termine la fonction main.

 

Les librairies nécessaires à la compilation :

 

  1. #include <X11/Xlib.h>
  2. #include <X11/Xutil.h>
  3. #include <X11/Xos.h>

 

Les variables globales utilisées par X11 :

 

  1. int largeur,hauteur,s;
  2. char* detenv();
  3. Display * ecrant;
  4. Window fenetre;
  5. GC gc;
  6. XFontStruct * fd;
  7. XEvent e;
  8. XGCValues gcv;

 

Contact du serveur X11 :

 

  1. if((ecrant = XOpenDisplay(getenv("DISPLAY"))) == NULL)
  2. {
  3. fprintf(stderr,"Le contact avec le serveur X11 a échoué !\n");
  4. exit(1);
  5. }

 

 

Exemple basique de creation d’une fenêtre :

 

  1. fenetre = XCreateSimpleWindow(ecrant,
  2. RootWindow(ecrant, DefaultScreen(ecrant)),
  3. 0,
  4. 0,
  5. largeur,
  6. hauteur,
  7. 2,
  8. BlackPixel(ecrant, DefaultScreen(ecrant)),
  9. WhitePixel(ecrant, DefaultScreen(ecrant))
  10. );
  11. XMapWindow(ecrant, w);

 

 

Compilation du code avec gcc :

 

  1. gcc exemple_fenetre_basique.c -o fenetre_basique -lX11

 

 

 

Propriétés de la fenêtre :

 

  1. XSetStandardProperties(ecrant,fenetre,"Ma superbe fenetre",":)",None,NULL,0,NULL);

 

Chargement d’une police de caracteres :

 

  1. if((fd=XLoadQueryFont(ecrant, "arial")) == NULL)
  2. {
  3. fprintf(stderr, "Erreure de chargement : police Arial\n");
  4. exit(1);
  5. }

 

Création d’un context graphique :

 

  1. font = fd->fid;
  2. foreground = BlackPixel(ecrant, DefaultScreen(ecrant));
  3. gc = XCreateGC(ecrant, fenetre, GCFont | GCForeground, &gcv);

 

Boucle permetant de gérer les evenements :

 

  1. for(;;)
  2. XNextEvent(d, &e);

 

“Nettoyage” à la fermeture de la fenetre :

 

  1. voidfermeture() {
  2. XFreeGC(dis, gc);
  3. XDestroyWindow(dis,win);
  4. XCloseDisplay(dis);
  5. exit(1);
  6. }

 

Liste d’évenements gérés par X11 :

 

  1. typedefunion _XEvent {
  2. int type;   /* must not be changed */
  3. XAnyEvent xany;
  4. XKeyEvent xkey;
  5. XButtonEvent xbutton;
  6. XMotionEvent xmotion;
  7. XCrossingEvent xcrossing;
  8. XFocusChangeEvent xfocus;
  9. XExposeEvent xexpose;
  10. XGraphicsExposeEvent xgraphicsexpose;
  11. XNoExposeEvent xnoexpose;
  12. XVisibilityEvent xvisibility;
  13. XCreateWindowEvent xcreatewindow;
  14. XDestroyWindowEvent xdestroywindow;
  15. XUnmapEvent xunmap;
  16. XMapEvent xmap;
  17. XMapRequestEvent xmaprequest;
  18. XReparentEvent xreparent;
  19. XConfigureEvent xconfigure;
  20. XGravityEvent xgravity;
  21. XResizeRequestEvent xresizerequest;
  22. XConfigureRequestEvent xconfigurerequest;
  23. XCirculateEvent xcirculate;
  24. XCirculateRequestEvent xcirculaterequest;
  25. XPropertyEvent xproperty;
  26. XSelectionClearEvent xselectionclear;
  27. XSelectionRequestEvent xselectionrequest;
  28. XSelectionEvent xselection;
  29. XColormapEvent xcolormap;
  30. XClientMessageEvent xclient;
  31. XMappingEvent xmapping;
  32. XErrorEvent xerror;
  33. XKeymapEvent xkeymap;
  34. longpad[24];
  35. } XEvent;

Pas de commentaire.

Ajouter un commentaire