Aparentemente, gsettings
precisa de algumas variáveis a serem definidas. Como o CRON usa apenas um conjunto muito restrito de variáveis de ambiente, você deve defini-las antes do script. Use o seguinte código na sua linha CRON.
30 */2 * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /your/path/your-script.sh
No exemplo, o trabalho é definido para ser executado a cada 2 horas no 30º minuto. Eu tentei inserir as variáveis no script, para uma linha mais limpa, sem resultado, se alguém encontrar uma maneira de fazer isso, avise-nos.
Tropeçou com essas configurações nos fóruns do ArchLinux .
A solução acima não funciona mais com Vivid .
A melhor maneira de fazer isso funcionar é, de fato, encontrar DBUS_SESSION_BUS_ADDRESS
variable, no script a seguir estou usando um for
loop para fazer o trabalho porque use pidof
de um aplicativo específico como gnome-session
nem sempre funciona para mim e os aplicativos newers têm um DBUS ADDRESS
diferente provavelmente porque, no meu caso particular, estou iniciando alguns daemons na inicialização com o meu nome de usuário. Para alterar efetivamente o papel de parede que estou usando dconf
, você também pode usar gsettings
. Então ajuste o script ao seu caso de uso.
#!/bin/bash -e
user=$(whoami)
fl=$(find /proc -maxdepth 2 -user $user -name environ -print -quit)
while [ -z $(grep -z DBUS_SESSION_BUS_ADDRESS "$fl" | cut -d= -f2- | tr -d '0 */2 * * * /path/to-above-script.sh /path/to-wallpapers/
0' ) ]
do
fl=$(find /proc -maxdepth 2 -user $user -name environ -newer "$fl" -print -quit)
done
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS "$fl" | cut -d= -f2-)
if [ $# -gt 0 ]
then
PICS_PATH=$1
else
PICS_PATH="/home/public/Pictures/Wallpaper/"
fi
IMG=$(find -L $PICS_PATH -name "*.jpg" -o -name "*.png" | shuf -n1)
#gsettings set org.gnome.desktop.background picture-uri "file://${IMG}"
dconf write "/org/gnome/desktop/background/picture-uri" "'file://${IMG}'"
echo -e "$(date): ${IMG}" >> /tmp/wallch.log
no crontab adicione a seguinte linha para mudar o papel de parede a cada hora
30 */2 * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /your/path/your-script.sh