Le fond ne change pas en utilisant les paramètres de cron

11

J'essaie de changer mon fond d'écran en une image aléatoire en utilisant le script suggéré par Indrajith Indraprastham ici: Comment changer l'arrière-plan du bureau à partir de la ligne de commande dans Unity?

Lorsque j'exécute le script à partir d'une fenêtre de terminal, le bg change très bien, mais lorsqu'il est exécuté à partir de cron, je reçois cette erreur:

(processus: 21901): dconf-WARNING **: échec de validation des modifications dans dconf: erreur de génération de la ligne de commande 'dbus-launch --autolaunch = 00216c114dcf433c9bb9009985d607d6 --binary-syntax --close-stderr': processus enfant terminé avec le code 1

J'apprécierais toutes suggestions.

Shaun
la source
1
@Merri mis à part le fait que les réponses ne résolvent pas le problème de l'OP (ce qui n'en ferait pas dupe d'ailleurs), comment serait-ce un dupe ???? La même erreur ne signifie pas que c'est la même question.
Jacob Vlijm

Réponses:

16

Modification des paramètres depuis cron; variable d'environnement manquante

Si vous exécutez le script à partir de votre propre environnement (par exemple à partir d'une fenêtre de terminal ou à partir d'applications de démarrage), un certain nombre de variables d'environnement seront définies. cronexécute cependant votre script avec un ensemble limité de variables d'environnement.

Pour éditer gsettingsavec succès à partir de cron, vous devez définir la DBUS_SESSION_BUS_ADDRESSvariable d'environnement. Vous pouvez le faire en ajoutant deux lignes à votre script, comme décrit ici (et ci-dessous).

Votre script, y compris la définition de la variable requise

Le script d'ici , édité pour inclure la DBUS_SESSION_BUS_ADDRESSvariable d'environnement, devient alors:

#!/bin/bash

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

DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"

Connexe: Exécution de .sh toutes les 5 minutes

Jacob Vlijm
la source
@Shaun Vous êtes les bienvenus! Heureux que ça marche :)
Jacob Vlijm
1
J'essaie ceci avec Cinnamon on Mint. Lorsque je l'exécute directement à partir de la cli, j'obtiens "dconf-WARNING *: échec de la validation des modifications dans dconf: l'adresse donnée est vide". Il fonctionnait auparavant (à partir de cli), sans le PID et DBUS_SESSION_ . (Mais pas de cron)
donquixote
1
@donquixote Essayez PID=$(pgrep -f 'gnome-session' | head -n1)!
Jānis Elmeris
Vous pouvez remplacer DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)par $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)puisque grep obtient également le nom de la variable. source
wjandrea
1
pgrep gnome-sessionpeut renvoyer plus d'un pid si plusieurs utilisateurs sont connectés au système (chaque session gnome en cours d'exécution). Peut EUID=$(id --real --user)- être et PID=$(pgrep --euid $EUID gnome-session)serait un moyen d'obtenir uniquement le PID associé à la session gnome de l'utilisateur actuel.
unutbu