vendredi 25 mai 2018

Chapitre 30 : Utilisation du système graphique X11


Dans les chapitres 13 à 17, nous avons vu comment utiliser le framebuffer pour afficher des dessins sur l’écrans du raspberry. Mais continuer à utiliser cette solution est terriblement couteuse en temps de développement car il faut tout gérer (dessin, police, couleurs etc.)
Pour pouvoir aller plus loin, il va falloir utiliser des librairies graphiques qui vont faire une grand part de notre travail. Mais ici au lieu d’utiliser des libraires comme openvg ou QT  , nous allons nous plonger dans la librairie de X11 car X11 est le système graphique de base de tous les Unix et donc de Linux et donc de raspbian. Si vous avez déjà entendu parler de X11, vous pensez que ce système graphique est très lourd à mettre en place et à programmer car il permet de créer des fenêtres, des boutons, des menus des dessins et il possède des dizaines de fonctions !!. C’est ce que nous allons voir dans les chapitres suivants de ce blog.
Tout d’abord nous allons mettre en place les outils nécessaires au développement avec X11 sur le raspberry.
Donc chargement de la librairie nécessaire :  sudo apt-get install libx11-dev
Puis adaptation du script de compilation pour appeler la librairie et dont voici un exemple :

#compilation assembleur avec librairie X11
#echo $0,$1
echo "Compilation de "$1".s"
as -o $1".o"   $1".s" -a >listingX11.txt
gcc  -o $1 $1".o" ~/vincent/asm/routinesARM.o -e main -lX11 -L/usr/lpp/X11/lib
echo "Fin de compilation."

(remarque : routinesARM.o contient les objets de mes propres routines vues dans les chapitres précédents).
En lisant la documentation sur X11, j’apprends que ce système est à base de client-serveur et qu’il possible d’afficher les écrans sur n’importe quel autre ordinateur disposant d’un serveur X11. Cela me convient car je pourrais travailler de mon ordinateur sous windows, de compiler et lancer les programmes sur le raspberry avec une connexion ssh  par putty et de voir les résultats sur l’écran du PC. Pour cela, j’installe le serveur gratuit XMing disponible à l’adresse https://sourceforge.net/projects/xming/
L’installation se passe sans problème. Si le serveur ne se lance pas, il faut l’activer en lançant le programme Xlaunch.exe se trouvant dans le répertoire d’installation sur votre PC (chosir les options fenêtes multiples puis laisser toutes les autres par défaut).
Maintenant il faut créer une connexion ssh par putty spéciale en configurant l’option enable X11 forwarding se trouvant dans le menu connexion sous-menu SSH :


Bien entendu, il faut renseigner l’adresse IP de votre raspberry et le port et sauvegarder la configuration sous un nom adéquat ( par exemple raspX11). Maintenant il ne vous reste plus qu’à ouvrir une session ssh avec cette configuration de saisir l’identifiant de connexion et le mot de passe.
Pour vérifier si cela fonctionne, vous lancer l’application graphique fournie en standard sur le raspberry : leafpad et normalement vous devez voir apparaitre sur votre ordinateur Window un petit éditeur de texte. Super non ?
Si vous aller dans le menu ouvrir, vous voyez que l’arborescence qui s’affiche est bien celle de votre raspberry et pas celle de votre ordinateur windows, preuve que l’application leafpad s’exécute sur le raspberry et que c’est seulement l’affichage (et le clavier et la souris) qui est géré par le serveur XMing sur votre PC.
Il faut aussi rechercher la documentation sur Internet concernant X11 (et il en a beaucoup !!). Un excellent document en anglais écrit pour le langage C par Ross Maloney nous servira de trame pour partir à la découverte des nombreuses fonctions des libraires X11. A télécharger sur le site : http://yenolam.com/writings/xlibbook-0.5.pdf
Et une référence sur les fonctions X11 : https://www.x.org/docs/X11/xlib.pdf
https://fr.wikipedia.org/wiki/X_Window_System
Toutes les fonctions sont aussi décrites sur le site en anglais de Christophe Tronche : https://tronche.com/gui/x/xlib/
Et pour tester tout cela voici un premier petit programme qui va faire appel à la fonction XOpenDisplay pour établir une connexion avec le serveur d’affichage. Si la connexion est ok, nous récupérons un pointeur vers une structure appelée Display (Affichage) et qui contient les informations sur la connexion (plus loin dans le programme, nous afficherons le contenu de cette structure pour voir ce qu’elle contient). Ensuite nous nous contentons d’appel la fonction XBell en lui passant dans le registre r0 le pointeur du Display et dans r1 la valeur 100 (volume maximum). Cette fonction fait biper le haut-parleur de votre PC grâce au serveur XMing.  Puis nous fermons le Display par la fonction XCloseDisplay pour libérer les ressources utilisées et nous terminons le programme.
Vous remarquerez que les noms de fonctions commencent tous par X et que nous passons le pointeur du Display dans le registre r0 et tous les programmes commenceront par cet appel de connexion. Ce premier programme doit fonctionner sans problème !! Ah oui, n’oubliez pas d’activer votre haut-parleur sur votre PC pour entendre le son.

Aucun commentaire:

Enregistrer un commentaire