我写了一个程序,通过dbus作为会话服务运行.
如果由root(uid 0)执行,我想让它作为系统服务运行(创建dbus.SystemBus总线名称).
我正在尝试运行dbus.SystemBus我目前为dbus.SessionBus运行但是得到一个策略错误.
代码(python,但它并不重要),从不必要的一切清除,我运行是这样的:
import gobject
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
loop = gobject.MainLoop()
class dbusService(dbus.service.Object):
def __init__(self):
bus_name = dbus.service.BusName('org.testobj.service', bus=dbus.SystemBus())
dbus.service.Object.__init__(self, bus_name, '/org/testobj/service')
a = dbusService()
Run Code Online (Sandbox Code Playgroud)
得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
File "/usr/lib/python2.7/site-packages/dbus/service.py", line 131, in __new__ retval = bus.request_name(name, name_flags)
File "/usr/lib/python2.7/site-packages/dbus/bus.py", line 303, in request_name 'su', (name, flags))
File "/usr/lib/python2.7/site-packages/dbus/connection.py", line 651, in call_blocking message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.AccessDenied: Connection ":1.48" is not allowed to own the service "org.testobj.service" due to security policies in the configuration file
Run Code Online (Sandbox Code Playgroud)
jua*_*nte 15
使用上述示例的最简单方法是编辑/etc/dbus-1/system.conf并添加以下行:
<policy>
...
<allow own="org.testobj.service"/>
</policy>
Run Code Online (Sandbox Code Playgroud)
相关文件.
| 归档时间: |
|
| 查看次数: |
13485 次 |
| 最近记录: |