2012-06-23 15 views
8

Dbus üzerinden oturum hizmeti olarak çalışan bir program yazdım.
Kök (uid 0) tarafından çalıştırılırsa, sistem hizmeti (bir dbus.SystemBus veri yolu oluşturma) olarak çalıştırılmasını istedim.
Şu anda dbus.SessionBus için çalıştırdığım ancak bir ilke hatası aldığım dbus.SystemBus için çalıştırmaya çalışıyorum. Her şey koşuyorum, gereksiz temizlenir
kodu (piton ama gerçekten önemli değil), şudur:DBus SystemBus ilkeleri

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() 

ve almak:

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 

cevap

15

basit yolu ile yola çıkmaya

<policy> 
    ... 
    <allow own="org.testobj.service"/> 
</policy> 

Relevant documentation: yukarıdaki örnekte /etc/dbus-1/system.conf düzenlemek ve aşağıdaki satırı eklemektir.

+1

FYI, dbus servisini yeniden yüklemem gerekti (Centos 7): '' '' '' systemctl dbus''u tekrar çalıştırmak için – Joris

İlgili konular