10

dbusを介してセッションサービスとして実行されるプログラムを作成しました。
root(uid 0)で実行する場合は、システムサービスとして実行する(dbus.SystemBusバス名を作成する)ようにしたかったのです。
現在dbus.SessionBusに対して実行しているものをdbus.SystemBusに対して実行しようとしていますが、ポリシーエラーが発生します。
不要なものをすべて削除したコード(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()

そして取得:

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
4

1 に答える 1