2 votes

Exécutez gsettings avec crontab

J'ai créé un simple script python pour changer mon papier peint (Ubuntu 18.04) en prenant aléatoirement une image dans un dossier spécifique. J'utilise la commande gsettings. Ça fonctionne quand je l'exécute manuellement, mais je veux l'automatiser avec crontab.

J'ai rencontré l'erreur suivante car crontab n'a pas toutes les variables que j'avais quand j'exécutais mon script manuellement :

(process:xxxxx): dconf-AVERTISSEMENT **: 15:07:01.547: échec de la validation des changements de dconf: Impossible de lancer automatiquement D-Bus sans $DISPLAY X11

J'ai trouvé quelques solutions comme :

dbus_session_bus_address = 'PID=$(pgrep gnome-session | head -n1) && export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-) && '

command = dbus_session_bus_address + 'gsettings set org.gnome.desktop.background picture-uri ' + getRandomImage()

Cela semble fonctionner pour la plupart des gens mais j'ai un problème, mon crontab n'a pas les permissions :

grep: /proc/$pid/environ: Permission refusée
dconf-AVERTISSEMENT **: 15:19:01.514: échec de la validation des changements de dconf: L'adresse indiquée est vide 

J'ai alors exécuté le script avec sudo crontab -e, mais j'ai rencontré l'erreur suivante :

dconf-AVERTISSEMENT **: 15:22:01.807: échec de la validation des changements de dconf: La connexion est fermée

De plus, je préfère utiliser mon crontab utilisateur.. Quelle est la meilleure façon de le faire ?

2voto

Rémi Points 141

Merci au commentaire de steeldriver, j'ai trouvé la solution !

En fait, la commande pgrep gnome-session me donne 2 PID.
Quand je fais un ls -l /proc/, je peux voir que le premier répertoire de pid appartient à gdm (Gestionnaire d'affichage Gnome), et le deuxième appartient à mon utilisateur.

Donc dans mon script, je remplace simplement PID=$(pgrep gnome-session | head -n1) par PID=$(pgrep gnome-session | tail -n1) pour utiliser le PID associé à mon utilisateur.

Je ne sais pas si cette solution (avec tail -n1) peut fonctionner pour tout le monde. Je pense que le meilleur moyen est d'exécuter la commande pgrep gnome-session, regarder le propriétaire des dossiers pid, et choisir celui qui appartient à notre utilisateur.

En espérant que cela soit utile !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X