扩展Dbus服务

时间:2018-11-18 16:41:57

标签: python-3.x dbus user-accounts freedesktop.org

  

更大的目标:

     

编写针对教室学校环境的批处理用户管理器。

问题

我想写一个使用GUI来为教室环境添加,管理和删除用户的用户管理器。我正在使用的程序是ltsp-manager

到目前为止,所有用户管理都是通过执行bash命令来完成的。从python脚本开始。这意味着所有GUI必须以root用户身份运行,并且所有内容都是手工制作的。

目标

创建一个Dbus服务来处理所有帐户管理,并让GUI以需要密码的普通用户身份运行。

我环顾四周,发现在org.freedesktop.Accounts中已经有一个service在执行我想做的许多功能。但是,它也缺少一些。小组的管理完全缺少。

使用org.freedesktop.Accounts功能并添加一些其他功能/方法的好方法是什么?

到目前为止的想法

我想到的事情包括:

  1. 只需重做所有内容-意味着很多重复的工作。
  2. 复制接口并编写调用原始接口的函数
  3. 编写一个仅实现附加功能而不接触原始功能的服务。然后,客户端将使用原始服务和新编写的服务。

我所有的测试实验都是使用python3pydbus进行的,这似乎是许多方法中的最佳选择。

我从未写过真实的dbus服务-尽管实验确实在d-feet中显示了一些结果。这个问题实际上不是我需要键入什么类型的问题,而是最佳实践问题。

1 个答案:

答案 0 :(得分:0)

最好的长期答案是对fix accountsservice upstream to implement groups support。已经为此做出了努力;它只需要有人捡起并完成。 accountsservice是提供org.freedesktop.Accounts规范实现的项目。

其他方法不好,因为:

  

只是重做一切-意味着很多重复的工作。

正如您所说,这是很多重复的工作,然后您必须维护所有这些工作。

  

复制接口并编写调用原始接口的函数

这意味着您必须永远跟上对帐户服务的更改和添加。

  

编写仅实现附加功能而不接触原始功能的服务。然后,客户端将使用原始服务和新编写的服务。

这不会带来任何其他维护问题,但是这意味着您的服务无法与accountservice很好地集成。例如,D-Bus对象上的更新与accountsservice对象上的更新之间可能存在竞争条件。您将无法与(许多)accountsservice的其他用户分担组代码的维护负担。