0

嗨 :) 我想要一个每 20 分钟通知的应用程序,并决定使用 Tomboy notes 自己开发一个。我阅读了有关 crontab 并通过sudo crontab -e命令设置工作。

*/20 * * * * python /home/phantom/Desktop/alarm.py 2>/home/phantom/Desktop/whatswrong.log

我的python代码会像:

#!/usr/bin/env python
 import dbus, gobject, dbus.glib
# Get the D-Bus session bus
 bus = dbus.SessionBus()
# Access the Tomboy D-Bus object
 obj = bus.get_object("org.gnome.Tomboy","/org/gnome/Tomboy/RemoteControl")
# Access the Tomboy remote control interface
 tomboy = dbus.Interface(obj, "org.gnome.Tomboy.RemoteControl")
# Display the Start Here note
 tomboy.DisplayNote(tomboy.FindNote("alert"))

我对 DBus 接口一无所知,但阅读了一个使用 DBus 与 Tomboy 接口的教程并想出了上面的代码。

当我手动运行代码时,我可以打开 Tomboy 注释(警报消息),但是使用 cron 我得到以下我无法理解的错误。请我帮帮我。谢谢 :)

Traceback (most recent call last):
File "/home/phantom/Desktop/try.py", line 4, in <module>
bus = dbus.SessionBus()
File "/usr/lib/pymodules/python2.6/dbus/_dbus.py", line 219, in __new__
mainloop=mainloop)
File "/usr/lib/pymodules/python2.6/dbus/_dbus.py", line 108, in __new__
bus = BusConnection.__new__(subclass, bus_type, mainloop=mainloop)
File "/usr/lib/pymodules/python2.6/dbus/bus.py", line 125, in __new__
bus = cls._new_for_bus(address_or_type, mainloop=mainloop)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ExecFailed: /bin/dbus- launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.
4

2 回答 2

2

根本问题是在您的情况下需要一个正在运行的 X 会话,并且当 CRON 脚本运行时,它在没有这样的会话的情况下运行(它实际上与任何终端分离运行)。Dbus 可执行文件需要能够初始化 X 会话(它实际上并不需要正在运行的 X)。

有几个解决方案:

  • 这里描述了一个类似的问题。他们的解决方案是运行 Xvfb 或类似的,以允许所有进程访问 X,即使它们实际上不显示任何内容。
  • 这里描述了一种不同的方法。看看,如果只是导出相关变量(您可以在 Python 中执行此操作或将它们包装在 CRON 启动的脚本中并将它们放在对 python 解释器的调用之前)就可以解决您的问题。请注意,该线程讨论了 dbus-launch,它是一个守护进程启动进程,但 dbus-send 在这里属于同一范畴。
  • 只需按照此处所述在脚本中设置 DISPLAY 变量。这应该足以让 DBUS 运行。

我认为第三种解决方案是最简单的,但现在你有不止一个。

于 2011-04-28T14:37:15.703 回答
0

不要执行sudocrontab,只需执行crontab -ecrontab 以作为您的用户配置文件运行并提供系统 python 的完整路径,您可以通过which python.

于 2011-04-28T14:20:38.067 回答