GtkWarning无法打开显示 - 如何从我的守护进程发送通知发送

时间:2013-11-30 17:05:32

标签: linux ubuntu python-2.7 gtk upstart

我有一个使用以下命令的python-2.7.4守护程序脚本:

from os import popen
cmd = 'notify-send --icon=ICON_FILE --urgency=critical  -t 10000 \'SCRIPT_NAME\' \'Here is my message\''
popen('su USER -c -p \"'+cmd+'\"')

这个命令在python命令shell中可以正常工作。但是,它作为守护程序运行时不起作用。守护程序运行正常(在轮询时记录数据),但不会根据需要提供用户反馈。

使用Upstart和/etc/init/SCRIPT.conf文件在Mint(Ubuntu)上运行守护程序。 /var/log/upstart/SCRIPT.log文件在重新启动后具有单个条目:

/usr/lib/python2.7/dist-packages/gtk-2.0/gtk / _ init _。py:57:GtkWarning:无法打开显示warnings.warn( str(e),_gtk.Warning)

我使用以下命令找到登录用户:

popen('users')

从我发现的情况来看,将消息发送到其他用户显示器存在安全问题,并且由于守护程序从ROOT运行,因此返回上述GtkWarning。如何让我的python守护进程提供用户反馈osd和notify-send?

1 个答案:

答案 0 :(得分:2)

GTK警告不适用于发送notify-send的问题。守护进程当然是以root身份运行,需要使用'DISPLAY'变量来访问用户的显示。

export DISPLAY=:0

我通过使用'w'命令查找用户的显示并在发送notify-send命令之前更改此变量来修复此问题。守护程序现在正确地将通知发送到用户的DISPLAY。