Apparently gsettings
needs some variables to be set. Because CRON uses only a very restricted set of environment variables you must set them before your script. Use the following code in your CRON line.
30 */2 * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /your/path/your-script.sh
In the example the job is set to run every 2 hours on the 30th minute. I've tried to insert the variables into the script, for a cleaner line, with no result, if someone find a way to do that, let us know.
Stumbled with these settings in ArchLinux forums.
The above solution no longer works with Vivid.
The best way to get this to work is indeed to find DBUS_SESSION_BUS_ADDRESS
variable, in the following script I'm using a for
loop to do the job because using pidof
of a specific application like gnome-session
doesn't always work for me and the newers applications have a different DBUS ADDRESS
probably because, in my particular case, I'm starting some daemons on boot with my user name. To effectively change the wallpaper I'm using dconf
but you can also use gsettings
. So tweak the script to your use case.
#!/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 '\000' ) ]
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
in crontab add the following line to change wallpaper every even hour
0 */2 * * * /path/to-above-script.sh /path/to-wallpapers/
Best Answer
The script worked when I tested in GNOME SHELL 3.36.6
Here is the modified content under my
$HOME/.profile
file.Here is the modified content under my
$HOME/wp.sh
file.Wallpapers changed at 1m interval as expected.