扩展 Dbus 服务
Posted
技术标签:
【中文标题】扩展 Dbus 服务【英文标题】:Extend Dbus Service 【发布时间】:2019-04-21 03:18:17 【问题描述】:更大的目标:
编写针对课堂学校环境的批处理用户管理器。
问题
我想编写一个用户管理器,它使用 GUI 来为课堂环境添加、管理和删除用户。我正在开发的程序是ltsp-manager。
到目前为止,所有的用户管理都是通过执行 bash 命令来完成的。来自 python 脚本。这意味着所有的 GUI 都必须以 root 身份运行,并且一切都是手工制作的。
目标
创建一个处理所有帐户管理的 Dbus 服务,并让 GUI 以不时需要密码的普通用户身份运行。
我环顾四周,发现在org.freedesktop.Accounts
中已经有一个service 在做很多我想做的功能。但是,它也缺少一些。完全缺少的是组的管理。
使用org.freedesktop.Accounts
功能并添加一些附加功能/方法的好方法是什么?
到目前为止的想法
我想到的事情包括:
-
只需重做所有工作 - 意味着大量重复工作。
复制接口并编写调用原始接口的函数
编写一个只实现附加功能而不触及原始功能的服务。然后客户端将使用原始服务和新编写的服务。
我所有的测试实验都是用python3
和pydbus
完成的,这似乎是许多人中最好的选择。
我从未编写过真实世界的 dbus 服务 - 尽管实验确实在 d-feet
中显示了一些结果。这个问题实际上并不是我需要输入什么类型的问题,而是一个最佳实践问题。
【问题讨论】:
【参考方案1】:最好的长期答案是fix accountsservice upstream to implement groups support。已经为此努力了;它只需要有人把它捡起来并完成它。 accountsservice 是提供org.freedesktop.Accounts
规范实现的项目。
其他方法不好,因为:
只需重做所有工作 - 意味着大量重复工作。
正如你所说,这是很多重复的工作,然后你必须全部维护。
复制接口并编写调用原始接口的函数
这意味着您必须永远跟上帐户服务的更改和添加。
编写一个只实现附加功能而不触及原始功能的服务。然后客户端将使用原始服务和新编写的服务。
这不会带来任何额外的维护问题,但意味着您的服务无法与 accountsservice 很好地集成。例如,您的 D-Bus 对象的更新和 accountsservice 对象的更新之间可能存在竞争条件。您将无法与 accountservice 的(许多)其他用户分担组代码的维护负担。
【讨论】:
感谢您的回答,您可能是对的! - 我很犹豫,因为宣布的replacement of org.freedesktop.Accounts by SSSD 将具有所有必要的接口。然而,这似乎需要相当长的时间才能完成。我可以尝试完成 Accountsservice 的组分支,但这意味着我需要修复一个东西,因为我想修复一个东西,因为我想修复一个东西 - 这什么时候结束;( ...以上是关于扩展 Dbus 服务的主要内容,如果未能解决你的问题,请参考以下文章
如何在python的扩展类中使用dbus导出方法,继承方法?
简单(但具体)的侦听器和发送器 Python 3 DBus 示例