Napisałem program, który działa jako usługa sesji przez dbus.
Chciałem uruchomić go jako usługę systemową (tworzenie nazwy magistrali dbus.SystemBus), jeśli jest wykonywany przez root (uid 0).
Próbuję uruchomić dla dbus.SystemBus, co aktualnie uruchamiam dla dbus.SessionBus, ale uzyskać błąd zasady.
kod (Python, ale to naprawdę nie ma znaczenia), wyczyszczone z wszystkiego zbędnego, biegnę to:Zasady DBus SystemBus
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()
a otrzymasz:
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
FYI, którego potrzebowałem do przeładowania usługi dbus (Centos 7): '' 'systemctl reload dbus''' aby to działało – Joris