I want to set up a cron job to run a python script, but it gives me this error:
RuntimeError: could not open display
This is because I imp
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!
You could also run your application in a framebuffer using xvfb
or a similar tool:
or sudo apt-get install xvfb
Usage:
xvfb :1 -screen 0 800x600x8 & # WIDTHxHEIGHTxCOLORDEPTH
export DISPLAY=":1"
java application_name.jar
or shorter:
xvfb-run -a -e /tmp/some/log/file.log /home/user/application.run
-a
chooses a display number automatically, -e file
specifies a logfile for error messages.