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

时间:2015-01-03 03:09:42

标签: c linux x11 dbus

如果屏幕保护程序正在运行或屏幕被锁定,我正试图检测所有linux。

人们推荐dbus。所以现在我试图用x11或C API自动检测什么样的dbus可用,然后使用它。像qdubs,gdbus等?

由于

2 个答案:

答案 0 :(得分:4)

正如您所注意到的,有各种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,但我不确定它们的相对优点(如果有人想编辑这个答案以涵盖那些,那就太棒了。)

答案 1 :(得分:1)

您不需要检测正在使用的D-Bus绑定。由于它们对同一事物的说法相同,因此您只需使用您的绑定与消息总线通信并与任何其他D-Bus客户端进行交互。