Le royaume de Eric Buist >> Informatique >> Problèmes marquants >> Le bugX | ||
Me contacter | Plan du site | |
<< Ce qui m'empêche d'agir | Solutions actuelles |
Entrons maintenant dans le vif du sujet avec les principales solutions informatiques trouvées pour le bugX. Au tout début, il n'existait rien de prévu pour les changements localisés. Je recherchais plutôt une méthode générale afin de parvenir à un résultat durable, adaptable à de nouveaux logiciels si nécessaire.
Ma nouvelle installation de Linux m'a fait voir que Netscape affichait les polices dans une taille anormalement petite, plus petite que sous Windows en tout cas. Heureusement, une modification dans les préférences permet de retrouver une taille plus normale et solutionne partiellement le problème. Les caractères passent du quasi indéchiffrable au déchiffrable, mais la résolution complique malgré tout l'accessibilité.
Cette suite d'applications constitue un équivalent gratuit de la fameuse suite Microsoft Office. On y trouve un traitement de texte, un tableur, un logiciel de présentation et d'autres gadgets encore. Utiliser le traitement de texte peut être nécessaire pour faire un rapport avec un coéquipier ne connaissant pas LaTeX, que je privilégie bien entendu pour la qualité du document en sortie. Il m'a aussi été nécessaire, lors de mon stage, d'utiliser StarCalc afin de dresser un tableau des résultats de mes expérimentations.
Malheur! Toutes les polices de ce logiciel se trouvent un peu petites, mais il me semblait, jusqu'à la semaine du 20 août 2001, n'y avoir aucun moyen d'y remédier. Toutefois, la commande Options du menu Outils contient la solution! Dans la branche générale, feuille Affichage se trouve la clé.
J'ai découvert qu'une augmentation de l'échelle à plus de 100% provoquait un grossissement généralisé des polices du programme, ce qui était loin de me déplaire... J'ai aussi coché Grandes icônes et décoché Icônes plates.
Que ce soit GNOME ou KDE, il est toujours possible d'effectuer un changement de taille des polices du système. Ainsi, l'environnement, ie le bureau et l'explorateur de fichiers, subissent le changement. Malheureusement, KDE ne veut pas agrandir la police plus haut que 16, ce qui n'est pas tout à fait suffisant. Encore une fois, on a un palliatif plutôt qu'une solution définitive.
Il a suffi de mettre la police sur Huge et de sauvegarder les options pour solutionner complètement le problème de la console X, celle qui permet d'entrer des commandes au shell. Le shell constitue la clé de voûte dans ma tentative de contourner le bogue le plus longtemps possible, aussi longtemps qu'il le faudra pour parvenir à une solution définitive.
Malheureusement, lors de mon stage au RALI, je me suis rendu compte que Huge ne suffisait pas et que je ne pouvais monter à plus haut! L'application Konsole est ainsi incorrecte, il m'a fallu changer pour un terminal équivalent, XTerm.
Dans un mini-howto du nom de X-Big-Cursor, j'ai découvert une technique relativement simple permettant de multiplier par un facteur X entier la taille des pointeurs de souris. Ce qui m'apportera déjà une aide précieuse, diminuant l'énergie dépensée à localiser le petit pointeur et l'amener à l'endroit voulu. En fait, je ne diminue que les chances de le perdre de vue du point A vers le point B. Cette perte de vue m'oblige alors à ramener l'objet virtuel dans le coin supérieur gauche de l'écran et recommencer l'opération de positionnement.
Linux possède une modularité supérieure à celle de Windows. En effet, l'interface graphique, X Window System (X), est séparée du noyau système. C'est pour cela que Linux n'a pas baissé dans mon estime en raison du bugX! Seul X est en cause, et non pas le kernel ainsi que les puissants outils en ligne de commande. Pour afficher du texte, le serveur X utilise des polices au format PCF. Ces polices constituent un ensemble d'images décrivant les caractères à afficher ainsi que des masques indiquant au système quelles portions de l'arrière-plan modifier et quelles portions laisser intactes. Cela permet l'affichage d'un caractère, et non pas d'un rectangle plein contenant l'image de ce caractère. Grâce au mini-howto, j'ai appris que les curseurs constituaient eux aussi des polices de caractères.
Pour appliquer la modification, il m'a fallu télécharger le fichier police source au format BDF puis utiliser un utilitaire nommé bdfresize et capable de doubler la taille de ce fichier source. La sortie du programme est ensuite envoyée à un autre programme, bdftopcf, qui fait de ce fichier source un fichier PCF directement utilisable par le serveur X. Le fichier PCF résultant doit ensuite être placé dans un répertoire puis la commande mkfontdir doit être utilisée sur ce dernier.
Répertoire fonts contenant les curseurs en taille double.
Dans un quelconque script d'initialisation de X, il faut ensuite indiquer au serveur où aller chercher cette version modifiée de la police, c'est-à-dire ajouter le répertoire contenant le curseur agrandi dans la font path. La commande xset +fp <répertoire> effectue l'ajout avant tous les autres utilisés par X. Il faudra l'appeler dans un script de démarrage, car c'est à refaire à chaque fois, ainsi que pour xsetroot -cursor_name X_cursor. Cette dernière indique à X d'utiliser la nouvelle police et provoque la modification effective.
Malheureusement, on ne peut pas dire «It just works!» et en rester là! L'appel à xsetroot doit s'effectuer avant le chargement de toute application, car les modifications ne s'appliquent qu'aux curseurs nouvellement créés. Sur une machine dont je suis le maître, aucun problème. Toutefois, il en sera tout autrement lors de ma session...
Il faut que les deux commandes soient appelées avant le chargement de KDE! Lors de mon stage, j'ai fini par découvrir une façon d'y parvenir. Après avoir entré mon login et seulement après, je choisissais Failsafe comme type de login puis je tapais mon mot de passe. Failsafe était mémorisé pour la prochaine fois et dès que j'entrerais mon login, il reviendrait à cette option. Elle fait surgir un XTerm avec polices miniatures, mais duquel je pouvais appeler un script appliquant les modifications pour les curseurs puis startkde pour charger KDE.
Mais c'était très tannant, car cela créait une fenêtre inutilisable qui pouvait se rouvrir lors de commutations par la touche Alt-Tab et si je la fermais, ma session X y passait! Il fallait donc mieux. Au lieu de me logger en Failsafe, je me suis aperçu qu'il était plus judicieux de me logger en default. Dans ce mode de branchement, ce n'est pas startkde qui part mais plutôt ~/.Xclients. Ce script doit être accessible en lecture et en exécution pour tous les utilisateurs (chmod a+rx ~/.Xclients) afin que le démarrage se fasse bien. Ce script est nul autre qu'un shell script qui doit appeler, au bout du compte, un Window Manager, sinon cela va se bloquer. Dans mon cas, il initialise les curseurs puis appelle exec startkde, ce qui remplace le shell exécutant le script par KDE. Lorsque KDE sera fermé, X le sera aussi, c'est ce que l'on souhaite.
Si on comprend bien ce qui s'est passé avec les curseurs et si on a l'hypothèse que les polices utilisées par X sont au même format que celles des curseurs de souris, on en arrive à la conclusion qu'il est possible de multiplier par un facteur X entier plus grand que un TOUTES les polices du sytème! Bien entendu, comme avec les curseurs, la modification ne s'appliquera qu'aux clients nouvellement créés. Dans le but de vérifier cette hypothèse qui constitue une véritable lumière d'espoir, j'ai écrit un programme appelant en série bdfresize et bdftopcf. Toutefois, un problème est vite apparu: comment obtenir les versions BDF des polices PCF sur le système? Heureusement, avec fstobdf, cela devenait possible. Le programme a toutefois généré une énorme quantité de fichiers totalisant plus de 30MB! Avec la compression, j'ai pu diminuer ce poids lourd à une vingtaine de méga-octets, mais cela ne suffisait pas. Toutefois, cela fonctionnait aussi bien qu'avec les curseurs. Certaines polices n'ont pas pu être converties, mais celles utilisées par les applications testées l'avaient été.
Bien entendu, il a fallu mettre les fichier PCF dans un répertoire fonts personnel et appeler mkfontdir dessus pour créer le fameux fichier de données. Pour terminer, sur un réseau, cette méthode n'est pas adéquate, car une mise à jour des polices de Linux ne sera pas automatiquement répercutée dans le répertoire analogue agrandi. Finalement, tous ces fichiers grugeront sérieusement les 30MB à ma disposition sur le système, me confrontant à une lutte éperdue et constante pour l'espace disque, et cela pour la durée de mon baccalauréat! Je me suis rendu compte qu'il n'y a aucune restriction logiciel quant à l'espace disque (quotas), mais trop dépasser m'attirerait les foudres du support technique. De plus, X supporte d'autres formats de polices que les PCF qui ne seront pas pris en charge par la méthode. Il faut donc creuser un peu plus.
Outre des répertores locaux, X peut aussi utiliser un serveur comme réserve de polices d'affichage. On nomme ce serveur X Font Server (XFS) et il est chargé par des scripts de démarrage. Toutefois, rien ne nous empêche de démarrer une version personnelle de ce serveur sur un autre port, non?
Lorsque XFS reçoit une requête de police, il va fouiller dans une série de chemins d'accès prédéfinis et va retourner la police désirée, s'il la trouve naturellement. Mais si on isolait le code source de XFS du source de XFree, seule distribution open source de X, et qu'on lui appliquait une petite modification? Maintenant, le programme appliquerait, d'une façon ou d'une autre, le grossissement de facteur X avant d'envoyer la police à l'application. Implémenter un cache sera une nécessité pour éviter une sévère baisse de performance du système due à une conversion massive et répétée. Pour faire fonctionner le joujou, il me faudra compiler le source dans mon compte puis exécuter le programme sur un autre port, comme 1234 par exemple. Espérons qu'un firewall ne viendra pas empêcher le XFS de fonctionner! Puisque le programme serait compilé puis exécuté dans mon répertoire usager, aucune modification en root n'est nécessaire.
Malheureusement, le code source s'est avéré trop complexe pour que je parvienne à trouver où placer la modification sans rendre le programme inutilisable ou instable. Une analyse méticuleuse sera nécessaire et il me faudra beaucoup de courage pour l'entreprendre.
On a donc ici la formule chimique de l'antidote à ce terrible bugX, mais les moyens techniques pour synthétiser les molécules brillent par leur absence! Le pouvoir Open Source constitue la seule solution au problème, mais il est aussi extrêmement difficile à appliquer pour une personne comme moi qui ne détient pas un diplôme en informatique et les connaissances qui vont avec.
Pour le moment, le remède immédiat consiste à me procurer les logiciels sur lesquels on va travailler pour les cours. Cela m'a obligé à faire l'achat de LogicWorks, mais m'a rendu de grands services pour la remise à temps du devoir 2 en Architecture des Ordinateurs 1 (IFT1213). Pour le moment, mon ordinateur reste le meilleur environnement pour découvrir un nouveau logiciel. Cet apprentissage provoque parfois (souvent, même) de terribles frustrations qu'il vaudrait mieux ne pas faire entendre sur le campus! C'est pourquoi la solution du bugX, même l'ultime, ne changera pas cet état des choses.
Un palliatif important constitue à faire fonctionner XEmacs ainsi que XTerm. Ce qui me fournit un excellent éditeur de texte ainsi qu'un console dans laquelle Pine peut tourner. Pour parvenir à ce résultat, le fichier ~/.Xresources a été créé et modifié. Ce fichier contient des paramètres que les applications X peuvent utiliser. Voici les lignes salvatrices de ce fichier.
xterm*font: -bitstream-courier-medium-r-normal-*-24-200-75-*-*-*-iso8859-* xterm*background: black xterm*foreground: white xterm*geometry: 80x25 emacs*font: -bitstream-courier-medium-r-normal-*-24-200-75-*-*-*-iso8859-* emacs*geometry: 80x25 xemacs.geometry: 80x20 xemacs*font: -bitstream-courier-medium-r-normal-*-24-200-75-*-*-*-iso8859-* xemacs.background: white
La police utilisée a été trouvée de peine et de misère grâce à l'application xfontsel, écrite avec Xaw et fonctionnant avec la souris seulement. Fixer les dimensions des fenêtres d'application s'avérait nécessaire, car dans le cas contraire, j'obtenais des fenêtres beaucoup trop grandes qui dépassaient largement l'écran.
Finalement, grâce à Telnet, je peux utiliser tous les outils en mode texte du DIRO, y compris les potentiels logiciels commerciaux que je ne pourrais jamais avoir s'ils sont trop dispendieux. Mieux encore, depuis que j'ai installé Linux sur ma propre machine, je dispose d'un serveur X et si je me branche par SSH (ssh usager@serveur), je peux appeler une application X et voir une fenêtre sur ma machine!