我有一个dbus服务器发布一些以root身份启动的方法。
当我尝试使用小型python客户端访问它时,我无法访问它,直到我也以root身份启动客户端。
如何以系统用户身份访问以root身份启动的D-Bus服务?
答案 0 :(得分:5)
由于缺乏D-Bus的经验和知识,我问了这个问题。
在我的情况下,我使用SessionBus发布我的方法。顾名思义,这是一个与会话相关的总线。 基本上,如果我使用我的会话(我的用户)启动D-Bus服务,那么我的用户可以访问它。
我需要的是使用SystemBus。
来自文档(http://dbus.freedesktop.org/doc/dbus-specification.html#introduction):
D-Bus专为两个特定用例而设计:
“系统总线”,用于从系统到用户会话的通知,并允许系统从用户会话请求输入。
用于实现GNOME和KDE等桌面环境的“会话总线”。
答案 1 :(得分:0)
我有同样的问题。我正在与/etc/dbus-1/system.d中的.conf文件作斗争,但文档是我读过的最糟糕的事情: http://dbus.freedesktop.org/doc/dbus-daemon.1.html
我认为您的问题可以解决配置您的总线。现在我有那个配置文件:
<policy context="default">
<allow send_interface="org.company.mybus"/>
<allow receive_interface="org.company.mybus"
receive_sender="org.company.mybus"/>
</policy>
有了这个,我可以实例化总线,但是当我调用导出的方法 initial_sync_data 时,会出现异常:
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.AccessDenied:
Rejected send message, 3 matched rules; type="method_call", sender=":1.254" (uid=100108 pid=5632 comm="python applet_quota.py ") interface="(unset)" member="initial_sync_data" error name="(unset)" requested_reply="0" destination=":1.253" (uid=0 pid=5603 comm="python main.py ")