J'ai créé un lien dans Nautilus dans le répertoire ~/bin
pour un script bash qui s'y trouve. Ensuite, j'ai coupé et collé le lien dans le répertoire ~/Desktop
.
Quand je clique dessus, rien n'apparaît à l'écran. Si je fais un clic droit sur le lien et sélectionnez Run
rien ne s'affiche non plus. Mais je sais que cela fonctionne parce que conky
indique que plusieurs processeurs ont une charge élevée. Le pourcentage de CPU normal devrait être compris entre 5% et 8%, mais il oscille autour de 79%. Chaque instance du lien utilise environ 5% de la CPU plus systemd
prend 5% de la CPU pour la journalisation. La température est normalement <50 ° C mais dans ce cas, elle oscille autour de 75 ° C.
J'ai fouillé à travers journalctl
et trouvé le problème incriminant/en boucle:
$ journalctl -b-1 | grep 'TERM environment variable not set.' | wc
35763 357630 3325959
J'ai vérifié le lien et ça a l'air correct:
lrwxrwxrwx 1 rick rick 30 Mar 26 10:14 Link to grub-display.sh -> /home/rick/bin/grub-display.sh*
Remarque il s’agit d’un tout nouveau script que je viens de publier aujourd’hui: Comment afficher le menu grub et les options sans démarrer? . Dans le script, la commande clear
est utilisée et est liée à TERM
messages d'erreur dans un autre thread ici et ici: Comment puis-je réparer la "variable d'environnement TERM not set "warning in Eclipse
Certaines des solutions au message d'erreur journalctl
ci-dessus nécessitent un examen approfondi:
$ env | grep TERM
TERM=xterm-256color
Je me demande s’il s’agit de quelque chose que ~/.bashrc
fait lorsque vous ouvrez un terminal, mais qui manque lorsqu’un raccourci sur le bureau (lien) exécute directement une commande de terminal?
Le script grub-display.sh
bash s’exécute parfaitement à partir d’une fenêtre de terminal.
Comment puis-je résoudre ce lien de bureau défectueux que Nautilus a créé pour moi?
Le problème est que le script repose sur la variable d'environnement TERM
en cours de configuration. Ubuntu Unity Desktop ne l’a pas initialisé lors de l’appel de scripts. Si vous ouvrez un terminal avec Ctrl+Alt+T la variable est configurée.
Pour tester votre système, créez un petit script appelé test-term.sh
et donnez-lui la forme suivante:
#!/bin/bash
#See if $TERM has been set when called from Desktop shortcut
echo TERM environment variable: $TERM > ~/Downloads/test-term.txt
echo "Using env | grep TERM output below:" >> ~/Downloads/test-term.txt
env | grep TERM >> ~/Downloads/test-term.txt
exit 0
Créez un lien dans Nautilus vers test-term.sh
et exécutez le lien. Puis vérifiez le fichier de sortie:
$ cat ~/Downloads/test-term.txt
TERM environment variable: dumb
Using env | grep TERM output below:
(... blank line appears here ...)
Comme vous pouvez le constater, la variable d'environnement TERM
est vide lorsque la commande env | grep TERM
est utilisée. De plus, la variable $TERM
est définie sur dumb
, ce qui ne convient pas très bien à la commande basée sur la couleur et prise en charge par la souris dialog
.
La solution à court terme consistait à inclure le code standard en haut des deux scripts en question:
# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
exit 1
fi
La "solution" est de ne pas exécuter de manière répétée des programmes en dehors de leur environnement requis sans vérifier leur statut de sortie . dialog
, whiptail
, etc., sont destinés aux terminaux. Ils nécessitent donc bien sûr le réglage de TERM
. Donc, vous devriez exécuter ces scripts dans un terminal. Si votre zenity "avancé", votre yad, etc. étaient exécutés sans affichage X11/Wayland, il en serait de même.
Dans votre script, vous vérifiez la sortie de dialog
tout en redirigeant la sortie d'erreur avec une sortie normale. Ainsi, lorsque la boîte de dialogue "se bloque et se grave" et affiche un message d'erreur, vous comparez alors la sortie d'erreur dans vos conditions if! Pourquoi ferais-tu ça?