Abstract

The aim of this tutorial is to give an overview of DBus in the context of python. By the end, the goal is to understand how to find DBus methods in existing applications and how to use them in PyQt4/PyKDE4. It assumes a basic working knowledge of Python and PyKDE4. (see )

Future Plans

Later additions to this tutorial may cover creating and emitting dbus signals.

Introduction

DBus

First off, a small introduction to DBus. DBus is an inter-process communication framework. In other words, it allows different applications to talk to each other. DBus uses the concept of signals and methods, which are similar to the Signals and Slots in Qt. (For more information on Signals and Slots in python, suggested reading at the top) You can connect signals to methods, or call methods directly.

Bus Types

Everything sent or received in dbus is transferred over a bus. There are two main buses available, the Session Bus and the System Bus. The former handles per-session (per-user) information while the System Bus handles systemwide notification and settings. For example, the hal subsystem provides a number of interfaces on the System Bus, while Amarok or PowerDevil provides session-specific interfaces for control over music and power options, respectively.

Interfaces

A DBus path is made up of three parts, the Service Name, the Object Path and the Interface. The following table (taken from the Qt intro to dbus) provides some ways to distinguish between the three parts.

DBus Cheat Sheet

D-Bus Concept

Analogy

Name format

Service name

Network hostnames

Dot-separated ("looks like a hostname")

Object path

URL path component

Slash-separated ("looks like a path")

Interface

Plugin identifier

Dot-separated

Exploring DBus Interfaces

One of the easiest ways to discover a DBus method is by browsing for it using qdbusviewer. Run this program from your command line or KRunner (alt+f2) prompt.

QDBusViewer

You should see the following screen:

Initial QDBusViewer Screen

The two tabs available are the Session Bus and the System Bus.

Services

Within each bus, the left pane shows Service Names. If you click on a service, the right pane shows information about that service.

Find the org.freedesktop.PowerManagement service and select it. You show now see the following:

org.freedesktop.PowerManagement screen

Object Paths

Everything you see on the right pane is the start of an Object Path. Try expanding down the modules/powerdevil/ path. You should now see the following: