Cron job: how to run a script that requires to open display?

You will need a valid DISPLAY and XAUTHORITY to use X-Programms in Cron!

To set DISPLAY is very easy, type in the Bash:

export DISPLAY=":0.0"

In order to get a valid XAUTHORITY you have to look for it.
Under Debian/Gnome/gdm3 they are saved in var/run/gdm3/*/database
I used the following script:

export DISPLAY=":0.0"
[ -z $USER ] && USER=$( who | awk '{ print $1 }' | sort | uniq >/tmp/test )
for I in /var/run/gdm3/*; do
    AUTHUSER="`echo $I | awk -F '-' '{ print $3 }'`"
    for J in $USER; do
        [ "${AUTHUSER}" = "${J}" ] || continue
        USER="$J"
        export XAUTHORITY="${I}/database" && break
    done
done
sudo -u ${USER} /Path/to/xProgramm

The Var $USER can be empty, than the script looks for a valid user, otherwise you can tell the script the var!

Leave a Comment