2012-06-23 9 views
8

मैंने एक प्रोग्राम लिखा जो डीबीस के माध्यम से सत्र सेवा के रूप में चलता है।
मैं रूट सेवा (यूआईडी 0) द्वारा निष्पादित होने पर इसे सिस्टम सेवा के रूप में चलाने के लिए (एक डीबीस। सिस्टमबस बस नाम बनाना) बनाना चाहता था।
मैं dbus.SystemBus के लिए दौड़ने की कोशिश कर रहा हूं जो मैं वर्तमान में dbus.SessionBus के लिए चलाता हूं लेकिन नीति त्रुटि प्राप्त करता हूं।
कोड (अजगर लेकिन यह वास्तव में कोई फर्क नहीं पड़ता), सब कुछ अनावश्यक, मैं चलाने से मंजूरी दे दी है:डीबीस सिस्टमबस नीतियां

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 

उत्तर

15

सबसे आसान तरीका है के साथ जा पाने के लिए

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

Relevant documentation: उपरोक्त उदाहरण /etc/dbus-1/system.conf संपादित करें और निम्न पंक्ति जोड़ना है।

+1

एफवाईआई कि मुझे डीबीस सेवा (सेंटोस 7) को फिर से लोड करने की आवश्यकता है: काम करने के लिए 'systemctl reload dbus''' – Joris

संबंधित मुद्दे