Anacron 作业抱怨“Gtk-WARNING **:无法打开显示”

Anacron 作业抱怨“Gtk-WARNING **:无法打开显示”

我正在尝试做一个简单的每周 Anacron 作业,如果我在对话框中单击“是”,则会备份我的计算机。如果手动运行,我编写的脚本工作正常,但是当 Anacron 运行它时,什么也没有发生,我Gtk-WARNING **: cannot open display在日志中看到。显然该脚本是在无法运行图形操作的阶段运行的。有什么方法可以从 Anacron 作业中打开此对话框吗?

代码:

#!/bin/sh
# Backs up the local filesystem on the external HDD

sleep 60

DISPLAY=:0.0

zenity --question --text "Do you want to backup? Be sure to turn on the HDD."
if [ $? -ne 0 ]
    then exit 1
fi

*Do backup stuff here*

错误:

(zenity:2351): Gtk-WARNING **: cannot open display: 
run-parts: /etc/cron.daily/backup-on-external exited with return code 1

答案1

它可能只是在没有$DISPLAY环境变量的情况下运行。如果您echo $DISPLAY在 shell 中,您可以看到它的值是什么(很可能是:0.0),然后您可以在 crontab 文件中指定该值:

DISPLAY=:0.0 dialog ...

答案2

我的情况有点不同,我需要从具有root权限的cron运行一个GUI应用程序。 shell 脚本中的以下几行为我解决了这个问题:

export DISPLAY=:0,0
export XAUTHORITY=/home/{logged in user}/.Xauthority

当然,我真的不应该按照本文,但我仍然没有找到更好的解决方法。

答案3

您应该使用用户的 crontab 而不是系统范围的。

尝试 crontab -e (在 $EDITOR 中打开用户的 crontab)或 echo 'your crontab line here' | crontab -

答案4

您可以定义用户特定的 anacrontab:

sudo anacron -t ${HOME}/.anacron/anacrontab -S ${HOME}/.anacron/spool

-t= 使用指定的anacrontab,而不是默认的

-S= 使用指定的 spooldir 来存储时间戳,对于希望自己运行 anacron 的用户来说,此选项是必需的。

将命令添加到~/.profile您登录时执行的命令。

通过将以下行添加到“/etc/sudoers”,允许在没有密码的情况下执行“sudo anacron”:

user    ALL=(ALL:ALL) NOPASSWD: /usr/sbin/anacron

(将“用户”替换为您的用户名)

像这样应该设置用户的$DISPLAY和。$XAUTHORITY

相关内容