pynotify в скрипте Python не работает при запуске с sudo в KDE
Я просто хочу показать уведомление в среде KDE. Так что я попробовал pynotifytest.py
from pynotify import *
init("test")
Notification("test", "test").show()
тогда я бегу sudo python pynotifytest.py
I ошибка, которую я получил, была:
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, поэтому я не могу оставить sudo позади. 1000 - это идентификатор пользователя, зарегистрированный в X.
Мой дистрибутив Linux - это Arch. Спасибо
2 ответа
Чтобы позволить sudo запускать графическое приложение в X, вам нужно добавить:
Defaults env_keep += "HOME"
Висудо.
"это работает для меня" - пожалуйста, дайте более подробную информацию о вашей системе. Он работал на Fedora 15 с отключенным SELinux. Также обратите внимание, что проблема, которую вы получаете, заключается в части GTK+, а не в pynotify как таковой.
Кроме того - ваш пользователь "1000" зарегистрирован в графической среде? Конечно, это не сработает, если вы пытаетесь отобразить окна с пользователем, отличным от того, кто вошел в систему или имеет права root.