2019-11-01
Dans le cadre du développement de jeux GameBoy (et des articles qui vont avec), je travaille en ce moment à faire fonctionner les banks mémoires avec la chaîne d'outils SDCC + GBDK-n, et pour cela j'ai besoin d'un éditeur hexadécimal permettant de m'afficher un diff sur des fichiers binaires afin de les comparer et de repérer ce qui cloche dans les ROMs générées. J'utilise pour cela wxHexEditor qui est le seul éditeur hexadécimal graphique que j'ai trouvé me permettant de faire un diff (bon ok, comme je suis une faignasse je ne suis pas allé chercher plus loin que les dépôts Ubuntu hein... 😜️).
Quoi qu'il en soit, tout allait bien quand j'ai commencé à bosser sur ce sujet il y a quelques semaines (sous Ubuntu 19.04), mais quand j'ai repris mes travaux hier (après avoir mis à jour vers Ubuntu 19.10), j'ai eu la désagréable surprise de constater que wxHexEditor était tout cassé : il souffrait de problèmes de rafraîchissement. Pour expliquer les symptômes rapidement, lorsque je scroll la vue hexadécimale, rien ne bouge à l'écran, il faut que je redimensionne la fenêtre pour que l'affichage s'actualise... c'est vraiment pas très pratique ! 😩️
Mais j'ai heureusement trouvé une solution pour contourner le problème (bah oui, sinon je n'aurais pas pris la peine d'en faire un article ! 😛️). Le problème semble se situer quelque part entre wxWidgets (le toolkit graphique utilisé par l'application), et Wayland (le serveur d'affichage qui remplace petit à petit Xorg sur nos distributions Linux). Je n'ai pas trop eu le temps de creuser plus que ça, mais voici la solution : il faut indiquer à GDK (la bibliothèque de dessin utilisée par wxWidgets) d'utiliser son backend X11 au lieu de Wayland (du coup l'application va utiliser XWayland pour fonctionner dans une session Wayland, comme toutes les veilles applications qui ne sont pas nativement compatibles avec Wayland).
Pour indiquer à GDK quel backend il doit utiliser, il faut passer par la variable d'environnement GDK_BACKEND, qu'il faudra définir à "x11" lors du lancement de notre application. On peut donc utiliser la commande suivante pour lancer wxHexEditor :
GDK_BACKEND=x11 wxHexEditor
Bon c'est déjà bien, maintenant on a un éditeur hexadécimal qui fonctionne normalement. Mais moi j'aimerais bien ne pas avoir à taper une commande à chaque fois, et donc pouvoir le lancer depuis GNOME Shell, comme avant quoi... Et pour faire ça, c'est très simple : il suffit de modifier le fichier .desktop de wxHexEditor et le tour sera joué !
--------------------------------------------------------------------------------
📝️ Note:
--------------------------------------------------------------------------------
NOTE : les fichiers .desktop décrivent les applications et sont utilisés par les environnements graphiques pour lister et lancer les applications).
--------------------------------------------------------------------------------
On va donc éditer (avec des droits root) le fichier "/usr/share/applications/wxHexEditor.desktop". Normalement son contenu devrait être le suivant :
[Desktop Entry] Version=1.0 Encoding=UTF-8 Name=wxHexEditor GenericName=wxHexEditor Comment=A hex editor for huge files and devices Exec=wxHexEditor Icon=wxHexEditor Terminal=false Type=Application Categories=Utility;TextEditor;Utility; Keywords[en_GB]=disk;drive;volume;harddisk;hdd;disc;cdrom;dvd;partition;iso;image;backup;restore;editor;
La ligne que l'on va devoir modifier est celle qui définit la commande à lancer (Exec) :
Exec=wxHexEditor
que l'on va remplacer par :
Exec=sh -c "GDK_BACKEND=x11 wxHexEditor"
On sauvegarde le fichier et voilà, tout est rentré dans l'ordre ! 😁️
--------------------------------------------------------------------------------