如何将 dbus 和 policykit 连接到我在 python 中的函数?

Posted

技术标签:

【中文标题】如何将 dbus 和 policykit 连接到我在 python 中的函数?【英文标题】:How do I connect dbus and policykit to my function in python? 【发布时间】:2017-05-01 20:46:05 【问题描述】:

我正在制作一个 python 应用程序,它有一个需要 root 权限的方法。从https://www.freedesktop.org/software/polkit/docs/0.105/polkit-apps.html,我找到了Example 2. Accessing the authority via D-Bus,这是下面代码的python版本,我执行了它,我想我可以在之后获得root权限输入我的密码,但我的应用程序仍然收到“权限被拒绝”。 This 是我要连接的函数

import dbus

bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy, dbus_interface='org.freedesktop.PolicyKit1.Authority')

system_bus_name = bus.get_unique_name()

subject = ('system-bus-name', 'name' : system_bus_name)
action_id = 'org.freedesktop.policykit.exec'
details = 
flags = 1            # AllowUserInteraction flag
cancellation_id = '' # No cancellation id

result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)

print result

【问题讨论】:

【参考方案1】:

在你引用的python代码中,result表示成功还是失败?如果失败,您需要首先找出busproxyauthoritysystem_bus_name 的返回值是什么来缩小错误范围。如果成功,你需要检查你是如何使用result的。

【讨论】:

嗯,我认为只要输入正确的密码就可以成功。但是,我仍然不知所措,因为我不知道如何使用结果。我已经尝试过文档,但无法提出任何具体的建议。 这是来自aptdaemon docs的示例

以上是关于如何将 dbus 和 policykit 连接到我在 python 中的函数?的主要内容,如果未能解决你的问题,请参考以下文章

dbus 如何重新连接到新的会话总线守护进程

通过 TCP 连接到 DBus 服务

无法从 ubuntu 中的服务连接到会话 dbus

使用 QT/C++ 中的 DBUS 连接到新的 Bluez HDP 插件

连接到不同计算机上的会话 DBus

PyQt 5.6:连接到 DBus 信号挂起