I'm running 12.04 with a custom XML background (modification on Day of Ubuntu) that changes based on time of day. I've noticed that there's a significant delay between when the changes are scheduled to take place in the XML file and when they actually show up on the background. I've also noticed that when I resume from suspend I don't get the correct background image either. I've found that cycling the wallpaper manually will fix this, and I've written a script to automate the process.
If I execute the script manually it works fine. However, when I schedule the script to run in cron, cron doesn't change the background. To make sure that the script was being run properly by cron, I had it create a directory in my home folder after running the background change, and the directory is created successfully, so I know cron is running and executing the script.
My script:
#!/bin/bash
sleep 5
gsettings set org.gnome.desktop.background picture-uri
file:///home/zak/Pictures/Wallpaper/DOU2.xml
sleep 1
gsettings set org.gnome.desktop.background picture-uri
file:///home/zak/Pictures/Wallpaper/DOU.xml
sleep 1
mkdir /home/zak/iscronworking
exit
Is cron just not able to access gsettings
? The job is on my user crontab so it shouldn't be running as root.
Best Answer
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.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 afor
loop to do the job because usingpidof
of a specific application likegnome-session
doesn't always work for me and the newers applications have a differentDBUS 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 usingdconf
but you can also usegsettings
. So tweak the script to your use case.in crontab add the following line to change wallpaper every even hour