如何让简单的 QT5 应用不自动运行 dbus-launch ?

哪怕是一个再简单的 QT5 GUI 应用程序,也依赖 libdbus-1. 因为 X11 下的 QT5 GUI 应用的依赖链条是: libqxcb / libQt5XcbQpa → libQt5DBus → libdbus-1, 当然 Wayland 环境也大同小异。但在 QT4 时代并非如此,因为 QT4 下的简单 GUI 程序并不强行依赖 libQtDBus.

Linux 下的许多 GUI 应用都依赖 libdbus-1, 但它们不会触发 D-Bus 的自动运行机制,而 QT5 GUI 程序却会。结果就是:当启动一个简单的 QT5 GUI 应用时,假如 dbus-launch 和 dbus-daemon 没有启动,那么 QT5 GUI 应用会触发它,让它启动起来。

有无什么办法让 dbus-launch 不要自动运行,而是有需要时再运行?注意并非要求禁用 dbus-launch 和 dbus-daemon, 而是在无需使用到 D-BUs 时不自行触发启动它。

哪怕需要修改 libQt5DBus 部分的源代码也行,我愿意自己编译 QT 库。当然如果无需修改 QT 库,通过某些选项配置能够达到目的就更好了。

为什么你跑桌面应用却没有 dbus 在运行呢?

我没用 GNOME/KDE 之类的大型桌面环境,也没用 XFCE/LXDE 之类的小型桌面环境。只用简单的窗口管理器,自行修改和编译了许多软件,可以让 D-Bus 不运行起来。

编译 Qt 时运行 configure --help 看看,里面有三个选项:

-no-dbus … Do not build the Qt D-Bus module [default on Android and Windows]
-dbus-linked … Build Qt D-Bus and link to libdbus-1 [auto]
-dbus-runtime … Build Qt D-Bus and dynamically load libdbus-1 [no]

用第一个选项把 dbus 支持干掉。

许多 QT 的相关应用程序会用到 libQt5DBus, 如果不编译 D-Bus 模块,将导致一些应用程序无法运行。我希望的并非完全禁用 D-Bus, 而是按需启动。

对于 QT4, libQtGui 本身并不依赖 libQtDBus, 需要用到 D-Bus 功能的程序才依赖 libQtDBus. 假如 QT5 也像那样就好了。