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”,因此不推荐。