我正在尝试做一个简单的每周 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