pynotify в скрипте Python не работает при запуске с sudo в KDE - PullRequest
0 голосов
/ 05 декабря 2011

Я просто хочу показать уведомление в среде KDE. Так что я попробовал pynotifytest.py

from pynotify import *
init("test")
Notification("test", "test").show()

, затем я запускаю sudo python pynotifytest.py , ошибка, которую я получил:

No protocol specified
/usr/lib/python2.7/site-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display warnings.warn(str(e), _gtk.Warning)
 ----> 3 Notification("test", "test").show()

Error: Command line `dbus-launch --autolaunch=cb94cb23372d0aff09ce7d8a000024b4 --binary-syntax --close-stderr' exited with non-zero exit status 1: No protocol specified\nAutolaunch error: X11 initialization failed.

затем я попытался отбросить привилегию pynotifytest.py

import os
os.setuid(1000)
from pynotify import *
init("test")
Notification("test", "test").show()

, но я получил ту же ошибку только в KDE. В gnome-shell и удивительным образом уведомление показывается, как и ожидалось. У меня должна быть запущена программа на python с rootпривилегия, поэтому я не могу оставить Судо позади.1000 - это пользовательский логин пользователя в X.

Мой дистрибутив linux - Arch.Спасибо

Ответы [ 2 ]

0 голосов
/ 19 августа 2013

Чтобы разрешить sudo запускать графическое приложение в X, вам нужно добавить:

Defaults env_keep += "HOME"

до визудо.

0 голосов
/ 05 декабря 2011

«это работает для меня» - пожалуйста, дайте больше информации о вашей системе.Он работал на Fedora 15 с отключенным SELinux.Также обратите внимание, что проблема, с которой вы сталкиваетесь, связана с частью GTK +, а не с pynotify как таковой.

Кроме того, ваш пользователь "1000" зарегистрирован в графической среде?Конечно, это не сработает, если вы пытаетесь подключиться к окну с пользователем, отличным от того, кто вошел в систему, или с самим пользователем.

...