1 <?xml version="1.0" standalone="no"?>
2 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
9 <title>D-Bus Specification</title>
10 <releaseinfo>Version 0.11</releaseinfo>
11 <date>6 February 2005</date>
14 <firstname>Havoc</firstname>
15 <surname>Pennington</surname>
17 <orgname>Red Hat, Inc.</orgname>
19 <email>hp@pobox.com</email>
24 <firstname>Anders</firstname>
25 <surname>Carlsson</surname>
27 <orgname>CodeFactory AB</orgname>
29 <email>andersca@codefactory.se</email>
34 <firstname>Alexander</firstname>
35 <surname>Larsson</surname>
37 <orgname>Red Hat, Inc.</orgname>
39 <email>alexl@redhat.com</email>
46 <sect1 id="introduction">
47 <title>Introduction</title>
49 D-Bus is a system for low-latency, low-overhead, easy to use
50 interprocess communication (IPC). In more detail:
54 D-Bus is <emphasis>low-latency</emphasis> because it is designed
55 to avoid round trips and allow asynchronous operation, much like
61 D-Bus is <emphasis>low-overhead</emphasis> because it uses a
62 binary protocol, and does not have to convert to and from a text
63 format such as XML. Because D-Bus is intended for potentially
64 high-resolution same-machine IPC, not primarily for Internet IPC,
65 this is an interesting optimization.
70 D-Bus is <emphasis>easy to use</emphasis> because it works in terms
71 of <firstterm>messages</firstterm> rather than byte streams, and
72 automatically handles a lot of the hard IPC issues. Also, the D-Bus
73 library is designed to be wrapped in a way that lets developers use
74 their framework's existing object/type system, rather than learning
75 a new one specifically for IPC.
82 The base D-Bus protocol is a one-to-one (peer-to-peer or client-server)
83 protocol, specified in <xref linkend="message-protocol"/>. That is, it is
84 a system for one application to talk to a single other
85 application. However, the primary intended application of the protocol is the
86 D-Bus <firstterm>message bus</firstterm>, specified in <xref
87 linkend="message-bus"/>. The message bus is a special application that
88 accepts connections from multiple other applications, and forwards
93 Uses of D-Bus include notification of system changes (notification of when
94 a camera is plugged in to a computer, or a new version of some software
95 has been installed), or desktop interoperability, for example a file
96 monitoring service or a configuration service.
100 D-Bus is designed for two specific use cases:
104 A "system bus" for notifications from the system to user sessions,
105 and to allow the system to request input from user sessions.
110 A "session bus" used to implement desktop environments such as
115 D-Bus is not intended to be a generic IPC system for any possible
116 application, and intentionally omits many features found in other
117 IPC systems for this reason. D-Bus may turn out to be useful
118 in unanticipated applications, but future versions of this
119 spec and the reference implementation probably will not
120 incorporate features that interfere with the core use cases.
124 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
125 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
126 document are to be interpreted as described in RFC 2119. However, the
127 document could use a serious audit to be sure it makes sense to do
128 so. Also, they are not capitalized.
133 <sect1 id="message-protocol">
134 <title>Message Protocol</title>
137 A <firstterm>message</firstterm> consists of a
138 <firstterm>header</firstterm> and a <firstterm>body</firstterm>. If you
139 think of a message as a package, the header is the address, and the body
140 contains the package contents. The message delivery system uses the header
141 information to figure out where to send the message and how to interpret
142 it; the recipient interprets the body of the message.
146 The body of the message is made up of zero or more
147 <firstterm>arguments</firstterm>, which are typed values, such as an
148 integer or a byte array.
152 Both header and body use the same type system and format for
153 serializing data. Each type of value has a wire format.
154 Converting a value from some other representation into the wire
155 format is called <firstterm>marshaling</firstterm> and converting
156 it back from the wire format is <firstterm>unmarshaling</firstterm>.
159 <sect2 id="message-protocol-signatures">
160 <title>Type Signatures</title>
163 The D-Bus protocol does not include type tags in the marshaled data; a
164 block of marshaled values must have a known <firstterm>type
165 signature</firstterm>. The type signature is made up of <firstterm>type
166 codes</firstterm>. A type code is an ASCII character representing the
167 type of a value. Because ASCII characters are used, the type signature
168 will always form a valid ASCII string. A simple string compare
169 determines whether two type signatures are equivalent.
173 As a simple example, the type code for 32-bit integer (<literal>INT32</literal>) is
174 the ASCII character 'i'. So the signature for a block of values
175 containing a single <literal>INT32</literal> would be:
179 A block of values containing two <literal>INT32</literal> would have this signature:
186 All <firstterm>basic</firstterm> types work like
187 <literal>INT32</literal> in this example. To marshal and unmarshal
188 basic types, you simply read one value from the data
189 block corresponding to each type code in the signature.
190 In addition to basic types, there are four <firstterm>container</firstterm>
191 types: <literal>STRUCT</literal>, <literal>ARRAY</literal>, <literal>VARIANT</literal>,
192 and <literal>DICT_ENTRY</literal>.
196 <literal>STRUCT</literal> has a type code, ASCII character 'r', but this type
197 code does not appear in signatures. Instead, ASCII characters
198 '(' and ')' are used to mark the beginning and end of the struct.
199 So for example, a struct containing two integers would have this
204 Structs can be nested, so for example a struct containing
205 an integer and another struct:
209 The value block storing that struct would contain three integers; the
210 type signature allows you to distinguish "(i(ii))" from "((ii)i)" or
215 The <literal>STRUCT</literal> type code 'r' is not currently used in the D-Bus protocol,
216 but is useful in code that implements the protocol. This type code
217 is specified to allow such code to interoperate in non-protocol contexts.
221 <literal>ARRAY</literal> has ASCII character 'a' as type code. The array type code must be
222 followed by a <firstterm>single complete type</firstterm>. The single
223 complete type following the array is the type of each array element. So
224 the simple example is:
228 which is an array of 32-bit integers. But an array can be of any type,
229 such as this array-of-struct-with-two-int32-fields:
233 Or this array of array of integer:
240 The phrase <firstterm>single complete type</firstterm> deserves some
241 definition. A single complete type is a basic type code, a variant type code,
242 an array with its element type, or a struct with its fields.
243 So the following signatures are not single complete types:
253 And the following signatures contain multiple complete types:
263 Note however that a single complete type may <emphasis>contain</emphasis>
264 multiple other single complete types.
268 <literal>VARIANT</literal> has ASCII character 'v' as its type code. A marshaled value of
269 type <literal>VARIANT</literal> will have the signature of a single complete type as part
270 of the <emphasis>value</emphasis>. This signature will be followed by a
271 marshaled value of that type.
275 A <literal>DICT_ENTRY</literal> works exactly like a struct, but rather
276 than parentheses it uses curly braces, and it has more restrictions.
277 The restrictions are: it occurs only as an array element type; it has
278 exactly two single complete types inside the curly braces; the first
279 single complete type (the "key") must be a basic type rather than a
280 container type. Implementations must not accept dict entries outside of
281 arrays, must not accept dict entries with zero, one, or more than two
282 fields, and must not accept dict entries with non-basic-typed keys. A
283 dict entry is always a key-value pair.
287 The first field in the <literal>DICT_ENTRY</literal> is always the key.
288 A message is considered corrupt if the same key occurs twice in the same
289 array of <literal>DICT_ENTRY</literal>. However, for performance reasons
290 implementations are not required to reject dicts with duplicate keys.
294 In most languages, an array of dict entry would be represented as a
295 map, hash table, or dict object.
299 The following table summarizes the D-Bus types.
304 <entry>Conventional Name</entry>
306 <entry>Description</entry>
311 <entry><literal>INVALID</literal></entry>
312 <entry>0 (ASCII NUL)</entry>
313 <entry>Not a valid type code, used to terminate signatures</entry>
315 <entry><literal>BYTE</literal></entry>
316 <entry>121 (ASCII 'y')</entry>
317 <entry>8-bit unsigned integer</entry>
319 <entry><literal>BOOLEAN</literal></entry>
320 <entry>98 (ASCII 'b')</entry>
321 <entry>Boolean value, 0 is <literal>FALSE</literal> and 1 is <literal>TRUE</literal>. Everything else is invalid.</entry>
323 <entry><literal>INT16</literal></entry>
324 <entry>110 (ASCII 'n')</entry>
325 <entry>16-bit signed integer</entry>
327 <entry><literal>UINT16</literal></entry>
328 <entry>113 (ASCII 'q')</entry>
329 <entry>16-bit unsigned integer</entry>
331 <entry><literal>INT32</literal></entry>
332 <entry>105 (ASCII 'i')</entry>
333 <entry>32-bit signed integer</entry>
335 <entry><literal>UINT32</literal></entry>
336 <entry>117 (ASCII 'u')</entry>
337 <entry>32-bit unsigned integer</entry>
339 <entry><literal>INT64</literal></entry>
340 <entry>120 (ASCII 'x')</entry>
341 <entry>64-bit signed integer</entry>
343 <entry><literal>UINT64</literal></entry>
344 <entry>116 (ASCII 't')</entry>
345 <entry>64-bit unsigned integer</entry>
347 <entry><literal>DOUBLE</literal></entry>
348 <entry>100 (ASCII 'd')</entry>
349 <entry>IEEE 754 double</entry>
351 <entry><literal>STRING</literal></entry>
352 <entry>115 (ASCII 's')</entry>
353 <entry>UTF-8 string (<emphasis>must</emphasis> be valid UTF-8). Must be nul terminated.</entry>
355 <entry><literal>OBJECT_PATH</literal></entry>
356 <entry>111 (ASCII 'o')</entry>
357 <entry>Name of an object instance</entry>
359 <entry><literal>SIGNATURE</literal></entry>
360 <entry>103 (ASCII 'g')</entry>
361 <entry>A type signature</entry>
363 <entry><literal>ARRAY</literal></entry>
364 <entry>97 (ASCII 'a')</entry>
367 <entry><literal>STRUCT</literal></entry>
368 <entry>114 (ASCII 'r'), 40 (ASCII '('), 41 (ASCII ')')</entry>
369 <entry>Struct</entry>
371 <entry><literal>VARIANT</literal></entry>
372 <entry>118 (ASCII 'v') </entry>
373 <entry>Variant type (the type of the value is part of the value itself)</entry>
375 <entry><literal>DICT_ENTRY</literal></entry>
376 <entry>101 (ASCII 'e'), 123 (ASCII '{'), 125 (ASCII '}') </entry>
377 <entry>Entry in a dict or map (array of key-value pairs)</entry>
386 <sect2 id="message-protocol-marshaling">
387 <title>Marshaling (Wire Format)</title>
390 Given a type signature, a block of bytes can be converted into typed
391 values. This section describes the format of the block of bytes. Byte
392 order and alignment issues are handled uniformly for all D-Bus types.
396 A block of bytes has an associated byte order. The byte order
397 has to be discovered in some way; for D-Bus messages, the
398 byte order is part of the message header as described in
399 <xref linkend="message-protocol-messages"/>. For now, assume
400 that the byte order is known to be either little endian or big
405 Each value in a block of bytes is aligned "naturally," for example
406 4-byte values are aligned to a 4-byte boundary, and 8-byte values to an
407 8-byte boundary. To properly align a value, <firstterm>alignment
408 padding</firstterm> may be necessary. The alignment padding must always
409 be the minimum required padding to properly align the following value;
410 and it must always be made up of nul bytes. The alignment padding must
411 not be left uninitialized (it can't contain garbage), and more padding
412 than required must not be used.
416 Given all this, the types are marshaled on the wire as follows:
421 <entry>Conventional Name</entry>
422 <entry>Encoding</entry>
423 <entry>Alignment</entry>
428 <entry><literal>INVALID</literal></entry>
429 <entry>Not applicable; cannot be marshaled.</entry>
432 <entry><literal>BYTE</literal></entry>
433 <entry>A single 8-bit byte.</entry>
436 <entry><literal>BOOLEAN</literal></entry>
437 <entry>As for <literal>UINT32</literal>, but only 0 and 1 are valid values.</entry>
440 <entry><literal>INT16</literal></entry>
441 <entry>16-bit signed integer in the message's byte order.</entry>
444 <entry><literal>UINT16</literal></entry>
445 <entry>16-bit unsigned integer in the message's byte order.</entry>
448 <entry><literal>INT32</literal></entry>
449 <entry>32-bit signed integer in the message's byte order.</entry>
452 <entry><literal>UINT32</literal></entry>
453 <entry>32-bit unsigned integer in the message's byte order.</entry>
456 <entry><literal>INT64</literal></entry>
457 <entry>64-bit signed integer in the message's byte order.</entry>
460 <entry><literal>UINT64</literal></entry>
461 <entry>64-bit unsigned integer in the message's byte order.</entry>
464 <entry><literal>DOUBLE</literal></entry>
465 <entry>64-bit IEEE 754 double in the message's byte order.</entry>
468 <entry><literal>STRING</literal></entry>
469 <entry>A <literal>UINT32</literal> indicating the string's
470 length in bytes excluding its terminating nul, followed by
471 string data of the given length, followed by a terminating nul
478 <entry><literal>OBJECT_PATH</literal></entry>
479 <entry>Exactly the same as <literal>STRING</literal> except the
480 content must be a valid object path (see below).
486 <entry><literal>SIGNATURE</literal></entry>
487 <entry>The same as <literal>STRING</literal> except the length is a single
488 byte (thus signatures have a maximum length of 255)
489 and the content must be a valid signature (see below).
495 <entry><literal>ARRAY</literal></entry>
497 A <literal>UINT32</literal> giving the length of the array data in bytes, followed by
498 alignment padding to the alignment boundary of the array element type,
499 followed by each array element. The array length is from the
500 end of the alignment padding to the end of the last element,
501 i.e. it does not include the padding after the length,
502 or any padding after the last element.
503 Arrays have a maximum length defined to be 2 to the 26th power or
504 67108864. Implementations must not send or accept arrays exceeding this
511 <entry><literal>STRUCT</literal></entry>
513 A struct must start on an 8-byte boundary regardless of the
514 type of the struct fields. The struct value consists of each
515 field marshaled in sequence starting from that 8-byte
522 <entry><literal>VARIANT</literal></entry>
524 A variant type has a marshaled <literal>SIGNATURE</literal>
525 followed by a marshaled value with the type
526 given in the signature.
527 Unlike a message signature, the variant signature
528 can contain only a single complete type.
529 So "i" is OK, "ii" is not.
532 1 (alignment of the signature)
535 <entry><literal>DICT_ENTRY</literal></entry>
548 <sect3 id="message-protocol-marshaling-object-path">
549 <title>Valid Object Paths</title>
552 An object path is a name used to refer to an object instance.
553 Conceptually, each participant in a D-Bus message exchange may have
554 any number of object instances (think of C++ or Java objects) and each
555 such instance will have a path. Like a filesystem, the object
556 instances in an application form a hierarchical tree.
560 The following rules define a valid object path. Implementations must
561 not send or accept messages with invalid object paths.
565 The path may be of any length.
570 The path must begin with an ASCII '/' (integer 47) character,
571 and must consist of elements separated by slash characters.
576 Each element must only contain the ASCII characters
582 No element may be the empty string.
587 Multiple '/' characters cannot occur in sequence.
592 A trailing '/' character is not allowed unless the
593 path is the root path (a single '/' character).
602 <sect3 id="message-protocol-marshaling-signature">
603 <title>Valid Signatures</title>
605 An implementation must not send or accept invalid signatures.
606 Valid signatures will conform to the following rules:
610 The signature ends with a nul byte.
615 The signature is a list of single complete types.
616 Arrays must have element types, and structs must
617 have both open and close parentheses.
622 Only type codes and open and close parentheses are
623 allowed in the signature. The <literal>STRUCT</literal> type code
624 is not allowed in signatures, because parentheses
630 The maximum depth of container type nesting is 32 array type
631 codes and 32 open parentheses. This implies that the maximum
632 total depth of recursion is 64, for an "array of array of array
633 of ... struct of struct of struct of ..." where there are 32
639 The maximum length of a signature is 255.
644 Signatures must be nul-terminated.
653 <sect2 id="message-protocol-messages">
654 <title>Message Format</title>
657 A message consists of a header and a body. The header is a block of
658 values with a fixed signature and meaning. The body is a separate block
659 of values, with a signature specified in the header.
663 The length of the header must be a multiple of 8, allowing the body to
664 begin on an 8-byte boundary when storing the entire message in a single
665 buffer. If the header does not naturally end on an 8-byte boundary
666 up to 7 bytes of nul-initialized alignment padding must be added.
670 The message body need not end on an 8-byte boundary.
674 The maximum length of a message, including header, header alignment padding,
675 and body is 2 to the 27th power or 134217728. Implementations must not
676 send or accept messages exceeding this size.
680 The signature of the header is:
684 Written out more readably, this is:
686 BYTE, BYTE, BYTE, BYTE, UINT32, UINT32, ARRAY of STRUCT of (BYTE,VARIANT)
691 These values have the following meanings:
697 <entry>Description</entry>
702 <entry>1st <literal>BYTE</literal></entry>
703 <entry>Endianness flag; ASCII 'l' for little-endian
704 or ASCII 'B' for big-endian. Both header and body are
705 in this endianness.</entry>
708 <entry>2nd <literal>BYTE</literal></entry>
709 <entry><firstterm>Message type</firstterm>. Unknown types must be ignored.
710 Currently-defined types are described below.
714 <entry>3rd <literal>BYTE</literal></entry>
715 <entry>Bitwise OR of flags. Unknown flags
716 must be ignored. Currently-defined flags are described below.
720 <entry>4th <literal>BYTE</literal></entry>
721 <entry>Major protocol version of the sending application. If
722 the major protocol version of the receiving application does not
723 match, the applications will not be able to communicate and the
724 D-Bus connection must be disconnected. The major protocol
725 version for this version of the specification is 0.
726 FIXME this field is stupid and pointless to put in
731 <entry>1st <literal>UINT32</literal></entry>
732 <entry>Length in bytes of the message body, starting
733 from the end of the header. The header ends after
734 its alignment padding to an 8-boundary.
738 <entry>2nd <literal>UINT32</literal></entry>
739 <entry>The serial of this message, used as a cookie
740 by the sender to identify the reply corresponding
745 <entry><literal>ARRAY</literal> of <literal>STRUCT</literal> of (<literal>BYTE</literal>,<literal>VARIANT</literal>)</entry>
746 <entry>An array of zero or more <firstterm>header
747 fields</firstterm> where the byte is the field code, and the
748 variant is the field value. The message type determines
749 which fields are required.
757 <firstterm>Message types</firstterm> that can appear in the second byte
763 <entry>Conventional name</entry>
764 <entry>Decimal value</entry>
765 <entry>Description</entry>
770 <entry><literal>INVALID</literal></entry>
772 <entry>This is an invalid type.</entry>
775 <entry><literal>METHOD_CALL</literal></entry>
777 <entry>Method call.</entry>
780 <entry><literal>METHOD_RETURN</literal></entry>
782 <entry>Method reply with returned data.</entry>
785 <entry><literal>ERROR</literal></entry>
787 <entry>Error reply. If the first argument exists and is a
788 string, it is an error message.</entry>
791 <entry><literal>SIGNAL</literal></entry>
793 <entry>Signal emission.</entry>
800 Flags that can appear in the third byte of the header:
805 <entry>Conventional name</entry>
806 <entry>Hex value</entry>
807 <entry>Description</entry>
812 <entry><literal>NO_REPLY_EXPECTED</literal></entry>
814 <entry>This message does not expect method return replies or
815 error replies; the reply can be omitted as an
816 optimization. However, it is compliant with this specification
817 to return the reply despite this flag and the only harm
818 from doing so is extra network traffic.
822 <entry><literal>NO_AUTO_START</literal></entry>
824 <entry>The bus must not launch an owner
825 for the destination name in response to this message.
833 <sect3 id="message-protocol-header-fields">
834 <title>Header Fields</title>
837 The array at the end of the header contains <firstterm>header
838 fields</firstterm>, where each field is a 1-byte field code followed
839 by a field value. A header must contain the required header fields for
840 its message type, and zero or more of any optional header
841 fields. Future versions of this protocol specification may add new
842 fields. Implementations must ignore fields they do not
843 understand. Implementations must not invent their own header fields;
844 only changes to this specification may introduce new header fields.
848 Again, if an implementation sees a header field code that it does not
849 expect, it must ignore that field, as it will be part of a new
850 (but compatible) version of this specification. This also applies
851 to known header fields appearing in unexpected messages, for
852 example: if a signal has a reply serial it must be ignored
853 even though it has no meaning as of this version of the spec.
857 However, implementations must not send or accept known header fields
858 with the wrong type stored in the field value. So for example a
859 message with an <literal>INTERFACE</literal> field of type
860 <literal>UINT32</literal> would be considered corrupt.
864 Here are the currently-defined header fields:
869 <entry>Conventional Name</entry>
870 <entry>Decimal Code</entry>
872 <entry>Required In</entry>
873 <entry>Description</entry>
878 <entry><literal>INVALID</literal></entry>
881 <entry>not allowed</entry>
882 <entry>Not a valid field name (error if it appears in a message)</entry>
885 <entry><literal>PATH</literal></entry>
887 <entry><literal>OBJECT_PATH</literal></entry>
888 <entry><literal>METHOD_CALL</literal>, <literal>SIGNAL</literal></entry>
889 <entry>The object to send a call to,
890 or the object a signal is emitted from.
894 <entry><literal>INTERFACE</literal></entry>
896 <entry><literal>STRING</literal></entry>
897 <entry><literal>SIGNAL</literal></entry>
899 The interface to invoke a method call on, or
900 that a signal is emitted from. Optional for
901 method calls, required for signals.
905 <entry><literal>MEMBER</literal></entry>
907 <entry><literal>STRING</literal></entry>
908 <entry><literal>METHOD_CALL</literal>, <literal>SIGNAL</literal></entry>
909 <entry>The member, either the method name or signal name.</entry>
912 <entry><literal>ERROR_NAME</literal></entry>
914 <entry><literal>STRING</literal></entry>
915 <entry><literal>ERROR</literal></entry>
916 <entry>The name of the error that occurred, for errors</entry>
919 <entry><literal>REPLY_SERIAL</literal></entry>
921 <entry><literal>UINT32</literal></entry>
922 <entry><literal>ERROR</literal>, <literal>METHOD_RETURN</literal></entry>
923 <entry>The serial number of the message this message is a reply
924 to. (The serial number is the second <literal>UINT32</literal> in the header.)</entry>
927 <entry><literal>DESTINATION</literal></entry>
929 <entry><literal>STRING</literal></entry>
930 <entry>optional</entry>
931 <entry>The name of the connection this message is intended for.
932 Only used in combination with the message bus, see
933 <xref linkend="message-bus"/>.</entry>
936 <entry><literal>SENDER</literal></entry>
938 <entry><literal>STRING</literal></entry>
939 <entry>optional</entry>
940 <entry>Unique name of the sending connection.
941 The message bus fills in this field so it is reliable; the field is
942 only meaningful in combination with the message bus.</entry>
945 <entry><literal>SIGNATURE</literal></entry>
947 <entry><literal>SIGNATURE</literal></entry>
948 <entry>optional</entry>
949 <entry>The signature of the message body.
950 If omitted, it is assumed to be the
951 empty signature "" (i.e. the body must be 0-length).</entry>
960 <sect2 id="message-protocol-names">
961 <title>Valid Names</title>
963 The various names in D-Bus messages have some restrictions.
966 There is a <firstterm>maximum name length</firstterm>
967 of 255 which applies to bus names, interfaces, and members.
969 <sect3 id="message-protocol-names-interface">
970 <title>Interface names</title>
972 Interfaces have names with type <literal>STRING</literal>, meaning that
973 they must be valid UTF-8. However, there are also some
974 additional restrictions that apply to interface names
977 <listitem><para>Interface names are composed of 1 or more elements separated by
978 a period ('.') character. All elements must contain at least
982 <listitem><para>Each element must only contain the ASCII characters
983 "[A-Z][a-z][0-9]_" and must not begin with a digit.
987 <listitem><para>Interface names must contain at least one '.' (period)
988 character (and thus at least two elements).
991 <listitem><para>Interface names must not begin with a '.' (period) character.</para></listitem>
992 <listitem><para>Interface names must not exceed the maximum name length.</para></listitem>
996 <sect3 id="message-protocol-names-bus">
997 <title>Bus names</title>
999 Connections have one or more bus names associated with them.
1000 A connection has exactly one bus name that is a unique connection
1001 name. The unique connection name remains with the connection for
1002 its entire lifetime.
1003 A bus name is of type <literal>STRING</literal>,
1004 meaning that it must be valid UTF-8. However, there are also
1005 some additional restrictions that apply to bus names
1008 <listitem><para>Bus names that start with a colon (':')
1009 character are unique connection names.
1012 <listitem><para>Bus names are composed of 1 or more elements separated by
1013 a period ('.') character. All elements must contain at least
1017 <listitem><para>Each element must only contain the ASCII characters
1018 "[A-Z][a-z][0-9]_-". Only elements that are part of a unique
1019 connection name may begin with a digit, elements in
1020 other bus names must not begin with a digit.
1024 <listitem><para>Bus names must contain at least one '.' (period)
1025 character (and thus at least two elements).
1028 <listitem><para>Bus names must not begin with a '.' (period) character.</para></listitem>
1029 <listitem><para>Bus names must not exceed the maximum name length.</para></listitem>
1033 Note that the hyphen ('-') character is allowed in bus names but
1034 not in interface names.
1037 <sect3 id="message-protocol-names-member">
1038 <title>Member names</title>
1040 Member (i.e. method or signal) names:
1042 <listitem><para>Must only contain the ASCII characters
1043 "[A-Z][a-z][0-9]_" and may not begin with a
1044 digit.</para></listitem>
1045 <listitem><para>Must not contain the '.' (period) character.</para></listitem>
1046 <listitem><para>Must not exceed the maximum name length.</para></listitem>
1047 <listitem><para>Must be at least 1 byte in length.</para></listitem>
1051 <sect3 id="message-protocol-names-error">
1052 <title>Error names</title>
1054 Error names have the same restrictions as interface names.
1059 <sect2 id="message-protocol-types">
1060 <title>Message Types</title>
1062 Each of the message types (<literal>METHOD_CALL</literal>, <literal>METHOD_RETURN</literal>, <literal>ERROR</literal>, and
1063 <literal>SIGNAL</literal>) has its own expected usage conventions and header fields.
1064 This section describes these conventions.
1066 <sect3 id="message-protocol-types-method">
1067 <title>Method Calls</title>
1069 Some messages invoke an operation on a remote object. These are
1070 called method call messages and have the type tag <literal>METHOD_CALL</literal>. Such
1071 messages map naturally to methods on objects in a typical program.
1074 A method call message is required to have a <literal>MEMBER</literal> header field
1075 indicating the name of the method. Optionally, the message has an
1076 <literal>INTERFACE</literal> field giving the interface the method is a part of. In the
1077 absence of an <literal>INTERFACE</literal> field, if two interfaces on the same object have
1078 a method with the same name, it is undefined which of the two methods
1079 will be invoked. Implementations may also choose to return an error in
1080 this ambiguous case. However, if a method name is unique
1081 implementations must not require an interface field.
1084 Method call messages also include a <literal>PATH</literal> field
1085 indicating the object to invoke the method on. If the call is passing
1086 through a message bus, the message will also have a
1087 <literal>DESTINATION</literal> field giving the name of the connection
1088 to receive the message.
1091 When an application handles a method call message, it is required to
1092 return a reply. The reply is identified by a <literal>REPLY_SERIAL</literal> header field
1093 indicating the serial number of the <literal>METHOD_CALL</literal> being replied to. The
1094 reply can have one of two types; either <literal>METHOD_RETURN</literal> or <literal>ERROR</literal>.
1097 If the reply has type <literal>METHOD_RETURN</literal>, the arguments to the reply message
1098 are the return value(s) or "out parameters" of the method call.
1099 If the reply has type <literal>ERROR</literal>, then an "exception" has been thrown,
1100 and the call fails; no return value will be provided. It makes
1101 no sense to send multiple replies to the same method call.
1104 Even if a method call has no return values, a <literal>METHOD_RETURN</literal>
1105 reply is required, so the caller will know the method
1106 was successfully processed.
1109 The <literal>METHOD_RETURN</literal> or <literal>ERROR</literal> reply message must have the <literal>REPLY_SERIAL</literal>
1113 If a <literal>METHOD_CALL</literal> message has the flag <literal>NO_REPLY_EXPECTED</literal>,
1114 then as an optimization the application receiving the method
1115 call may choose to omit the reply message (regardless of
1116 whether the reply would have been <literal>METHOD_RETURN</literal> or <literal>ERROR</literal>).
1117 However, it is also acceptable to ignore the <literal>NO_REPLY_EXPECTED</literal>
1118 flag and reply anyway.
1121 Unless a message has the flag <literal>NO_AUTO_START</literal>, if the
1122 destination name does not exist then a program to own the destination
1123 name will be started before the message is delivered. The message
1124 will be held until the new program is successfully started or has
1125 failed to start; in case of failure, an error will be returned. This
1126 flag is only relevant in the context of a message bus, it is ignored
1127 during one-to-one communication with no intermediate bus.
1129 <sect4 id="message-protocol-types-method-apis">
1130 <title>Mapping method calls to native APIs</title>
1132 APIs for D-Bus may map method calls to a method call in a specific
1133 programming language, such as C++, or may map a method call written
1134 in an IDL to a D-Bus message.
1137 In APIs of this nature, arguments to a method are often termed "in"
1138 (which implies sent in the <literal>METHOD_CALL</literal>), or "out" (which implies
1139 returned in the <literal>METHOD_RETURN</literal>). Some APIs such as CORBA also have
1140 "inout" arguments, which are both sent and received, i.e. the caller
1141 passes in a value which is modified. Mapped to D-Bus, an "inout"
1142 argument is equivalent to an "in" argument, followed by an "out"
1143 argument. You can't pass things "by reference" over the wire, so
1144 "inout" is purely an illusion of the in-process API.
1147 Given a method with zero or one return values, followed by zero or more
1148 arguments, where each argument may be "in", "out", or "inout", the
1149 caller constructs a message by appending each "in" or "inout" argument,
1150 in order. "out" arguments are not represented in the caller's message.
1153 The recipient constructs a reply by appending first the return value
1154 if any, then each "out" or "inout" argument, in order.
1155 "in" arguments are not represented in the reply message.
1158 Error replies are normally mapped to exceptions in languages that have
1162 In converting from native APIs to D-Bus, it is perhaps nice to
1163 map D-Bus naming conventions ("FooBar") to native conventions
1164 such as "fooBar" or "foo_bar" automatically. This is OK
1165 as long as you can say that the native API is one that
1166 was specifically written for D-Bus. It makes the most sense
1167 when writing object implementations that will be exported
1168 over the bus. Object proxies used to invoke remote D-Bus
1169 objects probably need the ability to call any D-Bus method,
1170 and thus a magic name mapping like this could be a problem.
1173 This specification doesn't require anything of native API bindings;
1174 the preceding is only a suggested convention for consistency
1180 <sect3 id="message-protocol-types-signal">
1181 <title>Signal Emission</title>
1183 Unlike method calls, signal emissions have no replies.
1184 A signal emission is simply a single message of type <literal>SIGNAL</literal>.
1185 It must have three header fields: <literal>PATH</literal> giving the object
1186 the signal was emitted from, plus <literal>INTERFACE</literal> and <literal>MEMBER</literal> giving
1187 the fully-qualified name of the signal.
1191 <sect3 id="message-protocol-types-errors">
1192 <title>Errors</title>
1194 Messages of type <literal>ERROR</literal> are most commonly replies
1195 to a <literal>METHOD_CALL</literal>, but may be returned in reply
1196 to any kind of message. The message bus for example
1197 will return an <literal>ERROR</literal> in reply to a signal emission if
1198 the bus does not have enough memory to send the signal.
1201 An <literal>ERROR</literal> may have any arguments, but if the first
1202 argument is a <literal>STRING</literal>, it must be an error message.
1203 The error message may be logged or shown to the user
1208 <sect3 id="message-protocol-types-notation">
1209 <title>Notation in this document</title>
1211 This document uses a simple pseudo-IDL to describe particular method
1212 calls and signals. Here is an example of a method call:
1214 org.freedesktop.DBus.StartServiceByName (in STRING name, in UINT32 flags,
1215 out UINT32 resultcode)
1217 This means <literal>INTERFACE</literal> = org.freedesktop.DBus, <literal>MEMBER</literal> = StartServiceByName,
1218 <literal>METHOD_CALL</literal> arguments are <literal>STRING</literal> and <literal>UINT32</literal>, <literal>METHOD_RETURN</literal> argument
1219 is <literal>UINT32</literal>. Remember that the <literal>MEMBER</literal> field can't contain any '.' (period)
1220 characters so it's known that the last part of the name in
1221 the "IDL" is the member name.
1224 In C++ that might end up looking like this:
1226 unsigned int org::freedesktop::DBus::StartServiceByName (const char *name,
1227 unsigned int flags);
1229 or equally valid, the return value could be done as an argument:
1231 void org::freedesktop::DBus::StartServiceByName (const char *name,
1233 unsigned int *resultcode);
1235 It's really up to the API designer how they want to make
1236 this look. You could design an API where the namespace wasn't used
1237 in C++, using STL or Qt, using varargs, or whatever you wanted.
1240 Signals are written as follows:
1242 org.freedesktop.DBus.NameLost (STRING name)
1244 Signals don't specify "in" vs. "out" because only
1245 a single direction is possible.
1248 It isn't especially encouraged to use this lame pseudo-IDL in actual
1249 API implementations; you might use the native notation for the
1250 language you're using, or you might use COM or CORBA IDL, for example.
1255 <sect2 id="message-protocol-handling-invalid">
1256 <title>Invalid Protocol and Spec Extensions</title>
1259 For security reasons, the D-Bus protocol should be strictly parsed and
1260 validated, with the exception of defined extension points. Any invalid
1261 protocol or spec violations should result in immediately dropping the
1262 connection without notice to the other end. Exceptions should be
1263 carefully considered, e.g. an exception may be warranted for a
1264 well-understood idiosyncrasy of a widely-deployed implementation. In
1265 cases where the other end of a connection is 100% trusted and known to
1266 be friendly, skipping validation for performance reasons could also make
1267 sense in certain cases.
1271 Generally speaking violations of the "must" requirements in this spec
1272 should be considered possible attempts to exploit security, and violations
1273 of the "should" suggestions should be considered legitimate (though perhaps
1274 they should generate an error in some cases).
1278 The following extension points are built in to D-Bus on purpose and must
1279 not be treated as invalid protocol. The extension points are intended
1280 for use by future versions of this spec, they are not intended for third
1281 parties. At the moment, the only way a third party could extend D-Bus
1282 without breaking interoperability would be to introduce a way to negotiate new
1283 feature support as part of the auth protocol, using EXTENSION_-prefixed
1284 commands. There is not yet a standard way to negotiate features.
1288 In the authentication protocol (see <xref linkend="auth-protocol"/>) unknown
1289 commands result in an ERROR rather than a disconnect. This enables
1290 future extensions to the protocol. Commands starting with EXTENSION_ are
1291 reserved for third parties.
1296 The authentication protocol supports pluggable auth mechanisms.
1301 The address format (see <xref linkend="addresses"/>) supports new
1307 Messages with an unknown type (something other than
1308 <literal>METHOD_CALL</literal>, <literal>METHOD_RETURN</literal>,
1309 <literal>ERROR</literal>, <literal>SIGNAL</literal>) are ignored.
1310 Unknown-type messages must still be well-formed in the same way
1311 as the known messages, however. They still have the normal
1317 Header fields with an unknown or unexpected field code must be ignored,
1318 though again they must still be well-formed.
1323 New standard interfaces (with new methods and signals) can of course be added.
1333 <sect1 id="auth-protocol">
1334 <title>Authentication Protocol</title>
1336 Before the flow of messages begins, two applications must
1337 authenticate. A simple plain-text protocol is used for
1338 authentication; this protocol is a SASL profile, and maps fairly
1339 directly from the SASL specification. The message encoding is
1340 NOT used here, only plain text messages.
1343 In examples, "C:" and "S:" indicate lines sent by the client and
1344 server respectively.
1346 <sect2 id="auth-protocol-overview">
1347 <title>Protocol Overview</title>
1349 The protocol is a line-based protocol, where each line ends with
1350 \r\n. Each line begins with an all-caps ASCII command name containing
1351 only the character range [A-Z_], a space, then any arguments for the
1352 command, then the \r\n ending the line. The protocol is
1353 case-sensitive. All bytes must be in the ASCII character set.
1355 Commands from the client to the server are as follows:
1358 <listitem><para>AUTH [mechanism] [initial-response]</para></listitem>
1359 <listitem><para>CANCEL</para></listitem>
1360 <listitem><para>BEGIN</para></listitem>
1361 <listitem><para>DATA <data in hex encoding></para></listitem>
1362 <listitem><para>ERROR [human-readable error explanation]</para></listitem>
1365 From server to client are as follows:
1368 <listitem><para>REJECTED <space-separated list of mechanism names></para></listitem>
1369 <listitem><para>OK <GUID in hex></para></listitem>
1370 <listitem><para>DATA <data in hex encoding></para></listitem>
1371 <listitem><para>ERROR</para></listitem>
1375 Unofficial extensions to the command set must begin with the letters
1376 "EXTENSION_", to avoid conflicts with future official commands.
1377 For example, "EXTENSION_COM_MYDOMAIN_DO_STUFF".
1380 <sect2 id="auth-nul-byte">
1381 <title>Special credentials-passing nul byte</title>
1383 Immediately after connecting to the server, the client must send a
1384 single nul byte. This byte may be accompanied by credentials
1385 information on some operating systems that use sendmsg() with
1386 SCM_CREDS or SCM_CREDENTIALS to pass credentials over UNIX domain
1387 sockets. However, the nul byte must be sent even on other kinds of
1388 socket, and even on operating systems that do not require a byte to be
1389 sent in order to transmit credentials. The text protocol described in
1390 this document begins after the single nul byte. If the first byte
1391 received from the client is not a nul byte, the server may disconnect
1395 A nul byte in any context other than the initial byte is an error;
1396 the protocol is ASCII-only.
1399 The credentials sent along with the nul byte may be used with the
1400 SASL mechanism EXTERNAL.
1403 <sect2 id="auth-command-auth">
1404 <title>AUTH command</title>
1406 If an AUTH command has no arguments, it is a request to list
1407 available mechanisms. The server must respond with a REJECTED
1408 command listing the mechanisms it understands, or with an error.
1411 If an AUTH command specifies a mechanism, and the server supports
1412 said mechanism, the server should begin exchanging SASL
1413 challenge-response data with the client using DATA commands.
1416 If the server does not support the mechanism given in the AUTH
1417 command, it must send either a REJECTED command listing the mechanisms
1418 it does support, or an error.
1421 If the [initial-response] argument is provided, it is intended for use
1422 with mechanisms that have no initial challenge (or an empty initial
1423 challenge), as if it were the argument to an initial DATA command. If
1424 the selected mechanism has an initial challenge and [initial-response]
1425 was provided, the server should reject authentication by sending
1429 If authentication succeeds after exchanging DATA commands,
1430 an OK command must be sent to the client.
1433 The first octet received by the client after the \r\n of the OK
1434 command must be the first octet of the authenticated/encrypted
1435 stream of D-Bus messages.
1438 The first octet received by the server after the \r\n of the BEGIN
1439 command from the client must be the first octet of the
1440 authenticated/encrypted stream of D-Bus messages.
1443 <sect2 id="auth-command-cancel">
1444 <title>CANCEL Command</title>
1446 At any time up to sending the BEGIN command, the client may send a
1447 CANCEL command. On receiving the CANCEL command, the server must
1448 send a REJECTED command and abort the current authentication
1452 <sect2 id="auth-command-data">
1453 <title>DATA Command</title>
1455 The DATA command may come from either client or server, and simply
1456 contains a hex-encoded block of data to be interpreted
1457 according to the SASL mechanism in use.
1460 Some SASL mechanisms support sending an "empty string";
1461 FIXME we need some way to do this.
1464 <sect2 id="auth-command-begin">
1465 <title>BEGIN Command</title>
1467 The BEGIN command acknowledges that the client has received an
1468 OK command from the server, and that the stream of messages
1472 The first octet received by the server after the \r\n of the BEGIN
1473 command from the client must be the first octet of the
1474 authenticated/encrypted stream of D-Bus messages.
1477 <sect2 id="auth-command-rejected">
1478 <title>REJECTED Command</title>
1480 The REJECTED command indicates that the current authentication
1481 exchange has failed, and further exchange of DATA is inappropriate.
1482 The client would normally try another mechanism, or try providing
1483 different responses to challenges.
1485 Optionally, the REJECTED command has a space-separated list of
1486 available auth mechanisms as arguments. If a server ever provides
1487 a list of supported mechanisms, it must provide the same list
1488 each time it sends a REJECTED message. Clients are free to
1489 ignore all lists received after the first.
1492 <sect2 id="auth-command-ok">
1493 <title>OK Command</title>
1495 The OK command indicates that the client has been authenticated,
1496 and that further communication will be a stream of D-Bus messages
1497 (optionally encrypted, as negotiated) rather than this protocol.
1500 The first octet received by the client after the \r\n of the OK
1501 command must be the first octet of the authenticated/encrypted
1502 stream of D-Bus messages.
1505 The client must respond to the OK command by sending a BEGIN
1506 command, followed by its stream of messages, or by disconnecting.
1507 The server must not accept additional commands using this protocol
1508 after the OK command has been sent.
1511 The OK command has one argument, which is the GUID of the server.
1512 See <xref linkend="addresses"/> for more on server GUIDs.
1515 <sect2 id="auth-command-error">
1516 <title>ERROR Command</title>
1518 The ERROR command indicates that either server or client did not
1519 know a command, does not accept the given command in the current
1520 context, or did not understand the arguments to the command. This
1521 allows the protocol to be extended; a client or server can send a
1522 command present or permitted only in new protocol versions, and if
1523 an ERROR is received instead of an appropriate response, fall back
1524 to using some other technique.
1527 If an ERROR is sent, the server or client that sent the
1528 error must continue as if the command causing the ERROR had never been
1529 received. However, the the server or client receiving the error
1530 should try something other than whatever caused the error;
1531 if only canceling/rejecting the authentication.
1534 If the D-Bus protocol changes incompatibly at some future time,
1535 applications implementing the new protocol would probably be able to
1536 check for support of the new protocol by sending a new command and
1537 receiving an ERROR from applications that don't understand it. Thus the
1538 ERROR feature of the auth protocol is an escape hatch that lets us
1539 negotiate extensions or changes to the D-Bus protocol in the future.
1542 <sect2 id="auth-examples">
1543 <title>Authentication examples</title>
1547 <title>Example of successful magic cookie authentication</title>
1549 (MAGIC_COOKIE is a made up mechanism)
1551 C: AUTH MAGIC_COOKIE 3138363935333137393635383634
1557 <title>Example of finding out mechanisms then picking one</title>
1560 S: REJECTED KERBEROS_V4 SKEY
1561 C: AUTH SKEY 7ab83f32ee
1562 S: DATA 8799cabb2ea93e
1563 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1569 <title>Example of client sends unknown command then falls back to regular auth</title>
1573 C: AUTH MAGIC_COOKIE 3736343435313230333039
1579 <title>Example of server doesn't support initial auth mechanism</title>
1581 C: AUTH MAGIC_COOKIE 3736343435313230333039
1582 S: REJECTED KERBEROS_V4 SKEY
1583 C: AUTH SKEY 7ab83f32ee
1584 S: DATA 8799cabb2ea93e
1585 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1591 <title>Example of wrong password or the like followed by successful retry</title>
1593 C: AUTH MAGIC_COOKIE 3736343435313230333039
1594 S: REJECTED KERBEROS_V4 SKEY
1595 C: AUTH SKEY 7ab83f32ee
1596 S: DATA 8799cabb2ea93e
1597 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1599 C: AUTH SKEY 7ab83f32ee
1600 S: DATA 8799cabb2ea93e
1601 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1607 <title>Example of skey cancelled and restarted</title>
1609 C: AUTH MAGIC_COOKIE 3736343435313230333039
1610 S: REJECTED KERBEROS_V4 SKEY
1611 C: AUTH SKEY 7ab83f32ee
1612 S: DATA 8799cabb2ea93e
1615 C: AUTH SKEY 7ab83f32ee
1616 S: DATA 8799cabb2ea93e
1617 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1624 <sect2 id="auth-states">
1625 <title>Authentication state diagrams</title>
1628 This section documents the auth protocol in terms of
1629 a state machine for the client and the server. This is
1630 probably the most robust way to implement the protocol.
1633 <sect3 id="auth-states-client">
1634 <title>Client states</title>
1637 To more precisely describe the interaction between the
1638 protocol state machine and the authentication mechanisms the
1639 following notation is used: MECH(CHALL) means that the
1640 server challenge CHALL was fed to the mechanism MECH, which
1646 CONTINUE(RESP) means continue the auth conversation
1647 and send RESP as the response to the server;
1653 OK(RESP) means that after sending RESP to the server
1654 the client side of the auth conversation is finished
1655 and the server should return "OK";
1661 ERROR means that CHALL was invalid and could not be
1667 Both RESP and CHALL may be empty.
1671 The Client starts by getting an initial response from the
1672 default mechanism and sends AUTH MECH RESP, or AUTH MECH if
1673 the mechanism did not provide an initial response. If the
1674 mechanism returns CONTINUE, the client starts in state
1675 <emphasis>WaitingForData</emphasis>, if the mechanism
1676 returns OK the client starts in state
1677 <emphasis>WaitingForOK</emphasis>.
1681 The client should keep track of available mechanisms and
1682 which it mechanisms it has already attempted. This list is
1683 used to decide which AUTH command to send. When the list is
1684 exhausted, the client should give up and close the
1689 <title><emphasis>WaitingForData</emphasis></title>
1697 MECH(CHALL) returns CONTINUE(RESP) → send
1699 <emphasis>WaitingForData</emphasis>
1703 MECH(CHALL) returns OK(RESP) → send DATA
1704 RESP, goto <emphasis>WaitingForOK</emphasis>
1708 MECH(CHALL) returns ERROR → send ERROR
1709 [msg], goto <emphasis>WaitingForData</emphasis>
1717 Receive REJECTED [mechs] →
1718 send AUTH [next mech], goto
1719 WaitingForData or <emphasis>WaitingForOK</emphasis>
1724 Receive ERROR → send
1726 <emphasis>WaitingForReject</emphasis>
1731 Receive OK → send
1732 BEGIN, terminate auth
1733 conversation, authenticated
1738 Receive anything else → send
1740 <emphasis>WaitingForData</emphasis>
1748 <title><emphasis>WaitingForOK</emphasis></title>
1753 Receive OK → send BEGIN, terminate auth
1754 conversation, <emphasis>authenticated</emphasis>
1759 Receive REJECT [mechs] → send AUTH [next mech],
1760 goto <emphasis>WaitingForData</emphasis> or
1761 <emphasis>WaitingForOK</emphasis>
1767 Receive DATA → send CANCEL, goto
1768 <emphasis>WaitingForReject</emphasis>
1774 Receive ERROR → send CANCEL, goto
1775 <emphasis>WaitingForReject</emphasis>
1781 Receive anything else → send ERROR, goto
1782 <emphasis>WaitingForOK</emphasis>
1790 <title><emphasis>WaitingForReject</emphasis></title>
1795 Receive REJECT [mechs] → send AUTH [next mech],
1796 goto <emphasis>WaitingForData</emphasis> or
1797 <emphasis>WaitingForOK</emphasis>
1803 Receive anything else → terminate auth
1804 conversation, disconnect
1813 <sect3 id="auth-states-server">
1814 <title>Server states</title>
1817 For the server MECH(RESP) means that the client response
1818 RESP was fed to the the mechanism MECH, which returns one of
1823 CONTINUE(CHALL) means continue the auth conversation and
1824 send CHALL as the challenge to the client;
1830 OK means that the client has been successfully
1837 REJECT means that the client failed to authenticate or
1838 there was an error in RESP.
1843 The server starts out in state
1844 <emphasis>WaitingForAuth</emphasis>. If the client is
1845 rejected too many times the server must disconnect the
1850 <title><emphasis>WaitingForAuth</emphasis></title>
1856 Receive AUTH → send REJECTED [mechs], goto
1857 <emphasis>WaitingForAuth</emphasis>
1863 Receive AUTH MECH RESP
1867 MECH not valid mechanism → send REJECTED
1869 <emphasis>WaitingForAuth</emphasis>
1873 MECH(RESP) returns CONTINUE(CHALL) → send
1875 <emphasis>WaitingForData</emphasis>
1879 MECH(RESP) returns OK → send OK, goto
1880 <emphasis>WaitingForBegin</emphasis>
1884 MECH(RESP) returns REJECT → send REJECTED
1886 <emphasis>WaitingForAuth</emphasis>
1894 Receive BEGIN → terminate
1895 auth conversation, disconnect
1901 Receive ERROR → send REJECTED [mechs], goto
1902 <emphasis>WaitingForAuth</emphasis>
1908 Receive anything else → send
1910 <emphasis>WaitingForAuth</emphasis>
1919 <title><emphasis>WaitingForData</emphasis></title>
1927 MECH(RESP) returns CONTINUE(CHALL) → send
1929 <emphasis>WaitingForData</emphasis>
1933 MECH(RESP) returns OK → send OK, goto
1934 <emphasis>WaitingForBegin</emphasis>
1938 MECH(RESP) returns REJECT → send REJECTED
1940 <emphasis>WaitingForAuth</emphasis>
1948 Receive BEGIN → terminate auth conversation,
1955 Receive CANCEL → send REJECTED [mechs], goto
1956 <emphasis>WaitingForAuth</emphasis>
1962 Receive ERROR → send REJECTED [mechs], goto
1963 <emphasis>WaitingForAuth</emphasis>
1969 Receive anything else → send ERROR, goto
1970 <emphasis>WaitingForData</emphasis>
1978 <title><emphasis>WaitingForBegin</emphasis></title>
1983 Receive BEGIN → terminate auth conversation,
1984 client authenticated
1990 Receive CANCEL → send REJECTED [mechs], goto
1991 <emphasis>WaitingForAuth</emphasis>
1997 Receive ERROR → send REJECTED [mechs], goto
1998 <emphasis>WaitingForAuth</emphasis>
2004 Receive anything else → send ERROR, goto
2005 <emphasis>WaitingForBegin</emphasis>
2015 <sect2 id="auth-mechanisms">
2016 <title>Authentication mechanisms</title>
2018 This section describes some new authentication mechanisms.
2019 D-Bus also allows any standard SASL mechanism of course.
2021 <sect3 id="auth-mechanisms-sha">
2022 <title>DBUS_COOKIE_SHA1</title>
2024 The DBUS_COOKIE_SHA1 mechanism is designed to establish that a client
2025 has the ability to read a private file owned by the user being
2026 authenticated. If the client can prove that it has access to a secret
2027 cookie stored in this file, then the client is authenticated.
2028 Thus the security of DBUS_COOKIE_SHA1 depends on a secure home
2032 Authentication proceeds as follows:
2036 The client sends the username it would like to authenticate
2042 The server sends the name of its "cookie context" (see below); a
2043 space character; the integer ID of the secret cookie the client
2044 must demonstrate knowledge of; a space character; then a
2045 hex-encoded randomly-generated challenge string.
2050 The client locates the cookie, and generates its own hex-encoded
2051 randomly-generated challenge string. The client then
2052 concatenates the server's hex-encoded challenge, a ":"
2053 character, its own hex-encoded challenge, another ":" character,
2054 and the hex-encoded cookie. It computes the SHA-1 hash of this
2055 composite string. It sends back to the server the client's
2056 hex-encoded challenge string, a space character, and the SHA-1
2062 The server generates the same concatenated string used by the
2063 client and computes its SHA-1 hash. It compares the hash with
2064 the hash received from the client; if the two hashes match, the
2065 client is authenticated.
2071 Each server has a "cookie context," which is a name that identifies a
2072 set of cookies that apply to that server. A sample context might be
2073 "org_freedesktop_session_bus". Context names must be valid ASCII,
2074 nonzero length, and may not contain the characters slash ("/"),
2075 backslash ("\"), space (" "), newline ("\n"), carriage return ("\r"),
2076 tab ("\t"), or period ("."). There is a default context,
2077 "org_freedesktop_general" that's used by servers that do not specify
2081 Cookies are stored in a user's home directory, in the directory
2082 <filename>~/.dbus-keyrings/</filename>. This directory must
2083 not be readable or writable by other users. If it is,
2084 clients and servers must ignore it. The directory
2085 contains cookie files named after the cookie context.
2088 A cookie file contains one cookie per line. Each line
2089 has three space-separated fields:
2093 The cookie ID number, which must be a non-negative integer and
2094 may not be used twice in the same file.
2099 The cookie's creation time, in UNIX seconds-since-the-epoch
2105 The cookie itself, a hex-encoded random block of bytes. The cookie
2106 may be of any length, though obviously security increases
2107 as the length increases.
2113 Only server processes modify the cookie file.
2114 They must do so with this procedure:
2118 Create a lockfile name by appending ".lock" to the name of the
2119 cookie file. The server should attempt to create this file
2120 using <literal>O_CREAT | O_EXCL</literal>. If file creation
2121 fails, the lock fails. Servers should retry for a reasonable
2122 period of time, then they may choose to delete an existing lock
2123 to keep users from having to manually delete a stale
2124 lock. <footnote><para>Lockfiles are used instead of real file
2125 locking <literal>fcntl()</literal> because real locking
2126 implementations are still flaky on network
2127 filesystems.</para></footnote>
2132 Once the lockfile has been created, the server loads the cookie
2133 file. It should then delete any cookies that are old (the
2134 timeout can be fairly short), or more than a reasonable
2135 time in the future (so that cookies never accidentally
2136 become permanent, if the clock was set far into the future
2137 at some point). If no recent keys remain, the
2138 server may generate a new key.
2143 The pruned and possibly added-to cookie file
2144 must be resaved atomically (using a temporary
2145 file which is rename()'d).
2150 The lock must be dropped by deleting the lockfile.
2156 Clients need not lock the file in order to load it,
2157 because servers are required to save the file atomically.
2162 <sect1 id="addresses">
2163 <title>Server Addresses</title>
2165 Server addresses consist of a transport name followed by a colon, and
2166 then an optional, comma-separated list of keys and values in the form key=value.
2167 Each value is escaped.
2171 <programlisting>unix:path=/tmp/dbus-test</programlisting>
2172 Which is the address to a unix socket with the path /tmp/dbus-test.
2175 Value escaping is similar to URI escaping but simpler.
2179 The set of optionally-escaped bytes is:
2180 <literal>[0-9A-Za-z_-/.\]</literal>. To escape, each
2181 <emphasis>byte</emphasis> (note, not character) which is not in the
2182 set of optionally-escaped bytes must be replaced with an ASCII
2183 percent (<literal>%</literal>) and the value of the byte in hex.
2184 The hex value must always be two digits, even if the first digit is
2185 zero. The optionally-escaped bytes may be escaped if desired.
2190 To unescape, append each byte in the value; if a byte is an ASCII
2191 percent (<literal>%</literal>) character then append the following
2192 hex value instead. It is an error if a <literal>%</literal> byte
2193 does not have two hex digits following. It is an error if a
2194 non-optionally-escaped byte is seen unescaped.
2198 The set of optionally-escaped bytes is intended to preserve address
2199 readability and convenience.
2203 A server may specify a key-value pair with the key <literal>guid</literal>
2204 and the value a hex-encoded 16-byte sequence. This globally unique ID must
2205 be created by filling the first 4 bytes with a 32-bit UNIX time since the
2206 epoch, and the remaining 12 bytes with random bytes. If present, the GUID
2207 may be used to distinguish one server from another. A server should use a
2208 different GUID for each address it listens on. For example, if a message
2209 bus daemon offers both UNIX domain socket and TCP connections, but treats
2210 clients the same regardless of how they connect, those two connections are
2211 equivalent post-connection but should have distinct GUIDs to distinguish
2212 the kinds of connection.
2216 The intent of the GUID feature is to allow a client to avoid opening
2217 multiple identical connections to the same server, by allowing the client
2218 to check whether an address corresponds to an already-existing connection.
2219 Comparing two addresses is insufficient, because addresses can be recycled
2220 by distinct servers.
2224 [FIXME clarify if attempting to connect to each is a requirement
2225 or just a suggestion]
2226 When connecting to a server, multiple server addresses can be
2227 separated by a semi-colon. The library will then try to connect
2228 to the first address and if that fails, it'll try to connect to
2229 the next one specified, and so forth. For example
2230 <programlisting>unix:path=/tmp/dbus-test;unix:path=/tmp/dbus-test2</programlisting>
2235 <sect1 id="transports">
2236 <title>Transports</title>
2238 [FIXME we need to specify in detail each transport and its possible arguments]
2240 Current transports include: unix domain sockets (including
2241 abstract namespace on linux), TCP/IP, and a debug/testing transport using
2242 in-process pipes. Future possible transports include one that
2243 tunnels over X11 protocol.
2246 <sect2 id="transports-unix-domain-sockets">
2247 <title>Unix Domain Sockets</title>
2249 Unix domain sockets can be either paths in the file system or on Linux
2250 kernels, they can be abstract which are similar to paths but
2251 do not show up in the file system.
2255 When a socket is opened by the D-Bus library it truncates the path
2256 name right before the first trailing Nul byte. This is true for both
2257 normal paths and abstract paths. Note that this is a departure from
2258 previous versions of D-Bus that would create sockets with a fixed
2259 length path name. Names which were shorter than the fixed length
2260 would be padded by Nul bytes.
2265 <sect1 id="naming-conventions">
2266 <title>Naming Conventions</title>
2269 D-Bus namespaces are all lowercase and correspond to reversed domain
2270 names, as with Java. e.g. "org.freedesktop"
2273 Interface, signal, method, and property names are "WindowsStyleCaps", note
2274 that the first letter is capitalized, unlike Java.
2277 Object paths are normally all lowercase with underscores used rather than
2282 <sect1 id="standard-interfaces">
2283 <title>Standard Interfaces</title>
2285 See <xref linkend="message-protocol-types-notation"/> for details on
2286 the notation used in this section. There are some standard interfaces
2287 that may be useful across various D-Bus applications.
2289 <sect2 id="standard-interfaces-peer">
2290 <title><literal>org.freedesktop.DBus.Peer</literal></title>
2292 The <literal>org.freedesktop.DBus.Peer</literal> interface
2295 org.freedesktop.DBus.Peer.Ping ()
2299 On receipt of the <literal>METHOD_CALL</literal> message
2300 <literal>org.freedesktop.DBus.Peer.Ping</literal>, an application should do
2301 nothing other than reply with a <literal>METHOD_RETURN</literal> as
2302 usual. It does not matter which object path a ping is sent to. The
2303 reference implementation should simply handle this method on behalf of
2304 all objects, though it doesn't yet. (The point is, you're really pinging
2305 the peer process, not a specific object.)
2309 <sect2 id="standard-interfaces-introspectable">
2310 <title><literal>org.freedesktop.DBus.Introspectable</literal></title>
2312 This interface has one method:
2314 org.freedesktop.DBus.Introspectable.Introspect (out STRING xml_data)
2318 Objects instances may implement
2319 <literal>Introspect</literal> which returns an XML description of
2320 the object, including its interfaces (with signals and methods), objects
2321 below it in the object path tree, and its properties.
2324 <xref linkend="introspection-format"/> describes the format of this XML string.
2327 <sect2 id="standard-interfaces-properties">
2328 <title><literal>org.freedesktop.DBus.Properties</literal></title>
2330 Many native APIs will have a concept of object <firstterm>properties</firstterm>
2331 or <firstterm>attributes</firstterm>. These can be exposed via the
2332 <literal>org.freedesktop.DBus.Properties</literal> interface.
2336 org.freedesktop.DBus.Properties.Get (in STRING interface_name,
2337 in STRING property_name,
2339 org.freedesktop.DBus.Properties.Set (in STRING interface_name,
2340 in STRING property_name,
2345 The available properties and whether they are writable can be determined
2346 by calling <literal>org.freedesktop.DBus.Introspectable.Introspect</literal>,
2347 see <xref linkend="standard-interfaces-introspectable"/>.
2350 An empty string may be provided for the interface name; in this case,
2351 if there are multiple properties on an object with the same name,
2352 the results are undefined (picking one by according to an arbitrary
2353 deterministic rule, or returning an error, are the reasonable
2359 <sect1 id="introspection-format">
2360 <title>Introspection Data Format</title>
2362 As described in <xref linkend="standard-interfaces-introspectable"/>,
2363 objects may be introspected at runtime, returning an XML string
2364 that describes the object. The same XML format may be used in
2365 other contexts as well, for example as an "IDL" for generating
2366 static language bindings.
2369 Here is an example of introspection data:
2371 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
2372 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2373 <node name="/org/freedesktop/sample_object">
2374 <interface name="org.freedesktop.SampleInterface">
2375 <method name="Frobate">
2376 <arg name="foo" type="i" direction="in"/>
2377 <arg name="bar" type="s" direction="out"/>
2378 <arg name="baz" type="a{us}" direction="out"/>
2379 <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
2381 <method name="Bazify">
2382 <arg name="bar" type="(iiu)" direction="in"/>
2383 <arg name="bar" type="v" direction="out"/>
2385 <method name="Mogrify">
2386 <arg name="bar" type="(iiav)" direction="in"/>
2388 <signal name="Changed">
2389 <arg name="new_value" type="b"/>
2391 <property name="Bar" type="y" access="readwrite"/>
2393 <node name="child_of_sample_object"/>
2394 <node name="another_child_of_sample_object"/>
2399 A more formal DTD and spec needs writing, but here are some quick notes.
2403 Only the root <node> element can omit the node name, as it's
2404 known to be the object that was introspected. If the root
2405 <node> does have a name attribute, it must be an absolute
2406 object path. If child <node> have object paths, they must be
2412 If a child <node> has any sub-elements, then they
2413 must represent a complete introspection of the child.
2414 If a child <node> is empty, then it may or may
2415 not have sub-elements; the child must be introspected
2416 in order to find out. The intent is that if an object
2417 knows that its children are "fast" to introspect
2418 it can go ahead and return their information, but
2419 otherwise it can omit it.
2424 The direction element on <arg> may be omitted,
2425 in which case it defaults to "in" for method calls
2426 and "out" for signals. Signals only allow "out"
2427 so while direction may be specified, it's pointless.
2432 The possible directions are "in" and "out",
2433 unlike CORBA there is no "inout"
2438 The possible property access flags are
2439 "readwrite", "read", and "write"
2444 Multiple interfaces can of course be listed for
2450 The "name" attribute on arguments is optional.
2456 Method, interface, property, and signal elements may have
2457 "annotations", which are generic key/value pairs of metadata.
2458 They are similar conceptually to Java's annotations and C# attributes.
2459 Well-known annotations:
2466 <entry>Values (separated by ,)</entry>
2467 <entry>Description</entry>
2472 <entry>org.freedesktop.DBus.Deprecated</entry>
2473 <entry>true,false</entry>
2474 <entry>Whether or not the entity is deprecated; defaults to false</entry>
2477 <entry>org.freedesktop.DBus.GLib.CSymbol</entry>
2478 <entry>(string)</entry>
2479 <entry>The C symbol; may be used for methods and interfaces</entry>
2482 <entry>org.freedesktop.DBus.Method.NoReply</entry>
2483 <entry>true,false</entry>
2484 <entry>If set, don't expect a reply to the method call; defaults to false.</entry>
2490 <sect1 id="message-bus">
2491 <title>Message Bus Specification</title>
2492 <sect2 id="message-bus-overview">
2493 <title>Message Bus Overview</title>
2495 The message bus accepts connections from one or more applications.
2496 Once connected, applications can exchange messages with other
2497 applications that are also connected to the bus.
2500 In order to route messages among connections, the message bus keeps a
2501 mapping from names to connections. Each connection has one
2502 unique-for-the-lifetime-of-the-bus name automatically assigned.
2503 Applications may request additional names for a connection. Additional
2504 names are usually "well-known names" such as
2505 "org.freedesktop.TextEditor". When a name is bound to a connection,
2506 that connection is said to <firstterm>own</firstterm> the name.
2509 The bus itself owns a special name, <literal>org.freedesktop.DBus</literal>.
2510 This name routes messages to the bus, allowing applications to make
2511 administrative requests. For example, applications can ask the bus
2512 to assign a name to a connection.
2515 Each name may have <firstterm>queued owners</firstterm>. When an
2516 application requests a name for a connection and the name is already in
2517 use, the bus will optionally add the connection to a queue waiting for
2518 the name. If the current owner of the name disconnects or releases
2519 the name, the next connection in the queue will become the new owner.
2523 This feature causes the right thing to happen if you start two text
2524 editors for example; the first one may request "org.freedesktop.TextEditor",
2525 and the second will be queued as a possible owner of that name. When
2526 the first exits, the second will take over.
2530 Messages may have a <literal>DESTINATION</literal> field (see <xref
2531 linkend="message-protocol-header-fields"/>). If the
2532 <literal>DESTINATION</literal> field is present, it specifies a message
2533 recipient by name. Method calls and replies normally specify this field.
2537 Signals normally do not specify a destination; they are sent to all
2538 applications with <firstterm>message matching rules</firstterm> that
2543 When the message bus receives a method call, if the
2544 <literal>DESTINATION</literal> field is absent, the call is taken to be
2545 a standard one-to-one message and interpreted by the message bus
2546 itself. For example, sending an
2547 <literal>org.freedesktop.DBus.Peer.Ping</literal> message with no
2548 <literal>DESTINATION</literal> will cause the message bus itself to
2549 reply to the ping immediately; the message bus will not make this
2550 message visible to other applications.
2554 Continuing the <literal>org.freedesktop.DBus.Peer.Ping</literal> example, if
2555 the ping message were sent with a <literal>DESTINATION</literal> name of
2556 <literal>com.yoyodyne.Screensaver</literal>, then the ping would be
2557 forwarded, and the Yoyodyne Corporation screensaver application would be
2558 expected to reply to the ping.
2562 <sect2 id="message-bus-names">
2563 <title>Message Bus Names</title>
2565 Each connection has at least one name, assigned at connection time and
2566 returned in response to the
2567 <literal>org.freedesktop.DBus.Hello</literal> method call. This
2568 automatically-assigned name is called the connection's <firstterm>unique
2569 name</firstterm>. Unique names are never reused for two different
2570 connections to the same bus.
2573 Ownership of a unique name is a prerequisite for interaction with
2574 the message bus. It logically follows that the unique name is always
2575 the first name that an application comes to own, and the last
2576 one that it loses ownership of.
2579 Unique connection names must begin with the character ':' (ASCII colon
2580 character); bus names that are not unique names must not begin
2581 with this character. (The bus must reject any attempt by an application
2582 to manually request a name beginning with ':'.) This restriction
2583 categorically prevents "spoofing"; messages sent to a unique name
2584 will always go to the expected connection.
2587 When a connection is closed, all the names that it owns are deleted (or
2588 transferred to the next connection in the queue if any).
2591 A connection can request additional names to be associated with it using
2592 the <literal>org.freedesktop.DBus.RequestName</literal> message. <xref
2593 linkend="message-protocol-names-bus"/> describes the format of a valid
2594 name. These names can be released again using the
2595 <literal>org.freedesktop.DBus.ReleaseName</literal> message.
2598 <sect3 id="bus-messages-request-name">
2599 <title><literal>org.freedesktop.DBus.RequestName</literal></title>
2603 UINT32 RequestName (in STRING name, in UINT32 flags)
2610 <entry>Argument</entry>
2612 <entry>Description</entry>
2618 <entry>STRING</entry>
2619 <entry>Name to request</entry>
2623 <entry>UINT32</entry>
2624 <entry>Flags</entry>
2634 <entry>Argument</entry>
2636 <entry>Description</entry>
2642 <entry>UINT32</entry>
2643 <entry>Return value</entry>
2650 This method call should be sent to
2651 <literal>org.freedesktop.DBus</literal> and asks the message bus to
2652 assign the given name to the method caller. Each name maintains a
2653 queue of possible owners, where the head of the queue is the primary
2654 or current owner of the name. Each potential owner in the queue
2655 maintains the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and
2656 DBUS_NAME_FLAG_DO_NOT_QUEUE settings from its latest RequestName
2657 call. When RequestName is invoked the following occurs:
2661 If the method caller is currently the primary owner of the name,
2662 the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and DBUS_NAME_FLAG_DO_NOT_QUEUE
2663 values are updated with the values from the new RequestName call,
2664 and nothing further happens.
2670 If the current primary owner (head of the queue) has
2671 DBUS_NAME_FLAG_ALLOW_REPLACEMENT set, and the RequestName
2672 invocation has the DBUS_NAME_FLAG_REPLACE_EXISTING flag, then
2673 the caller of RequestName replaces the current primary owner at
2674 the head of the queue and the current primary owner moves to the
2675 second position in the queue. If the caller of RequestName was
2676 in the queue previously its flags are updated with the values from
2677 the new RequestName in addition to moving it to the head of the queue.
2683 If replacement is not possible, and the method caller is
2684 currently in the queue but not the primary owner, its flags are
2685 updated with the values from the new RequestName call.
2691 If replacement is not possible, and the method caller is
2692 currently not in the queue, the method caller is appended to the
2699 If any connection in the queue has DBUS_NAME_FLAG_DO_NOT_QUEUE
2700 set and is not the primary owner, it is removed from the
2701 queue. This can apply to the previous primary owner (if it
2702 was replaced) or the method caller (if it updated the
2703 DBUS_NAME_FLAG_DO_NOT_QUEUE flag while still stuck in the
2704 queue, or if it was just added to the queue with that flag set).
2710 Note that DBUS_NAME_FLAG_REPLACE_EXISTING results in "jumping the
2711 queue," even if another application already in the queue had specified
2712 DBUS_NAME_FLAG_REPLACE_EXISTING. This comes up if a primary owner
2713 that does not allow replacement goes away, and the next primary owner
2714 does allow replacement. In this case, queued items that specified
2715 DBUS_NAME_FLAG_REPLACE_EXISTING <emphasis>do not</emphasis>
2716 automatically replace the new primary owner. In other words,
2717 DBUS_NAME_FLAG_REPLACE_EXISTING is not saved, it is only used at the
2718 time RequestName is called. This is deliberate to avoid an infinite loop
2719 anytime two applications are both DBUS_NAME_FLAG_ALLOW_REPLACEMENT
2720 and DBUS_NAME_FLAG_REPLACE_EXISTING.
2723 The flags argument contains any of the following values logically ORed
2730 <entry>Conventional Name</entry>
2731 <entry>Value</entry>
2732 <entry>Description</entry>
2737 <entry>DBUS_NAME_FLAG_ALLOW_REPLACEMENT</entry>
2741 If an application A specifies this flag and succeeds in
2742 becoming the owner of the name, and another application B
2743 later calls RequestName with the
2744 DBUS_NAME_FLAG_REPLACE_EXISTING flag, then application A
2745 will lose ownership and receive a
2746 <literal>org.freedesktop.DBus.NameLost</literal> signal, and
2747 application B will become the new owner. If DBUS_NAME_FLAG_ALLOW_REPLACEMENT
2748 is not specified by application A, or DBUS_NAME_FLAG_REPLACE_EXISTING
2749 is not specified by application B, then application B will not replace
2750 application A as the owner.
2755 <entry>DBUS_NAME_FLAG_REPLACE_EXISTING</entry>
2759 Try to replace the current owner if there is one. If this
2760 flag is not set the application will only become the owner of
2761 the name if there is no current owner. If this flag is set,
2762 the application will replace the current owner if
2763 the current owner specified DBUS_NAME_FLAG_ALLOW_REPLACEMENT.
2768 <entry>DBUS_NAME_FLAG_DO_NOT_QUEUE</entry>
2772 Without this flag, if an application requests a name that is
2773 already owned, the application will be placed in a queue to
2774 own the name when the current owner gives it up. If this
2775 flag is given, the application will not be placed in the
2776 queue, the request for the name will simply fail. This flag
2777 also affects behavior when an application is replaced as
2778 name owner; by default the application moves back into the
2779 waiting queue, unless this flag was provided when the application
2780 became the name owner.
2788 The return code can be one of the following values:
2794 <entry>Conventional Name</entry>
2795 <entry>Value</entry>
2796 <entry>Description</entry>
2801 <entry>DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER</entry>
2802 <entry>1</entry> <entry>The caller is now the primary owner of
2803 the name, replacing any previous owner. Either the name had no
2804 owner before, or the caller specified
2805 DBUS_NAME_FLAG_REPLACE_EXISTING and the current owner specified
2806 DBUS_NAME_FLAG_ALLOW_REPLACEMENT.</entry>
2809 <entry>DBUS_REQUEST_NAME_REPLY_IN_QUEUE</entry>
2812 <entry>The name already had an owner,
2813 DBUS_NAME_FLAG_DO_NOT_QUEUE was not specified, and either
2814 the current owner did not specify
2815 DBUS_NAME_FLAG_ALLOW_REPLACEMENT or the requesting
2816 application did not specify DBUS_NAME_FLAG_REPLACE_EXISTING.
2820 <entry>DBUS_REQUEST_NAME_REPLY_EXISTS</entry> <entry>3</entry>
2821 <entry>The name already has an owner,
2822 DBUS_NAME_FLAG_DO_NOT_QUEUE was specified, and either
2823 DBUS_NAME_FLAG_ALLOW_REPLACEMENT was not specified by the
2824 current owner, or DBUS_NAME_FLAG_REPLACE_EXISTING was not
2825 specified by the requesting application.</entry>
2828 <entry>DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER</entry>
2830 <entry>The application trying to request ownership of a name is already the owner of it.</entry>
2838 <sect3 id="bus-messages-release-name">
2839 <title><literal>org.freedesktop.DBus.ReleaseName</literal></title>
2843 UINT32 ReleaseName (in STRING name)
2850 <entry>Argument</entry>
2852 <entry>Description</entry>
2858 <entry>STRING</entry>
2859 <entry>Name to release</entry>
2869 <entry>Argument</entry>
2871 <entry>Description</entry>
2877 <entry>UINT32</entry>
2878 <entry>Return value</entry>
2885 This method call should be sent to
2886 <literal>org.freedesktop.DBus</literal> and asks the message bus to
2887 release the method caller's claim to the given name. If the caller is
2888 the primary owner, a new primary owner will be selected from the
2889 queue if any other owners are waiting. If the caller is waiting in
2890 the queue for the name, the caller will removed from the queue and
2891 will not be made an owner of the name if it later becomes available.
2892 If there are no other owners in the queue for the name, it will be
2893 removed from the bus entirely.
2895 The return code can be one of the following values:
2901 <entry>Conventional Name</entry>
2902 <entry>Value</entry>
2903 <entry>Description</entry>
2908 <entry>DBUS_RELEASE_NAME_REPLY_RELEASED</entry>
2909 <entry>1</entry> <entry>The caller has released his claim on
2910 the given name. Either the caller was the primary owner of
2911 the name, and the name is now unused or taken by somebody
2912 waiting in the queue for the name, or the caller was waiting
2913 in the queue for the name and has now been removed from the
2917 <entry>DBUS_RELEASE_NAME_REPLY_NON_EXISTENT</entry>
2919 <entry>The given name does not exist on this bus.</entry>
2922 <entry>DBUS_RELEASE_NAME_REPLY_NOT_OWNER</entry>
2924 <entry>The caller was not the primary owner of this name,
2925 and was also not waiting in the queue to own this name.</entry>
2934 <sect2 id="message-bus-routing">
2935 <title>Message Bus Message Routing</title>
2939 <sect3 id="message-bus-routing-match-rules">
2940 <title>Match Rules</title>
2942 An important part of the message bus routing protocol is match
2943 rules. Match rules describe what messages can be sent to a client
2944 based on the contents of the message. When a message is routed
2945 through the bus it is compared to clients' match rules. If any
2946 of the rules match, the message is dispatched to the client.
2947 If none of the rules match the message never leaves the bus. This
2948 is an effective way to control traffic over the bus and to make sure
2949 only relevant message need to be processed by the client.
2952 Match rules are added using the AddMatch bus method
2953 (see xref linkend="bus-messages-add-match"/>). Rules are
2954 specified as a string of comma separated key/value pairs.
2955 Excluding a key from the rule indicates a wildcard match.
2956 For instance excluding the the member from a match rule but
2957 adding a sender would let all messages from that sender through.
2958 An example of a complete rule would be
2959 "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='Foo',path='/bar/foo',destination=':452345.34',arg2='bar'"
2962 The following table describes the keys that can be used to create
2964 The following table summarizes the D-Bus types.
2970 <entry>Possible Values</entry>
2971 <entry>Description</entry>
2976 <entry><literal>type</literal></entry>
2977 <entry>'signal', 'method_call', 'method_return', 'error'</entry>
2978 <entry>Match on the message type. An example of a type match is type='signal'</entry>
2981 <entry><literal>sender</literal></entry>
2982 <entry>A bus or unique name (see <xref linkend="term-bus-name"/>
2983 and <xref linkend="term-unique-name"/> respectively)
2985 <entry>Match messages sent by a particular sender. An example of a sender match
2986 is sender='org.freedesktop.Hal'</entry>
2989 <entry><literal>interface</literal></entry>
2990 <entry>An interface name (see <xref linkend="message-protocol-names-interface"/>)</entry>
2991 <entry>Match messages sent over or to a particular interface. An example of an
2992 interface match is interface='org.freedesktop.Hal.Manager'</entry>
2995 <entry><literal>member</literal></entry>
2996 <entry>Any valid method or signal name</entry>
2997 <entry>Matches messages which have the give method or signal name. An example of
2998 a member match is member='NameOwnerChanged'</entry>
3001 <entry><literal>path</literal></entry>
3002 <entry>An object path (see <xref linkend="message-protocol-marshaling-object-path"/>)</entry>
3003 <entry>Matches messages which are sent from or to the given object. An example of a
3004 path match is path='/org/freedesktop/Hal/Manager'</entry>
3007 <entry><literal>destination</literal></entry>
3008 <entry>A unique name (see <xref linkend="term-unique-name"/>)</entry>
3009 <entry>Matches messages which are being sent to the given unique name. An
3010 example of a destination match is destination=':1.0'</entry>
3013 <entry><literal>arg[1, 2, 3, ...]</literal></entry>
3014 <entry>Any string</entry>
3015 <entry>Arg matches are special and are used for further restricting the
3016 match based on the arguments in the body of a message. As of this time
3017 only string arguments can be matched. An example of an argument match
3018 would be arg3='Foo'.</entry>
3026 <sect2 id="message-bus-starting-services">
3027 <title>Message Bus Starting Services</title>
3029 The message bus can start applications on behalf of other applications.
3030 In CORBA terms, this would be called <firstterm>activation</firstterm>.
3031 An application that can be started in this way is called a
3032 <firstterm>service</firstterm>.
3035 With D-Bus, starting a service is normally done by name. That is,
3036 applications ask the message bus to start some program that will own a
3037 well-known name, such as <literal>org.freedesktop.TextEditor</literal>.
3038 This implies a contract documented along with the name
3039 <literal>org.freedesktop.TextEditor</literal> for which objects
3040 the owner of that name will provide, and what interfaces those
3044 To find an executable corresponding to a particular name, the bus daemon
3045 looks for <firstterm>service description files</firstterm>. Service
3046 description files define a mapping from names to executables. Different
3047 kinds of message bus will look for these files in different places, see
3048 <xref linkend="message-bus-types"/>.
3051 [FIXME the file format should be much better specified than "similar to
3052 .desktop entries" esp. since desktop entries are already
3053 badly-specified. ;-)] Service description files have the ".service" file
3054 extension. The message bus will only load service description files
3055 ending with .service; all other files will be ignored. The file format
3056 is similar to that of <ulink
3057 url="http://www.freedesktop.org/standards/desktop-entry-spec/desktop-entry-spec.html">desktop
3058 entries</ulink>. All service description files must be in UTF-8
3059 encoding. To ensure that there will be no name collisions, service files
3060 must be namespaced using the same mechanism as messages and service
3064 <title>Example service description file</title>
3066 # Sample service description file
3068 Names=org.freedesktop.ConfigurationDatabase;org.gnome.GConf;
3069 Exec=/usr/libexec/gconfd-2
3074 When an application asks to start a service by name, the bus daemon tries to
3075 find a service that will own that name. It then tries to spawn the
3076 executable associated with it. If this fails, it will report an
3077 error. [FIXME what happens if two .service files offer the same service;
3078 what kind of error is reported, should we have a way for the client to
3082 The executable launched will have the environment variable
3083 <literal>DBUS_STARTER_ADDRESS</literal> set to the address of the
3084 message bus so it can connect and request the appropriate names.
3087 The executable being launched may want to know whether the message bus
3088 starting it is one of the well-known message buses (see <xref
3089 linkend="message-bus-types"/>). To facilitate this, the bus must also set
3090 the <literal>DBUS_STARTER_BUS_TYPE</literal> environment variable if it is one
3091 of the well-known buses. The currently-defined values for this variable
3092 are <literal>system</literal> for the systemwide message bus,
3093 and <literal>session</literal> for the per-login-session message
3094 bus. The new executable must still connect to the address given
3095 in <literal>DBUS_STARTER_ADDRESS</literal>, but may assume that the
3096 resulting connection is to the well-known bus.
3099 [FIXME there should be a timeout somewhere, either specified
3100 in the .service file, by the client, or just a global value
3101 and if the client being activated fails to connect within that
3102 timeout, an error should be sent back.]
3105 <sect3 id="message-bus-starting-services-scope">
3106 <title>Message Bus Service Scope</title>
3108 The "scope" of a service is its "per-", such as per-session,
3109 per-machine, per-home-directory, or per-display. The reference
3110 implementation doesn't yet support starting services in a different
3111 scope from the message bus itself. So e.g. if you start a service
3112 on the session bus its scope is per-session.
3115 We could add an optional scope to a bus name. For example, for
3116 per-(display,session pair), we could have a unique ID for each display
3117 generated automatically at login and set on screen 0 by executing a
3118 special "set display ID" binary. The ID would be stored in a
3119 <literal>_DBUS_DISPLAY_ID</literal> property and would be a string of
3120 random bytes. This ID would then be used to scope names.
3121 Starting/locating a service could be done by ID-name pair rather than
3125 Contrast this with a per-display scope. To achieve that, we would
3126 want a single bus spanning all sessions using a given display.
3127 So we might set a <literal>_DBUS_DISPLAY_BUS_ADDRESS</literal>
3128 property on screen 0 of the display, pointing to this bus.
3133 <sect2 id="message-bus-types">
3134 <title>Well-known Message Bus Instances</title>
3136 Two standard message bus instances are defined here, along with how
3137 to locate them and where their service files live.
3139 <sect3 id="message-bus-types-login">
3140 <title>Login session message bus</title>
3142 Each time a user logs in, a <firstterm>login session message
3143 bus</firstterm> may be started. All applications in the user's login
3144 session may interact with one another using this message bus.
3147 The address of the login session message bus is given
3148 in the <literal>DBUS_SESSION_BUS_ADDRESS</literal> environment
3149 variable. If that variable is not set, applications may
3150 also try to read the address from the X Window System root
3151 window property <literal>_DBUS_SESSION_BUS_ADDRESS</literal>.
3152 The root window property must have type <literal>STRING</literal>.
3153 The environment variable should have precedence over the
3154 root window property.
3157 [FIXME specify location of .service files, probably using
3158 DESKTOP_DIRS etc. from basedir specification, though login session
3159 bus is not really desktop-specific]
3162 <sect3 id="message-bus-types-system">
3163 <title>System message bus</title>
3165 A computer may have a <firstterm>system message bus</firstterm>,
3166 accessible to all applications on the system. This message bus may be
3167 used to broadcast system events, such as adding new hardware devices,
3168 changes in the printer queue, and so forth.
3171 The address of the system message bus is given
3172 in the <literal>DBUS_SYSTEM_BUS_ADDRESS</literal> environment
3173 variable. If that variable is not set, applications should try
3174 to connect to the well-known address
3175 <literal>unix:path=/var/run/dbus/system_bus_socket</literal>.
3178 The D-Bus reference implementation actually honors the
3179 <literal>$(localstatedir)</literal> configure option
3180 for this address, on both client and server side.
3185 [FIXME specify location of system bus .service files]
3190 <sect2 id="message-bus-messages">
3191 <title>Message Bus Messages</title>
3193 The special message bus name <literal>org.freedesktop.DBus</literal>
3194 responds to a number of additional messages.
3197 <sect3 id="bus-messages-hello">
3198 <title><literal>org.freedesktop.DBus.Hello</literal></title>
3209 <entry>Argument</entry>
3211 <entry>Description</entry>
3217 <entry>STRING</entry>
3218 <entry>Unique name assigned to the connection</entry>
3225 Before an application is able to send messages to other applications
3226 it must send the <literal>org.freedesktop.DBus.Hello</literal> message
3227 to the message bus to obtain a unique name. If an application without
3228 a unique name tries to send a message to another application, or a
3229 message to the message bus itself that isn't the
3230 <literal>org.freedesktop.DBus.Hello</literal> message, it will be
3231 disconnected from the bus.
3234 There is no corresponding "disconnect" request; if a client wishes to
3235 disconnect from the bus, it simply closes the socket (or other
3236 communication channel).
3239 <sect3 id="bus-messages-list-names">
3240 <title><literal>org.freedesktop.DBus.ListNames</literal></title>
3244 ARRAY of STRING ListNames ()
3251 <entry>Argument</entry>
3253 <entry>Description</entry>
3259 <entry>ARRAY of STRING</entry>
3260 <entry>Array of strings where each string is a bus name</entry>
3267 Returns a list of all currently-owned names on the bus.
3270 <sect3 id="bus-messages-list-activatable-names">
3271 <title><literal>org.freedesktop.DBus.ListActivatableNames</literal></title>
3275 ARRAY of STRING ListActivatableNames ()
3282 <entry>Argument</entry>
3284 <entry>Description</entry>
3290 <entry>ARRAY of STRING</entry>
3291 <entry>Array of strings where each string is a bus name</entry>
3298 Returns a list of all names that can be activated on the bus.
3301 <sect3 id="bus-messages-name-exists">
3302 <title><literal>org.freedesktop.DBus.NameHasOwner</literal></title>
3306 BOOLEAN NameHasOwner (in STRING name)
3313 <entry>Argument</entry>
3315 <entry>Description</entry>
3321 <entry>STRING</entry>
3322 <entry>Name to check</entry>
3332 <entry>Argument</entry>
3334 <entry>Description</entry>
3340 <entry>BOOLEAN</entry>
3341 <entry>Return value, true if the name exists</entry>
3348 Checks if the specified name exists (currently has an owner).
3352 <sect3 id="bus-messages-name-owner-changed">
3353 <title><literal>org.freedesktop.DBus.NameOwnerChanged</literal></title>
3357 NameOwnerChanged (STRING name, STRING old_owner, STRING new_owner)
3364 <entry>Argument</entry>
3366 <entry>Description</entry>
3372 <entry>STRING</entry>
3373 <entry>Name with a new owner</entry>
3377 <entry>STRING</entry>
3378 <entry>Old owner or empty string if none</entry>
3382 <entry>STRING</entry>
3383 <entry>New owner or empty string if none</entry>
3390 This signal indicates that the owner of a name has changed.
3391 It's also the signal to use to detect the appearance of
3392 new names on the bus.
3395 <sect3 id="bus-messages-name-lost">
3396 <title><literal>org.freedesktop.DBus.NameLost</literal></title>
3400 NameLost (STRING name)
3407 <entry>Argument</entry>
3409 <entry>Description</entry>
3415 <entry>STRING</entry>
3416 <entry>Name which was lost</entry>
3423 This signal is sent to a specific application when it loses
3424 ownership of a name.
3428 <sect3 id="bus-messages-name-acquired">
3429 <title><literal>org.freedesktop.DBus.NameAcquired</literal></title>
3433 NameAcquired (STRING name)
3440 <entry>Argument</entry>
3442 <entry>Description</entry>
3448 <entry>STRING</entry>
3449 <entry>Name which was acquired</entry>
3456 This signal is sent to a specific application when it gains
3457 ownership of a name.
3461 <sect3 id="bus-messages-start-service-by-name">
3462 <title><literal>org.freedesktop.DBus.StartServiceByName</literal></title>
3466 UINT32 StartServiceByName (in STRING name, in UINT32 flags)
3473 <entry>Argument</entry>
3475 <entry>Description</entry>
3481 <entry>STRING</entry>
3482 <entry>Name of the service to start</entry>
3486 <entry>UINT32</entry>
3487 <entry>Flags (currently not used)</entry>
3497 <entry>Argument</entry>
3499 <entry>Description</entry>
3505 <entry>UINT32</entry>
3506 <entry>Return value</entry>
3511 Tries to launch the executable associated with a name. For more information, see <xref linkend="message-bus-starting-services"/>.
3515 The return value can be one of the following values:
3520 <entry>Identifier</entry>
3521 <entry>Value</entry>
3522 <entry>Description</entry>
3527 <entry>DBUS_START_REPLY_SUCCESS</entry>
3529 <entry>The service was successfully started.</entry>
3532 <entry>DBUS_START_REPLY_ALREADY_RUNNING</entry>
3534 <entry>A connection already owns the given name.</entry>
3543 <sect3 id="bus-messages-get-name-owner">
3544 <title><literal>org.freedesktop.DBus.GetNameOwner</literal></title>
3548 STRING GetNameOwner (in STRING name)
3555 <entry>Argument</entry>
3557 <entry>Description</entry>
3563 <entry>STRING</entry>
3564 <entry>Name to get the owner of</entry>
3574 <entry>Argument</entry>
3576 <entry>Description</entry>
3582 <entry>STRING</entry>
3583 <entry>Return value, a unique connection name</entry>
3588 Returns the unique connection name of the primary owner of the name
3589 given. If the requested name doesn't have an owner, returns a
3590 <literal>org.freedesktop.DBus.Error.NameHasNoOwner</literal> error.
3594 <sect3 id="bus-messages-get-connection-unix-user">
3595 <title><literal>org.freedesktop.DBus.GetConnectionUnixUser</literal></title>
3599 UINT32 GetConnectionUnixUser (in STRING connection_name)
3606 <entry>Argument</entry>
3608 <entry>Description</entry>
3614 <entry>STRING</entry>
3615 <entry>Name of the connection to query</entry>
3625 <entry>Argument</entry>
3627 <entry>Description</entry>
3633 <entry>UINT32</entry>
3634 <entry>unix user id</entry>
3639 Returns the unix uid of the process connected to the server. If unable to
3640 determine it, a <literal>org.freedesktop.DBus.Error.Failed</literal>
3645 <sect3 id="bus-messages-add-match">
3646 <title><literal>org.freedesktop.DBus.AddMatch</literal></title>
3650 AddMatch (in STRING rule)
3657 <entry>Argument</entry>
3659 <entry>Description</entry>
3665 <entry>STRING</entry>
3666 <entry>Match rule to add to the connection</entry>
3671 Adds a match rule to match messages going through the message bus (see <xref linkend='message-bus-routing-match-rules'/>).
3672 If the bus does not have enough resources the <literal>org.freedesktop.DBus.Error.OOM</literal>
3676 <sect3 id="bus-messages-remove-match">
3677 <title><literal>org.freedesktop.DBus.RemoveMatch</literal></title>
3681 RemoveMatch (in STRING rule)
3688 <entry>Argument</entry>
3690 <entry>Description</entry>
3696 <entry>STRING</entry>
3697 <entry>Match rule to remove from the connection</entry>
3702 Removes the first rule that matches (see <xref linkend='message-bus-routing-match-rules'/>).
3703 If the rule is not found the <literal>org.freedesktop.DBus.Error.MatchRuleNotFound</literal>
3712 <appendix id="implementation-notes">
3713 <title>Implementation notes</title>
3714 <sect1 id="implementation-notes-subsection">
3722 <glossary><title>Glossary</title>
3724 This glossary defines some of the terms used in this specification.
3727 <glossentry id="term-bus-name"><glossterm>Bus Name</glossterm>
3730 The message bus maintains an association between names and
3731 connections. (Normally, there's one connection per application.) A
3732 bus name is simply an identifier used to locate connections. For
3733 example, the hypothetical <literal>com.yoyodyne.Screensaver</literal>
3734 name might be used to send a message to a screensaver from Yoyodyne
3735 Corporation. An application is said to <firstterm>own</firstterm> a
3736 name if the message bus has associated the application's connection
3737 with the name. Names may also have <firstterm>queued
3738 owners</firstterm> (see <xref linkend="term-queued-owner"/>).
3739 The bus assigns a unique name to each connection,
3740 see <xref linkend="term-unique-name"/>. Other names
3741 can be thought of as "well-known names" and are
3742 used to find applications that offer specific functionality.
3747 <glossentry id="term-message"><glossterm>Message</glossterm>
3750 A message is the atomic unit of communication via the D-Bus
3751 protocol. It consists of a <firstterm>header</firstterm> and a
3752 <firstterm>body</firstterm>; the body is made up of
3753 <firstterm>arguments</firstterm>.
3758 <glossentry id="term-message-bus"><glossterm>Message Bus</glossterm>
3761 The message bus is a special application that forwards
3762 or routes messages between a group of applications
3763 connected to the message bus. It also manages
3764 <firstterm>names</firstterm> used for routing
3770 <glossentry id="term-name"><glossterm>Name</glossterm>
3773 See <xref linkend="term-bus-name"/>. "Name" may
3774 also be used to refer to some of the other names
3775 in D-Bus, such as interface names.
3780 <glossentry id="namespace"><glossterm>Namespace</glossterm>
3783 Used to prevent collisions when defining new interfaces or bus
3784 names. The convention used is the same one Java uses for defining
3785 classes: a reversed domain name.
3790 <glossentry id="term-object"><glossterm>Object</glossterm>
3793 Each application contains <firstterm>objects</firstterm>, which have
3794 <firstterm>interfaces</firstterm> and
3795 <firstterm>methods</firstterm>. Objects are referred to by a name,
3796 called a <firstterm>path</firstterm>.
3801 <glossentry id="one-to-one"><glossterm>One-to-One</glossterm>
3804 An application talking directly to another application, without going
3805 through a message bus. One-to-one connections may be "peer to peer" or
3806 "client to server." The D-Bus protocol has no concept of client
3807 vs. server after a connection has authenticated; the flow of messages
3808 is symmetrical (full duplex).
3813 <glossentry id="term-path"><glossterm>Path</glossterm>
3816 Object references (object names) in D-Bus are organized into a
3817 filesystem-style hierarchy, so each object is named by a path. As in
3818 LDAP, there's no difference between "files" and "directories"; a path
3819 can refer to an object, while still having child objects below it.
3824 <glossentry id="term-queued-owner"><glossterm>Queued Name Owner</glossterm>
3827 Each bus name has a primary owner; messages sent to the name go to the
3828 primary owner. However, certain names also maintain a queue of
3829 secondary owners "waiting in the wings." If the primary owner releases
3830 the name, then the first secondary owner in the queue automatically
3831 becomes the new owner of the name.
3836 <glossentry id="term-service"><glossterm>Service</glossterm>
3839 A service is an executable that can be launched by the bus daemon.
3840 Services normally guarantee some particular features, for example they
3841 may guarantee that they will request a specific name such as
3842 "org.freedesktop.Screensaver", have a singleton object
3843 "/org/freedesktop/Application", and that object will implement the
3844 interface "org.freedesktop.ScreensaverControl".
3849 <glossentry id="term-service-description-files"><glossterm>Service Description Files</glossterm>
3852 ".service files" tell the bus about service applications that can be
3853 launched (see <xref linkend="term-service"/>). Most importantly they
3854 provide a mapping from bus names to services that will request those
3855 names when they start up.
3860 <glossentry id="term-unique-name"><glossterm>Unique Connection Name</glossterm>
3863 The special name automatically assigned to each connection by the
3864 message bus. This name will never change owner, and will be unique
3865 (never reused during the lifetime of the message bus).
3866 It will begin with a ':' character.