如何确定使用哪个 D-Bus 绑定
Posted
技术标签:
【中文标题】如何确定使用哪个 D-Bus 绑定【英文标题】:How to figure out which D-Bus binding to use 【发布时间】:2015-03-01 07:52:14 【问题描述】:我正在尝试跨所有 linux 检测屏幕保护程序是否正在运行或屏幕是否被锁定。
人们推荐了 dbus。所以现在我正在尝试使用 x11 或 C API 或其他可用的 dbus 自动检测,然后使用它。像qdubs、gdbus等?
谢谢
【问题讨论】:
【参考方案1】:您已经注意到,有多种可用的 D-Bus 绑定。正如 Ignacio 所说,您可以使用它们中的任何一个,因为它们都使用相同的协议——但某些绑定比其他绑定更适合某些情况。
推荐的高级绑定:
GDBus 是一个基于 GLib/GObject 的高级绑定。如果您正在编写基于 GNOME 技术或 GLib 的服务或应用程序,则可以使用它。它是用 C 编写的,但使用 gobject-introspection 可以为其他语言提供绑定(在不同的功能级别上)。 QtDBus 是一个基于 Qt 的高级绑定。如果您正在编写基于 Qt 的服务或应用程序,则可以使用它。它是用 C++ 编写的。推荐的低级绑定:
sd-bus 是一个低级绑定,依赖很少。如果您正在编写系统服务或系统应用程序并且不使用 GLib 或 Qt,则它是合适的。它是用 C 语言编写的。不推荐绑定:
libdbus 是官方 D-Bus 实现附带的较低级别的绑定。它已经过时了,设计 D-Bus API 的最佳实践自编写以来已得到改进。建议您不使用 libdbus。正如文档中所说:“如果你直接使用这个低级 API,你注册会有些痛苦。”。使用起来很尴尬。它是用 C 语言编写的。 dbus-glib 是一个高级绑定,附属于官方 D-Bus 实现。与 libdbus 一样,它已经过时了,并且从那时起最佳实践一直在发展。建议您不使用 dbus-glib,而使用 GDBus。使用起来很尴尬。它是用 C 语言编写的。有各种bindings for other languages available,但我不确定它们的相对优点(如果有人想编辑这个答案以涵盖这些,那就太好了)。
【讨论】:
非常感谢您提供如此详细的答复。这是真正将我的点与 Igancio 的答案联系起来的细节。谢谢!【参考方案2】:您无需检测正在使用的 D-Bus 绑定。由于它们都以相同的方式对同一事物说话,因此您只需要使用您的绑定来与消息总线对话并与任何其他 D-Bus 客户端交互。
【讨论】:
非常感谢!!怎么知道我应该做qdubs还是gdubs呢?看到这个人在这里发布了一个问题:askubuntu.com/questions/505681/… 他正在使用 qdbus,然后有人发布告诉他使用 gdbus 解决了问题 是的……不。他们都对同一件事说同样的话。我不知道为什么它对他有用,而不是另一个,但无论如何,这是一个红鲱鱼。以上是关于如何确定使用哪个 D-Bus 绑定的主要内容,如果未能解决你的问题,请参考以下文章
使用 GDBus 通过 D-Bus 发送字节数组(类型为 `ay`)