Je crée un script pour gérer mes icônes et j'utilise la commande gvfs-set-attribute
pour le faire. Le script fonctionne correctement lorsque je l'exécute avec le terminal, mais il échoue lorsque j'utilise cron
. Voici une version simplifiée de mon problème:
#!/bin/bash
PATH=/home/myUser/bin:/home/myUser/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/myUser/.local/share/gvfs-metadata
gvfs-set-attribute -t string /home/myUser/myFolder metadata::custom-icon file:///home/myUser/myImage.png
J'ai utilisé crontab -e
et réglé mon script pour qu'il s'exécute chaque minute * * * * * /home/myUser/script.bash
. Le problème est que ce script ne fonctionne pas du tout lorsque je l'exécute avec cron
.
J'ai déjà écrit le PATH
sur mon script, comme décrit dans this autre problème et le résultat de la commande whereis gvfs-set-attribute
est:
gvfs-set-attribute: /usr/bin/gvfs-set-attribute /usr/share/man/man1/gvfs-set-attribute.1.gz
Donc, je suppose qu’il n’ya rien de mal à la PATH
ici. J'ai également essayé d'exécuter mon script directement avec le chemin absolu: /usr/bin/gvfs-set-attribute
. Mais toutes ces choses ont fonctionné ... Quelqu'un a-t-il une idée de ce qui se passe et pourquoi je ne peux pas utiliser la commande gvfs-set-attribute
avec cron
?
Essayez d’ajouter cette ligne à votre script (évidemment avant l’appel à gvfs-set-attribute
):
export $(cat /proc/$(pgrep gnome-session)/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS)
Il récupère la variable d'environnement DBUS_SESSION_BUS_ADDRESS
de votre session de gnome existante. Cela fait cependant deux hypothèses:
S'il existe plusieurs sessions gnome (une pour chaque utilisateur), vous pouvez modifier cette ligne pour qu'elle fonctionne pour un utilisateur spécifique en ajoutant l'option -u
à pgrep
. Par exemple:
export $(cat /proc/$(pgrep gnome-session -u myUser)/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS)
Si vous n'utilisez pas gnome, je pense que cela fonctionnera avec d'autres environnements de bureau en remplaçant gnome-session
par une autre valeur, telle que lxsession
pour LXDE.
Les travaux cron
ne s'exécutent pas sous le système X Window et n'accèdent généralement pas aux objets d'interface graphique.
Cependant, vous pouvez tricher.
Dans un terminal, fonctionnant sous l'interface graphique:
xhost +localhost
echo "export DISPLAY=\"$DISPLAY\"" >$HOME/.display
Et, au début du travail cron
:
source $HOME/.display
Lire man xhost
.