2014-02-08 90 views
0

我是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 stackoverflow!", 
     ##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 

是什麼意思?

感謝

回答

-1

有時,當有太長的調用之間的.init()和創建通知的差距會發生這種情況。有一個超時,當你調用pynotify.init(),可以過去。如果您確定在發出通知之前立即再次調用它,則應該平息此錯誤。

0

嗯,我發佈這個問題後回覆你一年。您可能已經有了解決方案。所以我會回答其他面臨問題的人。

我工作的,它使用Pynotify一個項目,我遇到同樣的問題。經過大量研究後,我發現我正在用root用戶調用我的腳本。如果您還以root用戶身份運行腳本,則可能是問題所在。問題是root沒有運行dbus會話。我想它甚至不擁有XScreen。我假設你想使用屬於登錄用戶的Dbus會話。

解決方案1:使用gksu。 GUI應用程序應該以gksu開始,而不是su或sudo。

解決方案2:將以下內容添加到腳本中。

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

解決方案3:將root用戶添加到dbus組。 [未證實]

我希望它有幫助。

0

對我來說,現在要通過調用子通知,發送時使用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」,因此不推薦。