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

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

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

谢谢

正如您所注意到的,可以使用各种D-Bus绑定。 正如Ignacio所说,你可以使用它们中的任何一个,因为它们都使用相同的协议 – 但是某些绑定比某些情况更适合某些情况。

推荐的高级绑定:

  • GDBus是一个基于GLib / GObject的高级绑定。 如果您正在编写基于GNOME技术或GLib的服务或应用程序,则适合使用。 它是用C语言编写的,但是使用gobject-introspection可以为其他语言提供绑定(在各种function级别)。
  • 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语言写的。

有其他语言可用的各种绑定 ,但我不确定它们的相对优点(如果有人想编辑这个答案来涵盖那些,那就太棒了)。

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