如何确定使用哪个 D-Bus 绑定

How to figure out which D-Bus binding to use

我正在尝试检测所有 linux 屏幕保护程序是否正在运行或屏幕是否已锁定。

人们推荐了 dbus。所以现在我正在尝试使用 x11 或 C API 或其他东西自动检测可用的 dbus 类型,然后使用它。比如 qdubs、gdbus 等?

谢谢

您不需要检测正在使用的 D-Bus 绑定。由于它们都以相同的方式表达相同的事物,因此您只需要使用 您的 绑定来与消息总线对话并与任何其他 D-Bus 客户端交互。

如您所见,有多种可用的 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 APIs 的最佳实践自编写以来已经有所改进。建议您 不要 使用 libdbus。正如文档所说:“如果你直接使用这个低级 API,你会感到有些痛苦。”。用起来很不方便。它是用 C 写的。
  • dbus-glib 是与官方 D-Bus 实现相关的高级绑定。像 libdbus 一样,它很古老,并且从那时起最佳实践就一直在发展。建议您 而不是 使用 dbus-glib,而是使用 GDBus。使用起来很尴尬。它是用 C 写的。

有多种 bindings for other languages available,但我不确定它们的相对优点(如果有人想编辑此答案以涵盖这些,那就太好了)。