KDE中使用sudo运行的Python脚本pynotify出错

0 投票
2 回答
964 浏览
提问于 2025-04-17 07:43

我只是想在KDE环境中显示通知。所以我试了试

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.

接着我尝试降低权限来运行

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

但在KDE中我还是遇到了同样的错误。在gnome-shell和awesome中,通知正常显示。我有一个必须以root权限运行的python程序,所以我不能不使用sudo。我的用户在X中的UID是1000。

我的Linux发行版是Arch。谢谢。

2 个回答

0

为了让sudo能够在图形界面中启动应用程序,你需要在visudo中添加以下内容:

Defaults env_keep += "HOME"

0

“对我来说可以用”——请提供更多关于你系统的信息。我在关闭SELinux的Fedora 15上测试过,效果很好。另外,请注意你遇到的问题是出在GTK+部分,而不是pynotify本身。

还有,你的用户“1000”是登录到图形界面的那个用户吗?当然,如果你试图用一个不是当前登录用户或者root用户的账户来显示窗口,那是行不通的。

撰写回答