Use of `qdbus` binary requires that the package providing it be made mandatory, which pulls in a bunch of unrelated developer apps
User installs typically include Qt designer, Qt Assistant, Qt Linguistic, and multiple versions of Qt QDBusViewer. This is messy and non-ideal. These apps come from the qttools
Qt repo, which also includes qdbus
. And various pieces of KDE software use the qdbus
command in various desktop places:
To do
plasma-workspace
wallpapers/image/setaswallpaper.desktop.in:52:Exec=@QtBinariesDir@/qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript 'const allDesktops = desktopsForActivity(currentActivity()); for (i=0; i<allDesktops.length; i++) {d = allDesktops[i]; d.wallpaperPlugin = "org.kde.image"; d.currentConfigGroup = Array("Wallpaper", "org.kde.image", "General"); d.writeConfig("Image", "%u")}'
ksmserver/plasma-restoresession.service.in:8:ExecStart=-@QtBinariesDir@/qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.restoreSession
startkde/kcminit/plasma-kcminit-phase1.service.in:9:ExecStart=@QtBinariesDir@/qdbus org.kde.kcminit /kcminit org.kde.KCMInit.runPhase1
startkde/systemd/plasma-ksplash-ready.service.in:9:ExecStart=-@QtBinariesDir@/qdbus org.kde.KSplash /KSplash org.kde.KSplash.setStage ready
Info Center
$ grep -r qdbus
Modules/kwinsupportinfo/main.cpp:22: auto outputContext = new CommandOutputContext(QLibraryInfo::location(QLibraryInfo::BinariesPath) + QStringLiteral("/qdbus"),
Modules/kwinsupportinfo/kcm_kwinsupportinfo.json.in:79: "TryExec": "@QtBinariesDir@/qdbus",
KDE Connect
$ grep -r qdbus
plugins/sms/smsplugin.cpp:59: QVariantMap addressMap({{QStringLiteral("address"), qdbus_cast<ConversationAddress>(address).address()}});
plugins/runcommand/runcommand_config.cpp:30: // The qdbus executable name is different on some systems
plugins/runcommand/runcommand_config.cpp:31: QString qdbusExe = QStringLiteral("qdbus-qt5");
plugins/runcommand/runcommand_config.cpp:32: if (QStandardPaths::findExecutable(qdbusExe).isEmpty()) {
plugins/runcommand/runcommand_config.cpp:33: qdbusExe = QStringLiteral("qdbus");
plugins/runcommand/runcommand_config.cpp:59: .arg(qdbusExe));
plugins/runcommand/runcommand_config.cpp:62: addSuggestedCommand(defaultMenu, i18n("Close All Vaults"), QStringLiteral("%0 org.kde.kded5 /modules/plasmavault closeAllVaults").arg(qdbusExe));
plugins/runcommand/runcommand_config.cpp:65: QStringLiteral("%0 org.kde.kded5 /modules/plasmavault forceCloseAllVaults").arg(qdbusExe));
plugins/runcommand/kdeconnect_runcommand_config.qml:90: command: "qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl org.kde.Solid.PowerManagement.Actions.BrightnessControl.setBrightness `qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl org.kde.Solid.PowerManagement.Actions.BrightnessControl.brightnessMax`"
plugins/runcommand/kdeconnect_runcommand_config.qml:102: command: "qdbus org.kde.kded5 /modules/plasmavault closeAllVaults"
plugins/runcommand/kdeconnect_runcommand_config.qml:106: command: "qdbus org.kde.kded5 /modules/plasmavault forceCloseAllVaults"
Done
Spectacle
desktop/org.kde.spectacle.desktop.cmake:242:Exec=@QtBinariesDir@/qdbus org.kde.Spectacle / FullScreen -1 desktop/org.kde.spectacle.desktop.cmake:296:Exec=@QtBinariesDir@/qdbus org.kde.Spectacle / CurrentScreen -1 desktop/org.kde.spectacle.desktop.cmake:350:Exec=@QtBinariesDir@/qdbus org.kde.Spectacle / ActiveWindow -1 -1 desktop/org.kde.spectacle.desktop.cmake:404:Exec=@QtBinariesDir@/qdbus org.kde.Spectacle / RectangularRegion -1 desktop/org.kde.spectacle.desktop.cmake:449:Exec=@QtBinariesDir@/qdbus org.kde.Spectacle / WindowUnderCursor -1 -1 desktop/org.kde.spectacle.desktop.cmake:491:Exec=@QtBinariesDir@/qdbus org.kde.Spectacle / OpenWithoutScreenshot
Removed usages in graphics/spectacle!171 (merged).
drkonqi
src/data/gdb/preamble.py:406: print(get_stdout(['qdbus', '--system', 'org.freedesktop.systemd1', '/org/freedesktop/systemd1', 'org.freedesktop.systemd1.Manager.Virtualization'])) src/data/gdb/preamble.py:433: 'name': get_stdout(['qdbus', '--system', 'org.freedesktop.hostname1', '/org/freedesktop/hostname1', 'org.freedesktop.hostname1.Hostname']), src/data/gdb/preamble.py:434: 'family': get_stdout(['qdbus', '--system', 'org.freedesktop.hostname1', '/org/freedesktop/hostname1', 'org.freedesktop.hostname1.Chassis']), src/data/gdb/preamble.py:435: 'simulator': (get_stdout(['qdbus', '--session', 'org.freedesktop.systemd1', '/org/freedesktop/systemd1', 'org.freedesktop.systemd1.Manager.Virtualization']) != ""), src/data/gdb/preamble.py:440: 'timezone': get_stdout(['qdbus', '--system', 'org.freedesktop.timedate1', '/org/freedesktop/timedate1', 'org.freedesktop.timedate1.Timezone']),
Removed usages in drkonqi!126 (merged).
So because these projects use qdbus
directly, distros that don't split it into its own package will as a result install qttools
and pull in the unrelated dev apps.
We should try to replace these usages of qdbus
so that the qttools
repo can be optional and distros don't have to pre-install it to satisfy plasma-workspace
's dependencies and pollute their user installs with dev apps.
Some distros split the packages such that qdbus
can be installed on its own without pulling in these other apps, but that requires extra work from them to split up the content in the qttools
repo, and this doesn't seem fair to them. Additionally, some distros like Arch Linux don't do this as a matter of policy and instead always follow upstream packaging.