DBus对象的子对象

1 投票
1 回答
965 浏览
提问于 2025-04-16 13:29

我正在尝试写一个dbus对象,用来管理用户,并且我在/path/to/users这个路径下创建了我的对象。这个对象有一些信号,比如“用户添加”和“用户移除”等等。

接下来,我想为每个用户提供访问权限,路径是/path/to/users/[a, b, c],其中a、b和c是用户的名字,每个用户都有一些方法可以使用。

不过,我的问题是,如何列出/path/to/users这个路径,以返回用户a、b和c的名字呢?

我唯一的选择是通过path.to.users.ListUsers()返回一个路径数组吗?有没有什么标准的接口可以继承,或者某种形式的自省(也就是查看对象的结构和信息)?

谢谢。

补充说明:我是在用python做这个,但我觉得这个问题跟编程语言无关。

1 个回答

1

标准的 D-Bus 可 introspectable 接口提供了一种查看对象的方法;它返回的数据包括一个对象列表。

大多数 D-Bus 绑定,包括 dbus-python,在服务端为你实现了 Introspectable;所以你的客户端应该能够在 /path/to/users 这个对象上调用 Introspect 方法,来查看有哪些用户对象存在。我不太确定 dbus-python 是否提供了更友好的接口来获取这些数据。就我个人而言,我会实现一个 ListUsers() 方法,它返回 a{oa{sv}}——也就是说,返回一个对象路径的列表,以及一些关于这些对象的属性(比如,调用 Properties.GetAll("uk.co.example.MyService.User") 来获取每个对象的所有属性)。

(如果你对未来感兴趣,David Zeuthan 提出了一个建议,想要标准化类似的东西。)

撰写回答