2014-02-08 2 views
0

Я новичок в python и pynotify. Я хочу создать уведомление, которое показывает мне уведомление с python и pynotify, но у меня есть проблема, все примеры, которые я использую для учебники, найденные в Интернете.Ошибка Python и Pynotify «gio.Error: Connection Closed»

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, это может быть проблемой. Проблема в том, что в корне не работает сеанс dbus. Думаю, у него даже нет XScreen. Я предполагаю, что вы хотите использовать сеанс Dbus, который принадлежит зарегистрированному пользователю.

Решение 1: Используйте gksu. Приложения GUI следует запускать с помощью gksu, а не su или sudo.

Решение 2: Добавьте к вашему скрипту следующее.

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

Решение 3. Добавить пользователя root в группу dbus. [Не проверено]

Надеюсь, это поможет.

0

Для меня единственный способ сейчас использовать уведомление при использовании SUDO питона по телефону уведомительных отправить с подпроцессом:

Desktop среда: 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, поскольку дебианные базовые дистрибутивы более гибкие или на самом деле небезопасны. Поскольку это больше похоже на взлом, и он использует «shell = True», это не рекомендуется.

Смежные вопросы