我有一个 dbus 服务器以 root 身份发布一些方法。
当我尝试使用小型 python 客户端访问它时,我无法访问它,直到我也以 root 身份启动客户端。
如何以系统用户身份访问以 root 身份启动的 D-Bus 服务?
由于缺乏 D-Bus 的经验和知识,我问了这个问题。
就我而言,我使用 SessionBus 来发布我的方法。顾名思义,它是与会话相关的总线。基本上,如果我用我的会话(我的用户)启动 D-Bus 服务,那么我的用户可以访问它。
我需要的是使用 SystemBus。
从文档(http://dbus.freedesktop.org/doc/dbus-specification.html#introduction):
D-Bus 专为两个特定用例而设计:
“系统总线”,用于从系统通知用户会话,并允许系统从用户会话请求输入。
用于实现 GNOME 和 KDE 等桌面环境的“会话总线”。
我也有同样的问题。我正在与 /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 ")