web-dev-qa-db-fra.com

Comment puis-je obtenir gvfs-info pour sortir les métadonnées du fichier lorsqu'il est appelé à partir de cron?

J'ai un problème étrange et j'espérais que quelqu'un pourrait peut-être me donner un aperçu. Un peu à perte.

Sur Linux Mint utilisant Nemo qui a tendance à planter de temps en temps avec l'effet secondaire ennuyeux de déplacer un tas de mes icônes de bureau. Je pensais que j'écrirais juste un script rapide qui déverserait les emplacements de toutes mes icônes dans un fichier texte une fois par jour, puis un autre pour les repositionner là où elles sont censées se trouver.

Il fonctionne parfaitement lorsque je l'exécute manuellement, mais pas lorsqu'il passe par cron.

J'ai compris que le problème se résume à gvfs-info. En gros, j'utilise la commande:

gvfs-info -a 'metadata::nemo-icon-position' /path/to/file

qui produira:

metadata::nemo-icon-position: 220,682

dans la sortie.

gvfs-info, cependant, doit communiquer avec le démon dbus pour obtenir les métadonnées car elles sont en fait stockées dans ~/.local/share/gvfs-metadata /. Il ne peut pas accéder au dbus-daemon quand il est généré depuis cron (ou Sudo ou ssh d'ailleurs) - un fait que j'ai découvert ici et ici qui propose un possible Solution.

Suite à cette solution, je peux exécuter avec succès à partir du terminal:

dbus-launch --exit-with-session /path/to/myscript.sh

et cela fonctionne comme prévu. Cependant, il produit toujours la même sortie sans les métadonnées. J'ai essayé beaucoup de permutations d'où j'ai appelé dbus-launch et en combinaison avec `` su user '' pour m'assurer qu'il fonctionne réellement en tant qu'utilisateur, mais je suppose que je ne comprends pas très bien ce qui se passe ici.

Quelqu'un a des pensées?

1
Shaav

Le commentaire de @ steeldriver était exactement ce dont j'avais besoin (merci!).

J'ai levé le dessous de Comment changer les paramètres via Shell distant et c'était exactement ce dont j'avais besoin!

PID=$(pidof -s nemo)
QUERY_ENVIRON="$(tr '\0' '\n' < /proc/${PID}/environ | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"
export DBUS_SESSION_BUS_ADDRESS="${QUERY_ENVIRON}"

J'ai utilisé "nemo" parce que je sais qu'il fonctionnerait dans mon environnement de bureau.

0
Shaav