【问题标题】:GtkWarning could not open display - how can I notify-send from my daemonGtkWarning 无法打开显示 - 我如何从我的守护进程通知发送
【发布时间】:2013-12-16 16:07:35
【问题描述】:

我有一个使用以下命令的 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 中作为 ROOT 可以正常工作。但是,它在作为守护程序运行时不起作用。守护程序运行良好(在轮询时记录数据),但没有提供所需的用户反馈。

守护进程使用 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: 无法打开显示警告.warn( str(e), _gtk.Warning)

我发现使用以下命令登录的用户:

popen('users')

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

【问题讨论】:

    标签: linux ubuntu python-2.7 gtk upstart


    【解决方案1】:

    GTKWarning 不适用于发送通知发送的问题。当然,守护进程是以 root 身份运行的,并且需要使用“DISPLAY”变量来访问用户的显示。

    export DISPLAY=:0
    

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

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 2012-02-05
      • 2016-05-21
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      相关资源
      最近更新 更多