无法从 cron 运行 GUI 应用程序

无法从 cron 运行 GUI 应用程序

在 Ubuntu 12.04 笔记本上执行“sudo su -”后,我执行了“crontab -e”,添加了以下内容:

* * * * * env DISPLAY=:0.0 /usr/bin/gnome-calculator

然后等了几分钟。什么都没发生。我没有任何外接显示器,如果我在终端中运行此命令“env DISPLAY=:0.0 /usr/bin/gnome-calculator”,它就可以正常工作。但不是来自 cron。为什么?

系统日志仅包含以下内容:

May 24 14:37:01 localhost cron[1227]: (root) RELOAD (crontabs/root)
May 24 14:37:01 localhost CRON[16432]: (root) CMD (env DISPLAY=:0.0 /usr/bin/gnome-calculator )

我已经尝试过“xhost +localhost”。

[root@NOTEBOOK /var/log] xhost
access control enabled, only authorized clients can connect
INET:localhost.localdomain
SI:localuser:USERNAME
[root@NOTEBOOK /var/log] 

因此,askubunut 上另一个类似问题的解决方案不起作用。

答案1

我认为问题是这样的:

* * * * * env DISPLAY=:0.0 /usr/bin/gnome-calculator

将其设置为这个似乎有效:

* * * * * env DISPLAY=:0 /usr/bin/gnome-calculator

告诉env DISPLAY=:0它导出到显示器:0- 你可以TTY在输出中找到w

然后crontab -e以普通用户身份运行您希望应用程序运行的地方,并粘贴此行:

* * * * * env DISPLAY=:0 /usr/bin/gnome-calculator

如果您不想crontab -e使用来编辑它vim,请先运行此命令来nano代替:

export EDITOR=nano ; export VISUAL=nano

请注意,星号表示它将每分钟、每小时、每天运行一次,因此,除非您将其删除,否则它可能会变得非常烦人。

如果仍然不起作用,请尝试运行此命令:

sudo bash -c "echo $(whoami) > /etc/cron.allow"

如果你不想乱弄文本文件,你可以使用gnome-schedule反而。

参考:

答案2

根据 OP 的要求重写为答案。

首先,将其放入根 crontab 中可能不是一个好主意。您是否尝试过将其放入用户 crontab 中?

答案3

如果当前 x 用户不是 root,则在 root 下运行的 Cron 无权显示。

我们只需要将 root 用户添加到 x,您可以在登录时使用启动脚本执行此操作

xhost local:root

为了测试目的,我们可以在当前用户下运行该命令并重新启动 root cron 作业

答案4

由于此网站需要 50 点声誉才能添加评论,因此我将添加一个答案来回应@intika回答

如果您想从根 cron 表运行该命令,您可以以主要非 root 用户身份运行该命令:

* * * * * env DISPLAY=:0 sudo -i su USERNAME -c "/usr/bin/gnome-calculator"

相关内容