<?xml version="1.0" standalone="no"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"
[
]>

<article id="index">
  <articleinfo>
    <title>D-Bus Tutorial</title>
    <releaseinfo>Version 0.5.0</releaseinfo>
    <date>20 August 2006</date>
    <authorgroup>
      <author>
	<firstname>Havoc</firstname>
	<surname>Pennington</surname>
	<affiliation>
	  <orgname>Red Hat, Inc.</orgname>
	  <address><email>hp@pobox.com</email></address>
	</affiliation>
      </author>
      <author>
	<firstname>David</firstname>
	<surname>Wheeler</surname>
      </author>
      <author>
	<firstname>John</firstname>
	<surname>Palmieri</surname>
	<affiliation>
	  <orgname>Red Hat, Inc.</orgname>
	  <address><email>johnp@redhat.com</email></address>
	</affiliation>
      </author>
      <author>
	<firstname>Colin</firstname>
	<surname>Walters</surname>
	<affiliation>
	  <orgname>Red Hat, Inc.</orgname>
	  <address><email>walters@redhat.com</email></address>
	</affiliation>
      </author>
    </authorgroup>
  </articleinfo>

  <sect1 id="meta">
    <title>Tutorial Work In Progress</title>
    
    <para>
      This tutorial is not complete; it probably contains some useful information, but 
      also has plenty of gaps. Right now, you'll also need to refer to the D-Bus specification,
      Doxygen reference documentation, and look at some examples of how other apps use D-Bus.
    </para>

    <para>
      Enhancing the tutorial is definitely encouraged - send your patches or suggestions to the
      mailing list. If you create a D-Bus binding, please add a section to the tutorial for your 
      binding, if only a short section with a couple of examples.
    </para>

  </sect1>

  <sect1 id="whatis">
    <title>What is D-Bus?</title>
    <para>
      D-Bus is a system for <firstterm>interprocess communication</firstterm>
      (IPC). Architecturally, it has several layers:

      <itemizedlist>
        <listitem>
          <para>
            A library, <firstterm>libdbus</firstterm>, that allows two
            applications to connect to each other and exchange messages.
          </para>
        </listitem>
        <listitem>
          <para>
            A <firstterm>message bus daemon</firstterm> executable, built on
            libdbus, that multiple applications can connect to. The daemon can
            route messages from one application to zero or more other
            applications.
          </para>
        </listitem>
        <listitem>
          <para>
            <firstterm>Wrapper libraries</firstterm> or <firstterm>bindings</firstterm> 
            based on particular application frameworks.  For example, libdbus-glib and
            libdbus-qt. There are also bindings to languages such as
            Python. These wrapper libraries are the API most people should use,
            as they simplify the details of D-Bus programming. libdbus is 
            intended to be a low-level backend for the higher level bindings.
            Much of the libdbus API is only useful for binding implementation.
          </para>
        </listitem>
      </itemizedlist>
    </para>

    <para>
      libdbus only supports one-to-one connections, just like a raw network
      socket. However, rather than sending byte streams over the connection, you
      send <firstterm>messages</firstterm>. Messages have a header identifying
      the kind of message, and a body containing a data payload. libdbus also
      abstracts the exact transport used (sockets vs. whatever else), and
      handles details such as authentication.
    </para>

    <para>
      The message bus daemon forms the hub of a wheel. Each spoke of the wheel
      is a one-to-one connection to an application using libdbus.  An
      application sends a message to the bus daemon over its spoke, and the bus
      daemon forwards the message to other connected applications as
      appropriate. Think of the daemon as a router.
    </para>

    <para>
      The bus daemon has multiple instances on a typical computer.  The
      first instance is a machine-global singleton, that is, a system daemon
      similar to sendmail or Apache. This instance has heavy security
      restrictions on what messages it will accept, and is used for systemwide
      communication. The other instances are created one per user login session.
      These instances allow applications in the user's session to communicate 
      with one another.
    </para>

    <para>
      The systemwide and per-user daemons are separate.  Normal within-session
      IPC does not involve the systemwide message bus process and vice versa.
    </para>

    <sect2 id="uses">
      <title>D-Bus applications</title>
      <para>
        There are many, many technologies in the world that have "Inter-process
        communication" or "networking" in their stated purpose: <ulink
        url="http://www.omg.org">CORBA</ulink>, <ulink
        url="http://www.opengroup.org/dce/">DCE</ulink>, <ulink
        url="http://www.microsoft.com/com/">DCOM</ulink>, <ulink
        url="http://developer.kde.org/documentation/library/kdeqt/dcop.html">DCOP</ulink>, <ulink
        url="http://www.xmlrpc.com">XML-RPC</ulink>, <ulink
        url="http://www.w3.org/TR/SOAP/">SOAP</ulink>, <ulink
        url="http://www.mbus.org/">MBUS</ulink>, <ulink
        url="http://www.zeroc.com/ice.html">Internet Communications Engine (ICE)</ulink>,
        and probably hundreds more.
        Each of these is tailored for particular kinds of application.
        D-Bus is designed for two specific cases:
        <itemizedlist>
          <listitem>
            <para>
              Communication between desktop applications in the same desktop
              session; to allow integration of the desktop session as a whole,
              and address issues of process lifecycle (when do desktop components 
              start and stop running).
            </para>
          </listitem>
          <listitem>
            <para>
              Communication between the desktop session and the operating system, 
              where the operating system would typically include the kernel 
              and any system daemons or processes.
            </para>
          </listitem>
        </itemizedlist>
      </para>
      <para>
        For the within-desktop-session use case, the GNOME and KDE desktops 
        have significant previous experience with different IPC solutions
        such as CORBA and DCOP. D-Bus is built on that experience and 
        carefully tailored to meet the needs of these desktop projects 
        in particular. D-Bus may or may not be appropriate for other 
        applications; the FAQ has some comparisons to other IPC systems.
      </para>
      <para>
        The problem solved by the systemwide or communication-with-the-OS case 
        is explained well by the following text from the Linux Hotplug project:
        <blockquote>
          <para>
           A gap in current Linux support is that policies with any sort of
           dynamic "interact with user" component aren't currently
           supported. For example, that's often needed the first time a network
           adapter or printer is connected, and to determine appropriate places
           to mount disk drives. It would seem that such actions could be
           supported for any case where a responsible human can be identified:
           single user workstations, or any system which is remotely
           administered.
          </para>

          <para>
            This is a classic "remote sysadmin" problem, where in this case
            hotplugging needs to deliver an event from one security domain
            (operating system kernel, in this case) to another (desktop for
            logged-in user, or remote sysadmin). Any effective response must go
            the other way: the remote domain taking some action that lets the
            kernel expose the desired device capabilities. (The action can often
            be taken asynchronously, for example letting new hardware be idle
            until a meeting finishes.) At this writing, Linux doesn't have
            widely adopted solutions to such problems. However, the new D-Bus
            work may begin to solve that problem.
          </para>
        </blockquote>
      </para>
      <para>
        D-Bus may happen to be useful for purposes other than the one it was
        designed for. Its general properties that distinguish it from 
        other forms of IPC are:
        <itemizedlist>
          <listitem>
            <para>
              Binary protocol designed to be used asynchronously 
              (similar in spirit to the X Window System protocol).
            </para>
          </listitem>
          <listitem>
            <para>
              Stateful, reliable connections held open over time.
            </para>
          </listitem>
          <listitem>
            <para>
              The message bus is a daemon, not a "swarm" or 
              distributed architecture.
            </para>
          </listitem>
          <listitem>
            <para>
              Many implementation and deployment issues are specified rather
              than left ambiguous/configurable/pluggable.
            </para>
          </listitem>
          <listitem>
            <para>
              Semantics are similar to the existing DCOP system, allowing 
              KDE to adopt it more easily.
            </para>
          </listitem>
          <listitem>
            <para>
              Security features to support the systemwide mode of the 
              message bus.
            </para>
          </listitem>
        </itemizedlist>
      </para>
    </sect2>
  </sect1>
  <sect1 id="concepts">
    <title>Concepts</title>
    <para>
      Some basic concepts apply no matter what application framework you're
      using to write a D-Bus application. The exact code you write will be
      different for GLib vs. Qt vs. Python applications, however.
    </para>
    
    <para>
      Here is a diagram (<ulink url="diagram.png">png</ulink> <ulink
      url="diagram.svg">svg</ulink>) that may help you visualize the concepts
      that follow.
    </para>

    <sect2 id="objects">
      <title>Native Objects and Object Paths</title>
      <para>
        Your programming framework probably defines what an "object" is like;
        usually with a base class. For example: java.lang.Object, GObject, QObject,
        python's base Object, or whatever. Let's call this a <firstterm>native object</firstterm>.
      </para>
      <para>
        The low-level D-Bus protocol, and corresponding libdbus API, does not care about native objects. 
        However, it provides a concept called an 
        <firstterm>object path</firstterm>. The idea of an object path is that 
        higher-level bindings can name native object instances, and allow remote applications 
        to refer to them.
      </para>
      <para>
        The object path
        looks like a filesystem path, for example an object could be 
        named <literal>/org/kde/kspread/sheets/3/cells/4/5</literal>. 
        Human-readable paths are nice, but you are free to create an 
        object named <literal>/com/mycompany/c5yo817y0c1y1c5b</literal> 
        if it makes sense for your application.
      </para>
      <para>
        Namespacing object paths is smart, by starting them with the components
        of a domain name you own (e.g. <literal>/org/kde</literal>). This 
        keeps different code modules in the same process from stepping 
        on one another's toes.
      </para>
    </sect2>    

    <sect2 id="members">
      <title>Methods and Signals</title>

      <para>
        Each object has <firstterm>members</firstterm>; the two kinds of member
        are <firstterm>methods</firstterm> and
        <firstterm>signals</firstterm>. Methods are operations that can be
        invoked on an object, with optional input (aka arguments or "in
        parameters") and output (aka return values or "out parameters").
        Signals are broadcasts from the object to any interested observers 
        of the object; signals may contain a data payload.
      </para>

      <para>
        Both methods and signals are referred to by name, such as 
        "Frobate" or "OnClicked".
      </para>

    </sect2>

    <sect2 id="interfaces">
      <title>Interfaces</title>
      <para>
        Each object supports one or more <firstterm>interfaces</firstterm>.
        Think of an interface as a named group of methods and signals, 
        just as it is in GLib or Qt or Java. Interfaces define the 
        <emphasis>type</emphasis> of an object instance.
      </para>
      <para>
        DBus identifies interfaces with a simple namespaced string,
        something like <literal>org.freedesktop.Introspectable</literal>.
        Most bindings will map these interface names directly to 
        the appropriate programming language construct, for example 
        to Java interfaces or C++ pure virtual classes.
      </para>
    </sect2>

    <sect2 id="proxies">
      <title>Proxies</title>
      <para>
        A <firstterm>proxy object</firstterm> is a convenient native object created to 
        represent a remote object in another process. The low-level DBus API involves manually creating 
        a method call message, sending it, then manually receiving and processing 
        the method reply message. Higher-level bindings provide proxies as an alternative.
        Proxies look like a normal native object; but when you invoke a method on the proxy 
        object, the binding converts it into a DBus method call message, waits for the reply 
        message, unpacks the return value, and returns it from the native method..
      </para>
      <para>
        In pseudocode, programming without proxies might look like this:
        <programlisting>
          Message message = new Message("/remote/object/path", "MethodName", arg1, arg2);
          Connection connection = getBusConnection();
          connection.send(message);
          Message reply = connection.waitForReply(message);
          if (reply.isError()) {
             
          } else {
             Object returnValue = reply.getReturnValue();
          }
        </programlisting>
      </para>
      <para>
        Programming with proxies might look like this:
        <programlisting>
          Proxy proxy = new Proxy(getBusConnection(), "/remote/object/path");
          Object returnValue = proxy.MethodName(arg1, arg2);
        </programlisting>
      </para>
    </sect2>

    <sect2 id="bus-names">
      <title>Bus Names</title>

      <para>
        When each application connects to the bus daemon, the daemon immediately
        assigns it a name, called the <firstterm>unique connection name</firstterm>.
        A unique name begins with a ':' (colon) character. These names are never 
        reused during the lifetime of the bus daemon - that is, you know 
        a given name will always refer to the same application.
        An example of a unique name might be
        <literal>:34-907</literal>. The numbers after the colon have 
        no meaning other than their uniqueness.
      </para>

      <para>
        When a name is mapped 
        to a particular application's connection, that application is said to 
        <firstterm>own</firstterm> that name.
      </para>

      <para>
        Applications may ask to own additional <firstterm>well-known
        names</firstterm>. For example, you could write a specification to
        define a name called <literal>com.mycompany.TextEditor</literal>.
        Your definition could specify that to own this name, an application
        should have an object at the path
        <literal>/com/mycompany/TextFileManager</literal> supporting the
        interface <literal>org.freedesktop.FileHandler</literal>.
      </para>
      
      <para>
        Applications could then send messages to this bus name, 
        object, and interface to execute method calls.
      </para>

      <para>
        You could think of the unique names as IP addresses, and the
        well-known names as domain names. So
        <literal>com.mycompany.TextEditor</literal> might map to something like
        <literal>:34-907</literal> just as <literal>mycompany.com</literal> maps
        to something like <literal>192.168.0.5</literal>.
      </para>
      
      <para>
        Names have a second important use, other than routing messages.  They
        are used to track lifecycle. When an application exits (or crashes), its
        connection to the message bus will be closed by the operating system
        kernel. The message bus then sends out notification messages telling
        remaining applications that the application's names have lost their
        owner. By tracking these notifications, your application can reliably
        monitor the lifetime of other applications.
      </para>

      <para>
        Bus names can also be used to coordinate single-instance applications.
        If you want to be sure only one
        <literal>com.mycompany.TextEditor</literal> application is running for
        example, have the text editor application exit if the bus name already
        has an owner.
      </para>

    </sect2>

    <sect2 id="addresses">
      <title>Addresses</title>

      <para>
        Applications using D-Bus are either servers or clients.  A server
        listens for incoming connections; a client connects to a server. Once
        the connection is established, it is a symmetric flow of messages; the
        client-server distinction only matters when setting up the 
        connection.
      </para>

      <para>
        If you're using the bus daemon, as you probably are, your application 
        will be a client of the bus daemon. That is, the bus daemon listens 
        for connections and your application initiates a connection to the bus 
        daemon.
      </para>

      <para>
        A D-Bus <firstterm>address</firstterm> specifies where a server will
        listen, and where a client will connect.  For example, the address
        <literal>unix:path=/tmp/abcdef</literal> specifies that the server will
        listen on a UNIX domain socket at the path
        <literal>/tmp/abcdef</literal> and the client will connect to that
        socket. An address can also specify TCP/IP sockets, or any other
        transport defined in future iterations of the D-Bus specification.
      </para>

      <para>
        When using D-Bus with a message bus daemon,
        libdbus automatically discovers the address of the per-session bus 
        daemon by reading an environment variable. It discovers the 
        systemwide bus daemon by checking a well-known UNIX domain socket path
        (though you can override this address with an environment variable).
      </para>

      <para>
        If you're using D-Bus without a bus daemon, it's up to you to 
        define which application will be the server and which will be 
        the client, and specify a mechanism for them to agree on 
        the server's address. This is an unusual case.
      </para>

    </sect2>

    <sect2 id="bigpicture">
      <title>Big Conceptual Picture</title>

      <para>
        Pulling all these concepts together, to specify a particular 
        method call on a particular object instance, a number of 
        nested components have to be named:
        <programlisting>
          Address -&gt; [Bus Name] -&gt; Path -&gt; Interface -&gt; Method
        </programlisting>
        The bus name is in brackets to indicate that it's optional -- you only
        provide a name to route the method call to the right application
        when using the bus daemon. If you have a direct connection to another
        application, bus names aren't used; there's no bus daemon.
      </para>

      <para>
        The interface is also optional, primarily for historical 
        reasons; DCOP does not require specifying the interface, 
        instead simply forbidding duplicate method names 
        on the same object instance. D-Bus will thus let you 
        omit the interface, but if your method name is ambiguous 
        it is undefined which method will be invoked.
      </para>

    </sect2>

    <sect2 id="messages">
      <title>Messages - Behind the Scenes</title>
      <para>
        D-Bus works by sending messages between processes. If you're using 
        a sufficiently high-level binding, you may never work with messages directly.
      </para>
      <para>
        There are 4 message types:
        <itemizedlist>
          <listitem>
            <para>
              Method call messages ask to invoke a method 
              on an object.
            </para>
          </listitem>
          <listitem>
            <para>
              Method return messages return the results 
              of invoking a method.
            </para>
          </listitem>
          <listitem>
            <para>
              Error messages return an exception caused by 
              invoking a method.
            </para>
          </listitem>
          <listitem>
            <para>
              Signal messages are notifications that a given signal 
              has been emitted (that an event has occurred). 
              You could also think of these as "event" messages.
            </para>
          </listitem>
        </itemizedlist>
      </para>
      <para>
        A method call maps very simply to messages: you send a method call
        message, and receive either a method return message or an error message
        in reply.
      </para>
      <para>
        Each message has a <firstterm>header</firstterm>, including <firstterm>fields</firstterm>, 
        and a <firstterm>body</firstterm>, including <firstterm>arguments</firstterm>. You can think 
        of the header as the routing information for the message, and the body as the payload.
        Header fields might include the sender bus name, destination bus name, method or signal name, 
        and so forth. One of the header fields is a <firstterm>type signature</firstterm> describing the 
        values found in the body. For example, the letter "i" means "32-bit integer" so the signature 
        "ii" means the payload has two 32-bit integers.
      </para>
    </sect2>

    <sect2 id="callprocedure">
      <title>Calling a Method - Behind the Scenes</title>

      <para>
        A method call in DBus consists of two messages; a method call message sent from process A to process B, 
        and a matching method reply message sent from process B to process A. Both the call and the reply messages
        are routed through the bus daemon. The caller includes a different serial number in each call message, and the
        reply message includes this number to allow the caller to match replies to calls.
      </para>

      <para>
        The call message will contain any arguments to the method.
        The reply message may indicate an error, or may contain data returned by the method.
      </para>

      <para>
        A method invocation in DBus happens as follows:
        <itemizedlist>
          <listitem>
            <para>
              The language binding may provide a proxy, such that invoking a method on 
              an in-process object invokes a method on a remote object in another process. If so, the 
              application calls a method on the proxy, and the proxy
              constructs a method call message to send to the remote process.
            </para>
          </listitem>
          <listitem>
            <para>
              For more low-level APIs, the application may construct a method call message itself, without
              using a proxy.
            </para>
          </listitem>
          <listitem>
            <para>
              In either case, the method call message contains: a bus name belonging to the remote process; the name of the method; 
              the arguments to the method; an object path inside the remote process; and optionally the name of the 
              interface that specifies the method.
            </para>
          </listitem>
          <listitem>
            <para>
              The method call message is sent to the bus daemon.
            </para>
          </listitem>
          <listitem>
            <para>
              The bus daemon looks at the destination bus name. If a process owns that name, 
              the bus daemon forwards the method call to that process. Otherwise, the bus daemon
              creates an error message and sends it back as the reply to the method call message.
            </para>
          </listitem>
          <listitem>
            <para>
              The receiving process unpacks the method call message. In a simple low-level API situation, it 
              may immediately run the method and send a method reply message to the bus daemon.
              When using a high-level binding API, the binding might examine the object path, interface,
              and method name, and convert the method call message into an invocation of a method on 
              a native object (GObject, java.lang.Object, QObject, etc.), then convert the return 
              value from the native method into a method reply message.
            </para>
          </listitem>
          <listitem>
            <para>
              The bus daemon receives the method reply message and sends it to the process that 
              made the method call.
            </para>
          </listitem>
          <listitem>
            <para>
              The process that made the method call looks at the method reply and makes use of any 
              return values included in the reply. The reply may also indicate that an error occurred.
              When using a binding, the method reply message may be converted into the return value of 
              of a proxy method, or into an exception.
            </para>
          </listitem>
        </itemizedlist>
      </para>

      <para>
        The bus daemon never reorders messages. That is, if you send two method call messages to the same recipient, 
        they will be received in the order they were sent. The recipient is not required to reply to the calls
        in order, however; for example, it may process each method call in a separate thread, and return reply messages
        in an undefined order depending on when the threads complete. Method calls have a unique serial 
        number used by the method caller to match reply messages to call messages.
      </para>

    </sect2>

    <sect2 id="signalprocedure">
      <title>Emitting a Signal - Behind the Scenes</title>

      <para>
        A signal in DBus consists of a single message, sent by one process to any number of other processes. 
        That is, a signal is a unidirectional broadcast. The signal may contain arguments (a data payload), but 
        because it is a broadcast, it never has a "return value." Contrast this with a method call 
        (see <xref linkend="callprocedure"/>) where the method call message has a matching method reply message.
      </para>

      <para>
        The emitter (aka sender) of a signal has no knowledge of the signal recipients. Recipients register
        with the bus daemon to receive signals based on "match rules" - these rules would typically include the sender and 
        the signal name. The bus daemon sends each signal only to recipients who have expressed interest in that 
        signal.
      </para>

      <para>
        A signal in DBus happens as follows:
        <itemizedlist>
          <listitem>
            <para>
              A signal message is created and sent to the bus daemon. When using the low-level API this may be 
              done manually, with certain bindings it may be done for you by the binding when a native object
              emits a native signal or event.
            </para>
          </listitem>
          <listitem>
            <para>
              The signal message contains the name of the interface that specifies the signal;
              the name of the signal; the bus name of the process sending the signal; and 
              any arguments 
            </para>
          </listitem>
          <listitem>
            <para>
              Any process on the message bus can register "match rules" indicating which signals it 
              is interested in. The bus has a list of registered match rules.
            </para>
          </listitem>
          <listitem>
            <para>
              The bus daemon examines the signal and determines which processes are interested in it.
              It sends the signal message to these processes.
            </para>
          </listitem>
          <listitem>
            <para>
              Each process receiving the signal decides what to do with it; if using a binding, 
              the binding may choose to emit a native signal on a proxy object. If using the 
              low-level API, the process may just look at the signal sender and name and decide
              what to do based on that.
            </para>
          </listitem>
        </itemizedlist>
      </para>

    </sect2>

    <sect2 id="introspection">
      <title>Introspection</title>

      <para>
        D-Bus objects may support the interface <literal>org.freedesktop.DBus.Introspectable</literal>.
        This interface has one method <literal>Introspect</literal> which takes no arguments and returns
        an XML string. The XML string describes the interfaces, methods, and signals of the object.
        See the D-Bus specification for more details on this introspection format.
      </para>

    </sect2>

  </sect1>

  <sect1 id="glib-client">
    <title>GLib APIs</title>
    <para>
      The recommended GLib API for D-Bus is GDBus, which has been
      distributed with GLib since version 2.26. It is not documented here.
      See <ulink url="https://developer.gnome.org/gio/stable/gdbus-convenience.html">the
        GLib documentation</ulink> for details of how to use GDBus.
    </para>

    <para>
      An older API, dbus-glib, also exists. It is deprecated and should
      not be used in new code. Whenever possible, porting existing code
      from dbus-glib to GDBus is also recommended.
    </para>
  </sect1>

  <sect1 id="python-client">
    <title>Python API</title>
    <para>
      The Python API, dbus-python, is now documented separately in
      <ulink url="http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html">the dbus-python tutorial</ulink> (also available in doc/tutorial.txt,
      and doc/tutorial.html if built with python-docutils, in the dbus-python
      source distribution).
    </para>
  </sect1>

  <sect1 id="qt-client">
    <title>Qt API</title>
    <para>
      The Qt binding for libdbus, QtDBus, has been distributed with Qt
      since version 4.2. It is not documented here. See
      <ulink url="http://qt-project.org/doc/qt-5/qtdbus-index.html">the Qt
        documentation</ulink> for details of how to use QtDBus.
    </para>
  </sect1>
</article>
