0

我有一个 dbus 服务器以 root 身份发布一些方法。

当我尝试使用小型 python 客户端访问它时,我无法访问它,直到我也以 root 身份启动客户端。

如何以系统用户身份访问以 root 身份启动的 D-Bus 服务?

4

2 回答 2

6

由于缺乏 D-Bus 的经验和知识,我问了这个问题。

就我而言,我使用 SessionBus 来发布我的方法。顾名思义,它是与会话相关的总线。基本上,如果我用我的会话(我的用户)启动 D-Bus 服务,那么我的用户可以访问它。

我需要的是使用 SystemBus。

从文档(http://dbus.freedesktop.org/doc/dbus-specification.html#introduction):

D-Bus 专为两个特定用例而设计:

  • “系统总线”,用于从系统通知用户会话,并允许系统从用户会话请求输入。

  • 用于实现 GNOME 和 KDE 等桌面环境的“会话总线”。

于 2013-04-18T07:24:57.670 回答
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 ")
于 2013-05-03T12:24:49.780 回答