J'ai créé un script simple python pour changer mon fond d'écran (Ubuntu 18.04) en prenant au hasard une image dans un dossier spécifique . J'utilise la commande gsettings. Cela fonctionne quand je le lance manuellement, mais je veux l’automatiser avec crontab.
J'ai eu l'erreur suivante parce que crontab n'a pas toutes les variables que j'avais quand j'exécute mon script manuellement:
(process:xxxxx): dconf-WARNING **: 15:07:01.547: failed to commit changes to dconf: Impossible de lancer automatiquement D-Bus sans $DISPLAY X11
J'ai donc trouvé des 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, ma crontab n'a pas de permissions:
grep: /proc/$pid/environ: Permission denied
dconf-WARNING **: 15:19:01.514: failed to commit changes to dconf: The address indicated is empty
Donc, je lance le script avec Sudo crontab -e
, mais j'ai l'erreur suivante:
dconf-WARNING **: 15:22:01.807: failed to commit changes to dconf: Connection is closed
Aussi, je préfère utiliser mon utilisateur crontab .. Quelle est la meilleure façon de le faire?
Grâce au commentaire de steeldriver, j'ai trouvé la solution!
En fait, la commande pgrep gnome-session
me donne 2 PID.
Quand je ls -l /proc/
, je peux voir que le premier répertoire pid appartient à gdm (Gnome Display Manager), et le second appartient à mon utilisateur.
Donc, dans mon script, je viens de remplacer 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 la meilleure chose à faire est d'exécuter la commande pgrep gnome-session
, d'examiner le propriétaire des dossiers pid et de choisir celui qui appartient à notre utilisateur.
En espérant que cela vous sera utile!