2012-06-23 20 views
8

Tôi đã viết một chương trình chạy dưới dạng dịch vụ phiên thông qua dbus.
Tôi muốn biến nó thành dịch vụ hệ thống (tạo tên bus dbus.SystemBus) nếu được thực thi bởi root (uid 0).
Tôi đang cố gắng chạy cho dbus.SystemBus những gì tôi hiện đang chạy cho dbus.SessionBus nhưng nhận được một lỗi chính sách.
Mã (python nhưng nó không thực sự quan trọng), xóa từ tất cả mọi thứ không cần thiết, tôi chạy là thế này:Chính sách 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() 

và nhận được:

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 

Trả lời

15

Cách đơn giản nhất để có được đi với ví dụ ở trên là chỉnh sửa /etc/dbus-1/system.conf và thêm dòng sau:

Relevant documentation.

+1

FYI rằng tôi cần tải lại dịch vụ dbus (CentOS 7): '' 'systemctl reload dbus''' để làm việc này – Joris

Các vấn đề liên quan