J'ai écrit un script Shell qui télécharge du papier peint au hasard à partir d'une page Web et le définit comme arrière-plan toutes les 5 heures. Voici le script:
#!/bin/bash
countervar=1;
finish=0;
cd /home/guinness/.rwallpaper/
if [ -f counter ]
then
countervar=`cat counter`
fi
for (( i=$countervar; c<=2000000; i++ ))
do
echo $i > "counter"
if [ ! -f wallpaper-$i.jpg ]
then
wget "http://wallpapers.wallbase.cc/rozne/wallpaper-$i.jpg"
if [ -f wallpaper-$i.jpg ]
then
gsettings set org.gnome.desktop.background picture-uri "file:///home/guinness/.rwallpaper/wallpaper-$i.jpg"
exit
fi
fi
done
Si je lance un script, cela fonctionne comme un charme. J'utilise cron pour l'exécuter toutes les 5 heures. Le problème, c'est qu'il s'exécute toutes les 5 heures et télécharge avec succès l'image suivante, mais ne le définit pas comme fond d'écran. Quelqu'un peut-il me dire quel peut être le problème?
Cela est dû au fait que cron utilise uniquement un ensemble très restreint de variables d’environnement. La seule variable d'environnement chargée d'exécuter correctement le script à partir de la question lorsqu'elle est définie en tant que tâche périodique est DBUS_SESSION_BUS_ADDRESS
.
Vous devez donc exporter la variable d’environnement DBUS_SESSION_BUS_ADDRESS
dans votre script. Voir plus d'explications dans ma réponse ici .
En fin de compte, votre script devrait ressembler à:
#!/bin/bash
PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
countervar=1;
finish=0;
cd /home/guinness/.rwallpaper/
if [ -f counter ]
then
countervar=`cat counter`
fi
for (( i=$countervar; c<=2000000; i++ ))
do
echo $i > "counter"
if [ ! -f wallpaper-$i.jpg ]
then
wget "http://wallpapers.wallbase.cc/rozne/wallpaper-$i.jpg"
if [ -f wallpaper-$i.jpg ]
then
gsettings set org.gnome.desktop.background picture-uri "file:///home/guinness/.rwallpaper/wallpaper-$i.jpg"
exit
fi
fi
done
Le problème que vous rencontrez est presque certainement que la partie de votre script relative à la commutation en arrière-plan repose sur des variables d'environnement de votre session X. Cron ne définit aucune variable d'environnement, donc cela va casser cette partie du script.
Pour résoudre le problème, vous pouvez placer le script dans une boucle while avec une veille d'environ cinq heures, puis appeler votre script dans un emplacement tel que /etc/X11/Xsession.d/my_script ou ~/.xprofile.