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

后端 未结 2 1473
眼角桃花
眼角桃花 2020-12-11 05:14

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

相关标签:
2条回答
  • 2020-12-11 05:32

    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!

    0 讨论(0)
  • 2020-12-11 05:35

    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.

    0 讨论(0)
提交回复
热议问题