15

I'm trying to change my wallpaper to a random image using Indrajith Indraprastham's suggested script here: How to change desktop background from command line in Unity?

When I run the script from a terminal window, the bg changes just fine, but when it's run from cron, I'm mailed this error:

(process:21901): dconf-WARNING **: failed to commit changes to dconf: Error spawning command line 'dbus-launch --autolaunch=00216c114dcf433c9bb9009985d607d6 --binary-syntax --close-stderr': Child process exited with code 1

I would appreciate any suggestions.

Shaun
  • 331

2 Answers2

20

Editing gsettings from cron; missing environment variable

If you run the script from your own environment (e.g. from a terminal window or from Startup Applications), a number of environment variables will be set. cron however runs your script with a limited set of environment variables.

To edit gsettings successfully from cron, you need to set the DBUS_SESSION_BUS_ADDRESS environment variable. You can do that by adding two lines to your script, as described here (and below).

Your script, including setting the needed variable

The script from here, edited to include the DBUS_SESSION_BUS_ADDRESS environment variable, then becomes:

#!/bin/bash

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

DIR="/home/indra/Pictures/wallpapers" PIC=$(ls $DIR/* | shuf -n1) gsettings set org.gnome.desktop.background picture-uri "file://$PIC"


Related: Running .sh every 5 minutes

Jacob Vlijm
  • 85,475
1

The answer from @jacob-vlijm didn't work for me because of a few shell script issues (the $(id --real --user) command was returning more than one line, and the grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2- command had a null byte error).

Here's one that works without issues (at least for me):

#!/bin/bash

REAL_UID=$(id --real --user) PID=$(pgrep --euid $REAL_UID gnome-session | head -n 1) export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2- | sed -e "s/\x0//g")

DIR="/home/indra/Pictures/wallpapers" PIC=$(ls $DIR/* | shuf -n1) gsettings set org.gnome.desktop.background picture-uri "file://$PIC"

Cyril N.
  • 121
  • 4