qdbus6
A curated collection of real-world qdbus6 examples for KDE Plasma, KWin, PowerDevil, Bluetooth (BlueZ), Night Light, and session/system actions
List available D-Bus services and objects (Qt 6)
qdbus6
List all object paths exported by KWIn
qdbus6 org.kde.KWin
List all registered DBus services (session bus)
qdbus6 --session
Actions
Log out immediately (plasma-desktop)
qdbus6 org.kde.Shutdown /Shutdown org.kde.Shutdown.logout
Log out and shut down
qdbus6 org.kde.Shutdown /Shutdown org.kde.Shutdown.logoutAndShutdown
Log out and reboot
qdbus6 org.kde.Shutdown /Shutdown org.kde.Shutdown.logoutAndReboot
Lock the screen
qdbus6 org.kde.screensaver /ScreenSaver Lock
Hibernate the system
qdbus6 org.kde.Solid.PowerManagement /org/freedesktop/PowerManagement Hibernate
Suspend system (Sleep shortcut)
qdbus6 org.kde.kglobalaccel /component/org_kde_powerdevil invokeShortcut 'Sleep'
Show Plasma shutdown dialog (explicit UI)
qdbus6 org.kde.LogoutPrompt /LogoutPrompt promptShutDown
Show Plasma logout dialog (explicit UI)
qdbus6 org.kde.LogoutPrompt /LogoutPrompt promptLogout
Show Plasma reboot dialog (explicit UI)
qdbus6 org.kde.LogoutPrompt /LogoutPrompt promptReboot
Check if screen is currently locked
qdbus6 org.kde.screensaver /ScreenSaver GetActive
Unlock screen (if permitted)
qdbus6 org.kde.screensaver /ScreenSaver Unlock
Turn screen off immediately
qdbus6 org.kde.kglobalaccel /component/org_kde_powerdevil invokeShortcut 'Turn Off Screen'
Suspend system directly (no dialog)
qdbus6 org.kde.Solid.PowerManagement /org/freedesktop/PowerManagement Suspend
List all objects exposed by a DBus service
qdbus6 org.kde.Shutdown
Introspect DBus object (discover methods & signals)
qdbus6 org.kde.Shutdown /Shutdown
Check current PowerDevil profile
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement org.kde.Solid.PowerManagement.currentProfile
List KWin global shortcut names
qdbus6 org.kde.kglobalaccel /component/kwin org.kde.kglobalaccel.Component.shortcutNames
KWin: Maximize windows
qdbus6 org.kde.kglobalaccel /component/kwin org.kde.kglobalaccel.Component.invokeShortcut "Window Maximize"
KWin: Minimize windows
qdbus6 org.kde.kglobalaccel /component/kwin org.kde.kglobalaccel.Component.invokeShortcut "Window Minimize"
KWin: Window fullscreen toggle
qdbus6 org.kde.kglobalaccel /component/kwin org.kde.kglobalaccel.Component.invokeShortcut "Window Fullscreen"
List PowerDevil shortcut names
qdbus6 org.kde.kglobalaccel /component/org_kde_powerdevil org.kde.kglobalaccel.Component.shortcutNames
KWin: Window quick tile left
qdbus6 org.kde.kglobalaccel /component/kwin org.kde.kglobalaccel.Component.invokeShortcut "Window Quick Tile Left"
KWin: Toggle Night Color
-
Night light suspended
qdbus6 org.kde.kglobalaccel /component/kwin org.kde.kglobalaccel.Component.invokeShortcut "Toggle Night Color" -
Night light resumed
qdbus6 org.kde.kglobalaccel /component/kwin org.kde.kglobalaccel.Component.invokeShortcut "Toggle Night Color"
qdbus6 org.kde.KWin.NightLight /org/kde/KWin/NightLight org.freedesktop.DBus.Properties.GetAll org.kde.KWin.NightLight
Prompts
Prompt shutdown dialog (plasma-desktop)
qdbus6 org.kde.LogoutPrompt /LogoutPrompt promptShutDown
Prompt reboot dialog (plasma-desktop)
qdbus6 org.kde.LogoutPrompt /LogoutPrompt promptReboot
Invoke KWin shortcut: Overview
qdbus6 org.kde.kglobalaccel /component/kwin org.kde.kglobalaccel.Component.invokeShortcut "Overview"
Bluetooth
List all settings we can use
qdbus6 --system --literal org.bluez / org.freedesktop.DBus.ObjectManager.GetManagedObjects \
| grep -Eo '/org/bluez/hci[0-9]+/dev_[0-9A-F_]+' \
| sort -u \
| while IFS= read -r dev; do
qdbus6 --system org.bluez "$dev";
done
List all properties for org.bluez.Adapter1
qdbus6 --system \
org.bluez \
/org/bluez/hci0 \
org.freedesktop.DBus.Properties.GetAll \
org.bluez.Adapter1
List all properties for a specifik device
qdbus6 --system \
org.bluez \
/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX \
org.freedesktop.DBus.Properties.GetAll \
org.bluez.Device1
List all devices and get information about connected/disconnected devices
qdbus6 --system --literal org.bluez / org.freedesktop.DBus.ObjectManager.GetManagedObjects \
| grep -Eo '/org/bluez/hci[0-9]+/dev_[0-9A-F_]+' \
| sort -u \
| while IFS= read -r dev; do
if (( ! first )); then
printf -v _hr '%*s' "$(tput cols)"
echo "${_hr// /-}"
fi
first=0
qdbus6 --system org.bluez "$dev" \
org.freedesktop.DBus.Properties.GetAll org.bluez.Device1
done
Connect to device
qdbus6 --system \
org.bluez \
/org/bluez/hci0/dev_88_C9_E8_1E_9F_B5 \
org.bluez.Device1.Connect
Disconnect from device
qdbus6 --system \
org.bluez \
/org/bluez/hci0/dev_88_C9_E8_1E_9F_B5 \
org.bluez.Device1.Disconnect
What BlueZ services are named
qdbus6 --system | grep -i bluez
Show bluetooth devices connected (similiar bluetoothctl devices)
qdbus6 --system --literal org.bluez / org.freedesktop.DBus.ObjectManager.GetManagedObjects | grep -Eo '/org/bluez/hci[0-9]+/dev_[0-9A-F_]+' | sort -u
!!! Example "Start discovering"
```bash
qdbus6 --system org.bluez /org/bluez/hci0 org.bluez.Adapter1.StartDiscovery
```
Stop discovering
qdbus6 --system org.bluez /org/bluez/hci0 org.bluez.Adapter1.StopDiscovery
Check state (should be "true" if you run above command for StartDiscovery)
qdbus6 --system org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Get org.bluez.Adapter1 Discovering
Wait a few seconds and list devices we found
sleep 5
qdbus6 --system --literal org.bluez / org.freedesktop.DBus.ObjectManager.GetManagedObjects | grep -Eo '/org/bluez/hci0/dev_[0-9A-F_]+' | sort -u
What methods/properties exist on the adapter
qdbus6 --system org.bluez /org/bluez/hci0
List all properties by name we can use for bluez
qdbus6 --system org.bluez /org/bluez/hci0| sed 's/.*\.//'
What methods/properties exist on a device object
qdbus6 --system org.bluez /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX
Create copy-and-paste commands for see what proerties exist on a device
qdbus6 --system --literal org.bluez / \
org.freedesktop.DBus.ObjectManager.GetManagedObjects |
grep -Eo '/org/bluez/hci[0-9]+/dev_[0-9A-F_]+' |
sort -u |
sed 's|^.*$|qdbus6 --system org.bluez /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX|' |
sed 's|/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX|&|'
Execute all coommands from what we found from the command above
qdbus6 --system --literal org.bluez / \
org.freedesktop.DBus.ObjectManager.GetManagedObjects |
grep -Eo '/org/bluez/hci[0-9]+/dev_[0-9A-F_]+' |
sort -u |
while IFS= read -r dev; do
qdbus6 --system org.bluez "$dev"
done
Print mac-address of our bluetooth card
qdbus6 --system org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Get org.bluez.Adapter1 Address
Dump all adapter properties
qdbus6 --system org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.GetAll org.bluez.Adapter1
Do we are in discovering state
qdbus6 --system org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Get org.bluez.Adapter1 Discovering
Print our device bluetooth name
qdbus6 --system org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Get org.bluez.Adapter1 Name
Print our device bluetooth alias (same as name)
qdbus6 --system org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Get org.bluez.Adapter1 Alias
Is bluetooth powered on or off
qdbus6 --system org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Get org.bluez.Adapter1 Powered
Is bluetooth powered on or off
qdbus6 --system org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Get org.bluez.Adapter1 Powered
Check whether we are connected or not to our device
qdbus6 --system \
org.bluez \
/org/bluez/hci0/dev_88_C9_E8_1E_9F_B5 \
org.freedesktop.DBus.Properties.Get \
Print device name by mad-address
qdbus6 --system org.bluez /org/bluez/hci0/dev_88_C9_E8_1E_9F_B5 org.freedesktop.DBus.Properties.Get org.bluez.Device1 Name
WH-1000XM5
Tips And Tricks
- Syntax:
qdbus6 SERVICE PATH org.freedesktop.DBus.Properties.Get INTERFACE PROPERTY
Your /Actions node is just a container
- /org/kde/Solid/PowerManagement/Actions only exposes introspection + peer, and has child nodes:
- HandleButtonEvents
- PowerProfile
- SuspendSession
for n in HandleButtonEvents PowerProfile SuspendSession; do
echo "== $n =="
qdbus6 org.kde.Solid.PowerManagement "/org/kde/Solid/PowerManagement/Actions/$n" \
org.freedesktop.DBus.Introspectable.Introspect \
| sed -n 's/.*<interface name="\([^"]*\)".*/INTERFACE \1/p; s/.*<method name="\([^"]*\)".*/ METHOD \1/p; s/.*<property name="\([^"]*\)".*/ PROP \1/p'
done
qdbus6 --system --literal org.bluez / org.freedesktop.DBus.ObjectManager.GetManagedObjects \
Quickly extract just “callable-looking” names from the introspection XML
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement \
org.freedesktop.DBus.Introspectable.Introspect \
| sed -n 's/.*<method name="\([^"]*\)".*/\1/p'
Quickly extract just “interfaces” names from the introspection XML
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement \
org.freedesktop.DBus.Introspectable.Introspect \
| sed -n 's/.*<interface name="\([^"]*\)".*/\1/p'
List all child nodes from the parent XML
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement \
org.freedesktop.DBus.Introspectable.Introspect \
| sed -n 's/.*<node name="\([^"]*\)".*/\1/p'
List all options that can be callable
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement \
org.freedesktop.DBus.Introspectable.Introspect \
| sed -n 's/.*<method name="\([^"]*\)".*/\1/p'|sort
Listing BlueZ Managed Devices and Dumping Device1 Properties via qdbus6
first=1
qdbus6 --system --literal org.bluez / org.freedesktop.DBus.ObjectManager.GetManagedObjects \
| grep -Eo '/org/bluez/hci[0-9]+/dev_[0-9A-F_]+' \
| sort -u \
| while IFS= read -r dev; do
if (( ! first )); then
printf -v _hr '%*s' "$(tput cols)"
echo "${_hr// /-}"
fi
first=0
qdbus6 --system org.bluez "$dev" \
org.freedesktop.DBus.Properties.GetAll org.bluez.Device1
done
Introspect the object path (shows interfaces, methods, signals, properties)
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement \
org.freedesktop.DBus.Introspectable.Introspect
List fully qualified methods for the PowerManagement interface
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement \
org.freedesktop.DBus.Introspectable.Introspect \
| sed -n 's/.*<method name="\([^"]*\)".*/org.kde.Solid.PowerManagement.\1/p'
Enumerating and Invoking KDE Solid PowerManagement D-Bus Methods with qdbus6
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement \
org.freedesktop.DBus.Introspectable.Introspect \
| sed -n '
s/.*<interface name="\([^"]*\)".*/::iface=\1/p
s/.*<method name="\([^"]*\)".*/::method=\1/p
' \
| awk -F= '
/^::iface/ {iface=$2; next}
/^::method/ {print "qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement " iface "." $2}
'
Mastering qdbus6
qdbus6
Generate ready-to-copy commands for ALL paths (zero-arg methods only)
service=org.kde.KWin
qdbus6 "$service" / org.freedesktop.DBus.Introspectable.Introspect \
| sed -n 's/.*<node name="\([^"]*\)".*/\/\1/p' \
| while IFS= read -r path; do
# Skip empty
[[ -z $path ]] && continue
qdbus6 "$service" "$path" org.freedesktop.DBus.Introspectable.Introspect \
| awk -v S="$service" -v P="$path" '
# Track current interface
match($0, /<interface name="([^"]+)"/, m) { iface=m[1]; next }
# Start of a method: capture name and reset in-arg counter
match($0, /<method name="([^"]+)"/, m) { meth=m[1]; inargs=0; inmethod=1; next }
# Count input args inside the method block
inmethod && /<arg / && /direction="in"/ { inargs++ }
# End of method: if zero input args, print runnable command
inmethod && /<\/method>/ {
if (inargs==0 && iface !~ /^org\.freedesktop\.DBus\./) {
print "qdbus6 " S " " P " " iface "." meth
}
inmethod=0
}
'
done