Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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.

share|improve this question

4 Answers 4

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.

share|improve this answer

This is happen because cron uses only a very restricted set of environment variables. The only one environment variable that is responsible for running in the right way the script from the question when this is set as a cron job is DBUS_SESSION_BUS_ADDRESS, not DISPLAY or GSETTINGS_BACKEND or something else.

So, you must to export DBUS_SESSION_BUS_ADDRESS environment variable in your script. See more explanations in my answer here.

In the end, your script should look like:

#!/bin/bash

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

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
share|improve this answer
2  
the only correct answer... –  Stefanos Kalantzis Dec 31 '13 at 12:20
    
Wish I had found this about 90 min ago –  Mark Feb 25 at 16:46

I started having the same problem about a month ago. I have also created a script which uses gsettings to change the desktop background in Gnome Shell/Unity.

Manually running this command immediately updates the desktop background. I also use cron to schedule execution of my script:

0,30 * * * * DISPLAY=:0.0 nextwall /home/serrano/Pictures/backgrounds/

As in your case, cron successfully runs the script and the new wallpaper URI is successfully set in gsettings. You can test this by running:

gsettings get org.gnome.desktop.background picture-uri

However, the desktop background is not updated when cron runs the script (this used to work until about a month ago). Interestingly, when I right click on my desktop and select "Change Desktop Background", the desktop background is suddenly updated to the correct image.

So for some reason changing the desktop background from cron no longer triggers Nautilus to update the desktop background. I suspect this is a bug, so I just filed a bug report for this issue: https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/1033034

Please click on the "Does this bug affect you?" link if you have the same problem.

share|improve this answer

Its easier if you try this simple bash script, works in gnome 3 ubuntu precise or debian, other may mint? haven't test, please reply if does. http://www.u3mx.com/borednomore2/index.php

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.