Next: , Previous: Recherche d'aide!, Up: Top


Appendix A Foire Aux Questions

Dernière mise à jour: 31 mars 2006

A.1 Compiler adesklets

Le script de configuration d'adesklets dit que mon installation de Python est trop ancienne, pourtant elle ne l'est pas. Quel est le problème?

Certaines plate-formes (NetBSD, Ubuntu Linux, et probablement d'autres encore) altèrent parfois la version de Python, en y ajoutant des lettres, des numéros de version mineures, etc., ce qui empêche le script de configuration de la détecter correctement. Si vous êtes sûr que la version installée est supérieure à la 2.3.0, vous pouvez utiliser l'option --with-python-force-detection de configure, ainsi le script de configuration passera la détection de version.

A.2 Installer des desklets

Je trouve que la méthode d'installation par défaut des desklets est pénible: n'y a-t-il pas un moyen plus simple de les installer?

Depuis adesklets 0.5.0, vous disposez d'un nouveau script adesklets_installer (See Utiliser adesklets.). Il peut vous aider à télecharger ou décompresser de nouveaux desklets, ou des mises à jour.

Eh bien, c'est un peu mieux, mais ce n'est toujours pas complètement automatisé (je déteste lire et comprendre de nouveaux trucs, vous savez...)

C'est vrai. adesklets_installer ne fait que vous mettre au courant des mises à jour, il télecharge, vérifie et décompresse les desklets, mais il est toujours de votre devoir de lire leur README, de satisfaire leurs dépendances, de les démarrer, les arrêter et les configurer.

Mais franchement est-ce si difficile? La plupart des gens ne changent pas la configuration de leurs desklets de toute façon. Ceci était un choix délibéré de notre part: le but d'adesklets à toujours été de limiter la compléxité globale du code, ce qui mène à un paquetage plus fin, léger et plus consistant. Pourquoi résoudre dans un logiciel long, pénible, difficile à écrire et à maintenir tous les problèmes pointus qu'un utilisateur avisé peut résoudre en quelques minutes avec une documentation correcte?

Si l'automatisation complète était ce pour quoi vous nous suppliez, jetez un oeil aux alternatives à adesklets (See A propos d'adesklets.).

A.3 Démarrer et arrêter des desklets

Quand j'essaie de lancer un nouveau desklet, j'obtiens l'erreur ImportError: no module named adesklets de l'interpréteur Python. Qu'est-ce qui se passe?

C'est écrit dessus: python n'arrive pas à trouver le paqetage adesklets; peut-être qu'il n'a pas été installé, ou qu'il a été installé au mauvais endroit.

Quand j'essaie de démarrer un nouveau desklet, j'obtiens l'erreur ADESKLETSError: adesklets process exited de l'interpréteur Python. Qu'est-ce que c'est?

C'est une erreur génerique vous informant qu'il manque quelquechose à l'interpréteur de bas niveau qui est suffisamment critique pour provoquer une sortie. Si vous êtes chanceux vous trouverez à la fin de la ligne un tiret suivi d'un message décrivant ce qui ne fonctionne pas. Dans ce cas, et si vous avez du mal à le comprendre, allez chercher de l'aide en ligne. Si aucune information ne vous est donnée concernant l'origine de l'erreur, essayez ceci depuis un pseudo-terminal sous X:

     echo x_status | adesklets :

Vous devriez normalement obtenir quelquechose ressemblant à:

     event: ready!
     command 0 ok: x_status 1 (connected to ':0.0')

Si c'est la cas, c'est probablement que vous utilisez un système (archlinux par exemple) sur lequel la variable PATH de l'interpréteur Python diffère de celle héritée de l'environnement standard, ce qui fait que le paquetage Python n'arrive pas à lancer adesklets en tant que processus fils. Sur ce genre de systèmes, assurez-vous que vous installez adesklets avec l'option --prefix appropriée lors de la configuration. Par exemple, sur la plupart des plate-formes Linux récentes, vous devriez utiliser:

     ./configure --prefix=/usr

Je ne peux lancer aucun desklet écrit en Python: j'obtiens des erreurs du récupérateur automatique de mémoire (garbage collector)!

Si vous obtenez des erreurs du type:

     python: Modules/gcmodule.c:275: visit_decref: Assertion `gc->gc.gc_refs != 0' failed.
     Aborted

Cela signifie que le récuperateur automatique de mémoire de votre installation de Python est corrompu; c'est souvent du à une compilation utilisant des options d'optimisation incorrectes ou agressives. D'habitude recompiler un environnement Python solide provenant de http://python.org/ résoud ce problème.

Les desklets se lancent bien en tant que root ou autre utilisateur local, mais gèlent ou se terminent avec un compte monté via NFS

Pour pouvoir fonctionner correctement, adesklets à besoin de pouvoir vérouiller quelques fichiers dans le répertoire $HOME: la plupart des problèmes avec les systèmes de fichiers en réseau sont dus à des installations fonctionnant à moitié qui n'arrivent pas à fournir ce genre de verouillage. Dans l'archive tar des sources d'adesklets vous trouverez un court script, test/flock.py, qui effectue un simple test des verrous fcntl; normalement il récupère un verrou dans le répertoire de travail courant, attend que l'utilisateur presse une touche, alors il relache le verrou et sort. Vous pouvez lancer plusieurs instances du script depuis le même répertoire pour vérifier que le verouillage fonctionne effectivement. Si ce n'est pas le cas, alors le faire fonctionner reviendra surement à faire fonctionner adesklets.

Tout fonctionnait bien mais j'ai essayé de mettre à jour un desklet, et je n'arrive pas à voir le nouveau. Où est l'erreur?

Il y a un mécanisme interne de blocage dans l'interpréteur qui empêche un utilisateur de lancer simultanément plus d'un desklet avec le même ID et le même nom, quelle que soit la version. Lorsque vous mettez à jour un desklet donné, vous devriez d'abord quitter proprement le desklet (en utilisant la commande Quit du menu contextuel), puis installer le desklet mis à jour en suivant les instructions fournies par le fichier README.

Argh! Le desklet X marche, mais ne se souvient pas de ses paramètres, ou bien il démarre toujours dans le coin en haut à gauche de l'écran 0 dans une nouvelle session X. Qu'est-ce que c'est? C'est lourd!

C'est très probablement lié à la manière dont vous avez démarré le desklet (cf see Utiliser adesklets.). Vous devez invoquer le script du desklet une seule fois. Pour toute utilisation future vous n'aurez qu'a éxectuer la commande:

     adesklets

qui se souviendra où vous aviez placé les desklets et quels desklets étaient lancés. N'oubliez pas d'activer les options correctes lors de l'appel à adesklets.

C'est exactement ce que j'ai fait, mais ce truc ne veut toujours pas redémarrer.

N'auriez-vous pas placé les desklets dans un répertoire du type $HOME/.adesklets? Veillez ne pas le faire. adesklets utilise le fichier $HOME/.adesklets pour enregistrer toutes sortes de paramètres des desklets lancés; créer un répertoire portant ce nom l'empêchera de faire son travail correctement, vous n'avez donc qu'a déplacer votre répertoire ailleurs ($HOME/.desklets, par exemple).

Les desklets se lancent correctement, mais ils continuent de marcher quand je termine la session X.

Normalement, les desklets sont censés s'arrêter automatiquement à la fin de la session. Si vous disposez de l'interface basée sur le shell (ce qui est le cas par défaut), vous pouvez aussi les fermer manuellement en invoquant la commande

     adesklets --killall

lors de la sortie de session.

A.4 Afficher les desklets

Où sont mes desklets? L'interpréteur d'adesklets semble être lancé correctement, mais je ne vois tout simplement rien sur mon bureau (le soi-disant problème de clignotement)!

Essayez la commande:

     python test/test.py

depuis le répertoire de base des sources. Si une fenêtre de 100x100 pixels apparaît, cela signifie très probablement que vous utilisez un gestionnaire de fenêtres qui dessine une grosse fenêtre (dite fausse fenêtre racine, “fake root window”) par dessus la fenêtre racine; vos desklets sont dessinés en-dessous. Parmi ces gestionnaires de fenêtres on trouve Nautilus, KDE, Xfce4, CDE, e16 version 0.16.8 et plus, ou e17. Pour adesklets 0.6.1, les gestionnaires de fenêtres supportés dans cette catégorie sont:

Depuis adesklets 0.4.11, la méthode de détection des fausses fenêtres racine a changé: par défaut cela ne fait plus partie du code C2. L'interpréteur s'attend maintenant à ce que la variable d'environnement ADESKLETS_ROOT contienne le bon ID hexadécimal de la fausse fenêtre racine, si'l y en a. Vous pouvez bien sur la définir manuellement, mais l'interface basée sur le shell prendra en charge pour vous les gestionnaires de fenêtres les plus courants (voir la liste précedente), pourvu que vous lui demandiez de le faire. Essayez d'invoquer:

     adesklets --help

Si l'interface est installée, vous devriez voir de nombreuses options, notemment celles permettant d'activer une routine de détection de fausse fenêtre racine adaptée à un gestionnaire de fenêtres donné. Vous disposez aussi d'une détection “génerique” via l'option --user: elle peut fonctionner (ou pas) chez vous, selon la structure de votre gestionnaire de fenêtres. Enfin, veillez noter que l'interface est un simple script compatible sh, installé par défaut dans $prefix/share/adesklets – il devrait être très facile de le modifier pour tout personne désirant implémenter d'autres méthodes de détection.

Gardez aussi à l'esprit que la détection de fausse fenêtre racine requiert évidemment que celle-ci existe, il est donc important que vous invoquiez adesklets après l'initialisation du gestionnaire de fenêtre. Pour vous aider à le faire, vous avez à votre disposition l'option -w nomduprogramme dans l'interface du shell.

Et pour enlightenment?

adesklets fonctionnera comme prévu avec e16 tant que vous n'activez pas les fonctions induisant l'uilisation de fausses fenêtres racine (voir les questions précedentes – vous devrez utiliser l'option –e16 pour e16 version 0.16.8 et supérieure), ce qui cache dans certains cas les desklets derrière la structure du gestionnaire de fenêtres. D'après l'experience de l'auteur, avec les versions 0.16.7.2 et 0.16.8 il n'est possible de voir les desklets que dans le premier bureau virtuel. Ceci dit, dans le jargon d'enlightenment, les bureaux virtuels peuvent s'étaler sur plusieurs "écrans" (quatre, alignés horizontalement par défaut), ce qui permet parfaitement l'usage de plusieurs espaces de travail en laissant les desklets d'adesklets visibles.

e17 n'est pas supporté. Si vous y tenez vous pouvez trouver plus d'astuces à ce sujet sur la FAQ d'enlightenment . Ceci dit, e17 est fourni avec ce qu'on appelle les “modules e17” (engage, etc.), qui fonctionnnent parfaitement avec ce WM et qui remplissent les mêmes fonctions.

Maintenant je vois les desklets, mais la transparence foire!

Une pseudo-transparence correcte se base sur la possibilité de récupérer l'image de fond d'écran et d'être averti quand elle change. Il n'y a aucune méthode complètement fiable ni même bien établie pour le faire sur autre chose que la vraie fenêtre racine du protocole X11 (veuillez lire cette partie de la FAQ, “Afficher les desklets”, depuis le début pour bien comprendre ce qui suit).

Ainsi, même en présence d'une fausse fenêtre racine, adesklets récupère toujours l'arrière-plan de la vraie fenêtre racine: certains gestionnaires de fenêtres se soucient de la synchronisation permanente entre la vraie et la fausse fenêtre racine, mais pas assez. adesklets fait de son mieux, quand c'est possible de manière portable, pour synchroniser lors de son initialisation les arrières-plans mais dans certains cas supportés (ROX-Filer, xffm-desktop), ce n'est même pas possible. Par conséquent, si vous obtenez des arrières plans corrompus (pas d'arrière-plan, un arrière-plan incorrect ou ne reflétant pas le dernier changement effectué, alors que vous voyez effectivement le nouveau papier peint dans une fausse fenêtre racine), vous n'avez qu'à dupliquer le papier peint utilisé sur la vraie fenêtre racine, de préference en utilisant un afficheur de papier peint supportant la mécanisme ad-hoc, largement supporté, d' enlightenment pour la notification de changement de papier peint – n'importe lequel des programmes suivants devrait fonctionner correctment: Esetroot, wmsetbg, feh, hsetroot, chbg ou xsri. En fait vous pouvez utiliser n'importe quel afficheur de papier peint pour changer la vraie racine, mais ensuite vous aurez peut-être à rappeler le lanceur d'adesklets pour profiter d'une récupération initiale du papier peint correcte si aucune notification n'a été envoyée.

Je ne peut pas voir les petits desklets comme xmms_bar ou asimpleclock, alors que les autres fonctionnent. Pourquoi?

Les nouveaux desklets sont toujours lancés dans le coin le plus en haut à gauche de l'écran, tout en bas de la pile de fenêtres. Vérifiez qu'il n'y a rien (barre de gnome, engage, etc) qui puisse masquer cette zone de l'écran. Attention! Certaines applications sont pseudo-transparentes, et peuvent masquer la fenêtre racine sans en avoir l'air.

J'utilise Fvwm comme gestionnaire de fenêtres. Pourquoi est-ce que je n'arrive pas à maintenir les desklets sous toutes les autres fenêtres? Ils n'arrêtent pas de se mettre au premier plan!

Allez voir la faq de Fvwm: http://www.fvwm.org/documentation/faq/#5.11. D'après de nombreux utilisateurs de Fvwm, cette option, BugOpts RaiseOverUnmanaged on fonctionne bien.

J'en ai tellement marre d'avoir le menu contextuel des desklets quand tout ce que je veux c'est celui du gestionnaire de fenêtres! Puis-je faire quelque chose contre cela?

Utilisez l'option --enable-control-on-context-menu lors de la configuration. Ainsi, un clic normal du bouton gauche sur un desklet devrait faire apparaitre le menu de votre gestionnaire de fenêtres dans la plupart des cas (testé sur Xfce4 et tous les *box). Dans tous les cas, vous devrez appuyer sur la touche control en même temps pour obtenir le menu contextuel du desklet.

A.5 Utiliser les desklets

Le bouton 'Configure' dans le menu contextuel des desklets ne marche pas!

Pour que cela marche–tout du moins pour tous les desklets de démonstration–il faut que xterm soit installé, et que la variable EDITOR soit correctement définie dans votre environnement, comme le veut l'usage sous UNIX. Veillez remarquer que cela ne fait que lancer un éditeur de texte dans un terminal. Editer le fichier de configuration du desklet (habituellement config.txt dans le répertoire de base du desklet) aura le même effet.

L'élément 'Configure' du menu contextuel peut-il appeler un éditeur n'utilisant pas la console?

Oui, pourquoi pas? Depuis adesklets 0.4.13, l'interface du shell permet de le faire facilement: utilisez l'option adesklets -e (editeur).

Avez-vous prévu d'inclure le support d'SVG? J'aimerais utiliser une image SVG dans un de mes desklets.

Désolé, ce n'est pas prévu. Ce n'est pas qu'SVG est un mauvais format; il est même assez bon. Mais c'est également un format orienté vers le dessin vectoriel (et assez complexe), alors qu'Imlib2, sur laquelle adesklets se base entièrement, est complètement orientée dessin de trame. Or c'est l'utilisation d'Imlib2 qui rend adesklets simple, relativement rapide et peu consommateur de ressources.

Ceci dit, il n'y a aucune raison que vous n'utilisiez pas d'image SVG dans vos desklets, puisqu'il est assez simple de convertir des images SVG en PNG de haute qualité en utilisant des programmes comme sodipodi , inkscape ou xsvg . Dans un répertoire plein de SVG, sur un système GNU vous pouvez aussi utiliser une commande comme::

     ls *.svg | sed 's/\(.*\).svg/-z --file=& --export-png=\1.png --export-width=128 --export-height=128/' | xargs --max-lines=1 sodipodi

pour toutes les convertir en PNG semi-transparents de 128x128 pixels.

J'aimerais utiliser certaines polices de mon système avec adesklets, mais mes desklets n'arrivent pas à les trouver. Que dois-je faire?

D'abord, votre adesklets doit supporter fontconfig. Vérifiez-le en lisant le fichier config.log issu de la phase de configuration. Si vous n'avez pas gardé le log, vous pouvez aussi voir quelles bibliothèques dynamiques sont liées à l'interpréteur. Sur un système disposant des binutils GNU, vous pouvez faire quelquechose comme:

     ldd `which adesklets` | grep fontconfig

Si vous obtenez une réponse du genre:

      libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x45c750000)

cela signifie que tout va bien. Autrement, vous devrez recompiler adeskelts à partir des sources. Ensuite, vous pouvez utiliser la commande:

     echo 'list_font_path' | adesklets :

pour voir dans quels répertoires adesklets recherche les polices TrueType. Consultez la documentation de fontconfig si vous désirez les modifier (sur les systèmes à jour, man 5 fonts-conf est un bon point de départ). De même:

     echo 'list_fonts' | adesklets :

Vous listera les polices actuellement disponibles... Gardez à l'esprit lorsque vous les testerez que le nom des polices est sensible à la casse.

Enventuellement, si vous n'arrivez pas à faire fonctionner fontconfig, une manière de contourner le problème est de créer des liens symboliques vers les polices que vous voulez utiliser dans n'importe quel répertoire listé par la commande echo 'list_font_path' ... ci-dessus.


Footnotes

[1] Merci à Stefan Jungcurt pour l'astuce.

[2] Bien que vous pouvez revenir à l'ancienne méthode si vous le désirez en utilisant --enable-legacy-fake-root-window-detection lors de la configuration. See Installer adesklets.