我有一个使用以下命令的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?
答案 0 :(得分:2)
GTK警告不适用于发送notify-send的问题。守护进程当然是以root身份运行,需要使用'DISPLAY'变量来访问用户的显示。
export DISPLAY=:0
我通过使用'w'命令查找用户的显示并在发送notify-send命令之前更改此变量来修复此问题。守护程序现在正确地将通知发送到用户的DISPLAY。