Skip to content

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