anacron 中的 GUI 应用程序

anacron 中的 GUI 应用程序

我尝试每天运行一堆脚本/命令。

为此,我配置了一个用户空间 anacron,如下所述这里. Anacron 由 cron 每小时启动一次:

内容/var/spool/cron/rawing

@hourly /usr/sbin/anacron -s -t ${HOME}/.anacron/etc/anacrontab -S ${HOME}/.anacron/spool

这很好用。但是,我还没有设法从我的 anacrontab 运行任何图形应用程序。我试过:

@daily 0 gui_test_env      env SCREEN=:0 zenity --info
@daily 0 gui_test_screen   SCREEN=:0 zenity --info

这两个操作都会失败并显示错误消息

Unable to init server: Could not connect: Connection refused

(zenity:6034): Gtk-WARNING **: cannot open display: 

@daily 0 notify_test    SCREEN=:0.0 && notify-send "foobar"

没有产生错误消息,但也没有显示通知。另一方面,显示桌面通知的 Python 脚本失败,并显示以下消息

Unable to init server: Could not connect: Connection refused
Traceback (most recent call last):
  File "/home/rawing/Desktop/folder/python/misc/confirm_run.py", line 36, in <module>
    n.show()
GLib.Error: g-spawn-exit-error-quark: Error spawning command line 'dbus-launch --autolaunch=db6d4465f8584b8faa8abfb09b242b95 --binary-syntax --close-stderr': Child process exited with code 1 (1)

如果有关系的话,python 代码如下所示(缩短):

from gi.repository import Notify
Notify.init('test')
n= Notify.Notification.new('title', 'question', "dialog-question")
n.set_urgency(Notify.Urgency.NORMAL)
n.show()

添加xhost local:rawing > /dev/null到我的~/.bashrc按照建议这里也没什么帮助。


更新:我已成功使用 运行 GUI 应用程序DISPLAY=:0 XAUTHORITY=/home/rawing/.Xauthority some_gui_app。但桌面通知仍然不起作用。错误是:

Traceback (most recent call last):
  File "/home/rawing/Desktop/folder/python/misc/confirm_run.py", line 36, in <module>
    n.show()
GLib.Error: g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files (2)

PS:关于如何实现这一点的建议没有也欢迎 anacron。我以为 anacron 会让这一切变得简单……结果我太乐观了。

答案1

在处理 NAS 上的 cron 时,我了解到直接执行命令通常会适得其反。解决此问题的方法是编写一个在内部完成所有操作的脚本。然后让 cron 任务调用运行良好的脚本。这需要几个特殊操作。

  • 编写脚本(这可能和#!bin/bash第一行一样简单
  • 对所有事物都使用绝对路径(通常,cron 环境在环境中没有路径,如果它有环境的话)

[编辑] 我理解这会跳过问题帖子中提供的很多细节。这在某种程度上是故意的。

经过反复尝试,我终于完成了以下工作。

mkdir -p /home/username/bin/cron
nano -w /home/username/bin/cron/testscreen.sh

(在 nano 中插入以下内容)

#!/bin/bash
/usr/bin/env SCREEN=:0 DISPLAY=:0 XAUTHORITY=/home/username/.Xauthority /usr/bin/zenity --info

保存脚本。

chmod +x /home/username/bin/cron/testscreen.sh
crontab -e 

添加以下行,根据您的特定需要调整时间。

20   8  *   *   *     /home/username/bin/cron/testscreen.sh

大多数情况下,我只需要在 xterm 的环境和 cron 的环境之间来回查看,找出缺少的关键部分。为了进行测试,我做了一些快速的操作来让 cron 事件触发“从现在起一分钟”,但我让它工作了,所以它应该对你有用。

相关内容