Python和Pynotify错误“gio.Error:连接关闭”

问题描述:

我是Python的新pynotify我想创建一个通知消息,显示我有蟒蛇和pynotify通知,但我有一个问题,所有的例子我用在互联网上找到的教程。Python和Pynotify错误“gio.Error:连接关闭”

ex。

#!/usr/bin/python 
import sys 
import pynotify 

if __name__ == "__main__": 
    if not pynotify.init("icon-summary-body"): 
     sys.exit(1) 

    n = pynotify.Notification(
     "Hi There", 
     "welcome to *!", 
     ##dont remove the below line 
    "notification-message-im") 
    n.show() 

#!/usr/bin/env python 

import os 
import pynotify 

pynotify.init("random information") 
s = os.popen("fortune -n 100 -s","r").read() 
n = pynotify.Notification("Fortune",s) 
n.show() 

给我总是同样的错误

** (icmp.py:13188): WARNING **: Connection Closed 
Traceback (most recent call last): 
    File "icmp.py", line 14, in <module> 
    n.show() 
gio.Error: Connection Closed 

是什么意思?

感谢

有时,当有太长的调用之间的.init()和创建通知的差距会发生这种情况。有一个超时,当你调用pynotify.init(),可以过去。如果您确定在发出通知之前立即再次调用它,则应该平息此错误。

嗯,我发布这个问题后回复你一年。您可能已经有了解决方案。所以我会回答其他面临问题的人。

我工作的,它使用Pynotify一个项目,我遇到同样的问题。经过大量研究后,我发现我正在用root用户调用我的脚本。如果您还以root用户身份运行脚本,则可能是问题所在。问题是root没有运行dbus会话。我想它甚至不拥有XScreen。我假设你想使用属于登录用户的Dbus会话。

解决方案1:使用gksu。 GUI应用程序应该以gksu开始,而不是su或sudo。

解决方案2:将以下内容添加到脚本中。

import os 
os.environ['DISPLAY'] = ':0.0' 

解决方案3:将root用户添加到dbus组。 [未证实]

我希望它有帮助。

对我来说,现在要通过调用子通知,发送时使用sudo Python是用通知的唯一途径:

桌面环境:XFCE4

WIP method (Insecure): sudo -Eu root python2.7

import os, subprocess 

SudoUser = os.environ['SUDO_USER'] 

DBUSAddress = "DBUS_SESSION_BUS_ADDRESS={}".format(os.environ['DBUS_SESSION_BUS_ADDRESS']) 

NotiCommand='{} notify-send "Welcome" "{}"'.format(DBUSAddress, SudoUser) 

CompleteCall = 'sudo -u {} {}'.format(SudoUser, NotiCommand) 

subprocess.call(CompleteCall, shell=True) 

你去那里!在我的情况下,这个问题是基于Arch的发行版中严格安全性的结果,因为debian基础发行版更加灵活或者实际上不安全。因为这更像是一个黑客,它使用“shell = True”,因此不推荐。