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. The <literal>INTERFACE</literal> header is required
1188 for signals, though it is optional for method calls.
1192 <sect3 id="message-protocol-types-errors">
1193 <title>Errors</title>
1195 Messages of type <literal>ERROR</literal> are most commonly replies
1196 to a <literal>METHOD_CALL</literal>, but may be returned in reply
1197 to any kind of message. The message bus for example
1198 will return an <literal>ERROR</literal> in reply to a signal emission if
1199 the bus does not have enough memory to send the signal.
1202 An <literal>ERROR</literal> may have any arguments, but if the first
1203 argument is a <literal>STRING</literal>, it must be an error message.
1204 The error message may be logged or shown to the user
1209 <sect3 id="message-protocol-types-notation">
1210 <title>Notation in this document</title>
1212 This document uses a simple pseudo-IDL to describe particular method
1213 calls and signals. Here is an example of a method call:
1215 org.freedesktop.DBus.StartServiceByName (in STRING name, in UINT32 flags,
1216 out UINT32 resultcode)
1218 This means <literal>INTERFACE</literal> = org.freedesktop.DBus, <literal>MEMBER</literal> = StartServiceByName,
1219 <literal>METHOD_CALL</literal> arguments are <literal>STRING</literal> and <literal>UINT32</literal>, <literal>METHOD_RETURN</literal> argument
1220 is <literal>UINT32</literal>. Remember that the <literal>MEMBER</literal> field can't contain any '.' (period)
1221 characters so it's known that the last part of the name in
1222 the "IDL" is the member name.
1225 In C++ that might end up looking like this:
1227 unsigned int org::freedesktop::DBus::StartServiceByName (const char *name,
1228 unsigned int flags);
1230 or equally valid, the return value could be done as an argument:
1232 void org::freedesktop::DBus::StartServiceByName (const char *name,
1234 unsigned int *resultcode);
1236 It's really up to the API designer how they want to make
1237 this look. You could design an API where the namespace wasn't used
1238 in C++, using STL or Qt, using varargs, or whatever you wanted.
1241 Signals are written as follows:
1243 org.freedesktop.DBus.NameLost (STRING name)
1245 Signals don't specify "in" vs. "out" because only
1246 a single direction is possible.
1249 It isn't especially encouraged to use this lame pseudo-IDL in actual
1250 API implementations; you might use the native notation for the
1251 language you're using, or you might use COM or CORBA IDL, for example.
1256 <sect2 id="message-protocol-handling-invalid">
1257 <title>Invalid Protocol and Spec Extensions</title>
1260 For security reasons, the D-Bus protocol should be strictly parsed and
1261 validated, with the exception of defined extension points. Any invalid
1262 protocol or spec violations should result in immediately dropping the
1263 connection without notice to the other end. Exceptions should be
1264 carefully considered, e.g. an exception may be warranted for a
1265 well-understood idiosyncrasy of a widely-deployed implementation. In
1266 cases where the other end of a connection is 100% trusted and known to
1267 be friendly, skipping validation for performance reasons could also make
1268 sense in certain cases.
1272 Generally speaking violations of the "must" requirements in this spec
1273 should be considered possible attempts to exploit security, and violations
1274 of the "should" suggestions should be considered legitimate (though perhaps
1275 they should generate an error in some cases).
1279 The following extension points are built in to D-Bus on purpose and must
1280 not be treated as invalid protocol. The extension points are intended
1281 for use by future versions of this spec, they are not intended for third
1282 parties. At the moment, the only way a third party could extend D-Bus
1283 without breaking interoperability would be to introduce a way to negotiate new
1284 feature support as part of the auth protocol, using EXTENSION_-prefixed
1285 commands. There is not yet a standard way to negotiate features.
1289 In the authentication protocol (see <xref linkend="auth-protocol"/>) unknown
1290 commands result in an ERROR rather than a disconnect. This enables
1291 future extensions to the protocol. Commands starting with EXTENSION_ are
1292 reserved for third parties.
1297 The authentication protocol supports pluggable auth mechanisms.
1302 The address format (see <xref linkend="addresses"/>) supports new
1308 Messages with an unknown type (something other than
1309 <literal>METHOD_CALL</literal>, <literal>METHOD_RETURN</literal>,
1310 <literal>ERROR</literal>, <literal>SIGNAL</literal>) are ignored.
1311 Unknown-type messages must still be well-formed in the same way
1312 as the known messages, however. They still have the normal
1318 Header fields with an unknown or unexpected field code must be ignored,
1319 though again they must still be well-formed.
1324 New standard interfaces (with new methods and signals) can of course be added.
1334 <sect1 id="auth-protocol">
1335 <title>Authentication Protocol</title>
1337 Before the flow of messages begins, two applications must
1338 authenticate. A simple plain-text protocol is used for
1339 authentication; this protocol is a SASL profile, and maps fairly
1340 directly from the SASL specification. The message encoding is
1341 NOT used here, only plain text messages.
1344 In examples, "C:" and "S:" indicate lines sent by the client and
1345 server respectively.
1347 <sect2 id="auth-protocol-overview">
1348 <title>Protocol Overview</title>
1350 The protocol is a line-based protocol, where each line ends with
1351 \r\n. Each line begins with an all-caps ASCII command name containing
1352 only the character range [A-Z_], a space, then any arguments for the
1353 command, then the \r\n ending the line. The protocol is
1354 case-sensitive. All bytes must be in the ASCII character set.
1356 Commands from the client to the server are as follows:
1359 <listitem><para>AUTH [mechanism] [initial-response]</para></listitem>
1360 <listitem><para>CANCEL</para></listitem>
1361 <listitem><para>BEGIN</para></listitem>
1362 <listitem><para>DATA <data in hex encoding></para></listitem>
1363 <listitem><para>ERROR [human-readable error explanation]</para></listitem>
1366 From server to client are as follows:
1369 <listitem><para>REJECTED <space-separated list of mechanism names></para></listitem>
1370 <listitem><para>OK <GUID in hex></para></listitem>
1371 <listitem><para>DATA <data in hex encoding></para></listitem>
1372 <listitem><para>ERROR</para></listitem>
1376 Unofficial extensions to the command set must begin with the letters
1377 "EXTENSION_", to avoid conflicts with future official commands.
1378 For example, "EXTENSION_COM_MYDOMAIN_DO_STUFF".
1381 <sect2 id="auth-nul-byte">
1382 <title>Special credentials-passing nul byte</title>
1384 Immediately after connecting to the server, the client must send a
1385 single nul byte. This byte may be accompanied by credentials
1386 information on some operating systems that use sendmsg() with
1387 SCM_CREDS or SCM_CREDENTIALS to pass credentials over UNIX domain
1388 sockets. However, the nul byte must be sent even on other kinds of
1389 socket, and even on operating systems that do not require a byte to be
1390 sent in order to transmit credentials. The text protocol described in
1391 this document begins after the single nul byte. If the first byte
1392 received from the client is not a nul byte, the server may disconnect
1396 A nul byte in any context other than the initial byte is an error;
1397 the protocol is ASCII-only.
1400 The credentials sent along with the nul byte may be used with the
1401 SASL mechanism EXTERNAL.
1404 <sect2 id="auth-command-auth">
1405 <title>AUTH command</title>
1407 If an AUTH command has no arguments, it is a request to list
1408 available mechanisms. The server must respond with a REJECTED
1409 command listing the mechanisms it understands, or with an error.
1412 If an AUTH command specifies a mechanism, and the server supports
1413 said mechanism, the server should begin exchanging SASL
1414 challenge-response data with the client using DATA commands.
1417 If the server does not support the mechanism given in the AUTH
1418 command, it must send either a REJECTED command listing the mechanisms
1419 it does support, or an error.
1422 If the [initial-response] argument is provided, it is intended for use
1423 with mechanisms that have no initial challenge (or an empty initial
1424 challenge), as if it were the argument to an initial DATA command. If
1425 the selected mechanism has an initial challenge and [initial-response]
1426 was provided, the server should reject authentication by sending
1430 If authentication succeeds after exchanging DATA commands,
1431 an OK command must be sent to the client.
1434 The first octet received by the client after the \r\n of the OK
1435 command must be the first octet of the authenticated/encrypted
1436 stream of D-Bus messages.
1439 The first octet received by the server after the \r\n of the BEGIN
1440 command from the client must be the first octet of the
1441 authenticated/encrypted stream of D-Bus messages.
1444 <sect2 id="auth-command-cancel">
1445 <title>CANCEL Command</title>
1447 At any time up to sending the BEGIN command, the client may send a
1448 CANCEL command. On receiving the CANCEL command, the server must
1449 send a REJECTED command and abort the current authentication
1453 <sect2 id="auth-command-data">
1454 <title>DATA Command</title>
1456 The DATA command may come from either client or server, and simply
1457 contains a hex-encoded block of data to be interpreted
1458 according to the SASL mechanism in use.
1461 Some SASL mechanisms support sending an "empty string";
1462 FIXME we need some way to do this.
1465 <sect2 id="auth-command-begin">
1466 <title>BEGIN Command</title>
1468 The BEGIN command acknowledges that the client has received an
1469 OK command from the server, and that the stream of messages
1473 The first octet received by the server after the \r\n of the BEGIN
1474 command from the client must be the first octet of the
1475 authenticated/encrypted stream of D-Bus messages.
1478 <sect2 id="auth-command-rejected">
1479 <title>REJECTED Command</title>
1481 The REJECTED command indicates that the current authentication
1482 exchange has failed, and further exchange of DATA is inappropriate.
1483 The client would normally try another mechanism, or try providing
1484 different responses to challenges.
1486 Optionally, the REJECTED command has a space-separated list of
1487 available auth mechanisms as arguments. If a server ever provides
1488 a list of supported mechanisms, it must provide the same list
1489 each time it sends a REJECTED message. Clients are free to
1490 ignore all lists received after the first.
1493 <sect2 id="auth-command-ok">
1494 <title>OK Command</title>
1496 The OK command indicates that the client has been authenticated,
1497 and that further communication will be a stream of D-Bus messages
1498 (optionally encrypted, as negotiated) rather than this protocol.
1501 The first octet received by the client after the \r\n of the OK
1502 command must be the first octet of the authenticated/encrypted
1503 stream of D-Bus messages.
1506 The client must respond to the OK command by sending a BEGIN
1507 command, followed by its stream of messages, or by disconnecting.
1508 The server must not accept additional commands using this protocol
1509 after the OK command has been sent.
1512 The OK command has one argument, which is the GUID of the server.
1513 See <xref linkend="addresses"/> for more on server GUIDs.
1516 <sect2 id="auth-command-error">
1517 <title>ERROR Command</title>
1519 The ERROR command indicates that either server or client did not
1520 know a command, does not accept the given command in the current
1521 context, or did not understand the arguments to the command. This
1522 allows the protocol to be extended; a client or server can send a
1523 command present or permitted only in new protocol versions, and if
1524 an ERROR is received instead of an appropriate response, fall back
1525 to using some other technique.
1528 If an ERROR is sent, the server or client that sent the
1529 error must continue as if the command causing the ERROR had never been
1530 received. However, the the server or client receiving the error
1531 should try something other than whatever caused the error;
1532 if only canceling/rejecting the authentication.
1535 If the D-Bus protocol changes incompatibly at some future time,
1536 applications implementing the new protocol would probably be able to
1537 check for support of the new protocol by sending a new command and
1538 receiving an ERROR from applications that don't understand it. Thus the
1539 ERROR feature of the auth protocol is an escape hatch that lets us
1540 negotiate extensions or changes to the D-Bus protocol in the future.
1543 <sect2 id="auth-examples">
1544 <title>Authentication examples</title>
1548 <title>Example of successful magic cookie authentication</title>
1550 (MAGIC_COOKIE is a made up mechanism)
1552 C: AUTH MAGIC_COOKIE 3138363935333137393635383634
1558 <title>Example of finding out mechanisms then picking one</title>
1561 S: REJECTED KERBEROS_V4 SKEY
1562 C: AUTH SKEY 7ab83f32ee
1563 S: DATA 8799cabb2ea93e
1564 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1570 <title>Example of client sends unknown command then falls back to regular auth</title>
1574 C: AUTH MAGIC_COOKIE 3736343435313230333039
1580 <title>Example of server doesn't support initial auth mechanism</title>
1582 C: AUTH MAGIC_COOKIE 3736343435313230333039
1583 S: REJECTED KERBEROS_V4 SKEY
1584 C: AUTH SKEY 7ab83f32ee
1585 S: DATA 8799cabb2ea93e
1586 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1592 <title>Example of wrong password or the like followed by successful retry</title>
1594 C: AUTH MAGIC_COOKIE 3736343435313230333039
1595 S: REJECTED KERBEROS_V4 SKEY
1596 C: AUTH SKEY 7ab83f32ee
1597 S: DATA 8799cabb2ea93e
1598 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1600 C: AUTH SKEY 7ab83f32ee
1601 S: DATA 8799cabb2ea93e
1602 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1608 <title>Example of skey cancelled and restarted</title>
1610 C: AUTH MAGIC_COOKIE 3736343435313230333039
1611 S: REJECTED KERBEROS_V4 SKEY
1612 C: AUTH SKEY 7ab83f32ee
1613 S: DATA 8799cabb2ea93e
1616 C: AUTH SKEY 7ab83f32ee
1617 S: DATA 8799cabb2ea93e
1618 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
1625 <sect2 id="auth-states">
1626 <title>Authentication state diagrams</title>
1629 This section documents the auth protocol in terms of
1630 a state machine for the client and the server. This is
1631 probably the most robust way to implement the protocol.
1634 <sect3 id="auth-states-client">
1635 <title>Client states</title>
1638 To more precisely describe the interaction between the
1639 protocol state machine and the authentication mechanisms the
1640 following notation is used: MECH(CHALL) means that the
1641 server challenge CHALL was fed to the mechanism MECH, which
1647 CONTINUE(RESP) means continue the auth conversation
1648 and send RESP as the response to the server;
1654 OK(RESP) means that after sending RESP to the server
1655 the client side of the auth conversation is finished
1656 and the server should return "OK";
1662 ERROR means that CHALL was invalid and could not be
1668 Both RESP and CHALL may be empty.
1672 The Client starts by getting an initial response from the
1673 default mechanism and sends AUTH MECH RESP, or AUTH MECH if
1674 the mechanism did not provide an initial response. If the
1675 mechanism returns CONTINUE, the client starts in state
1676 <emphasis>WaitingForData</emphasis>, if the mechanism
1677 returns OK the client starts in state
1678 <emphasis>WaitingForOK</emphasis>.
1682 The client should keep track of available mechanisms and
1683 which it mechanisms it has already attempted. This list is
1684 used to decide which AUTH command to send. When the list is
1685 exhausted, the client should give up and close the
1690 <title><emphasis>WaitingForData</emphasis></title>
1698 MECH(CHALL) returns CONTINUE(RESP) → send
1700 <emphasis>WaitingForData</emphasis>
1704 MECH(CHALL) returns OK(RESP) → send DATA
1705 RESP, goto <emphasis>WaitingForOK</emphasis>
1709 MECH(CHALL) returns ERROR → send ERROR
1710 [msg], goto <emphasis>WaitingForData</emphasis>
1718 Receive REJECTED [mechs] →
1719 send AUTH [next mech], goto
1720 WaitingForData or <emphasis>WaitingForOK</emphasis>
1725 Receive ERROR → send
1727 <emphasis>WaitingForReject</emphasis>
1732 Receive OK → send
1733 BEGIN, terminate auth
1734 conversation, authenticated
1739 Receive anything else → send
1741 <emphasis>WaitingForData</emphasis>
1749 <title><emphasis>WaitingForOK</emphasis></title>
1754 Receive OK → send BEGIN, terminate auth
1755 conversation, <emphasis>authenticated</emphasis>
1760 Receive REJECT [mechs] → send AUTH [next mech],
1761 goto <emphasis>WaitingForData</emphasis> or
1762 <emphasis>WaitingForOK</emphasis>
1768 Receive DATA → send CANCEL, goto
1769 <emphasis>WaitingForReject</emphasis>
1775 Receive ERROR → send CANCEL, goto
1776 <emphasis>WaitingForReject</emphasis>
1782 Receive anything else → send ERROR, goto
1783 <emphasis>WaitingForOK</emphasis>
1791 <title><emphasis>WaitingForReject</emphasis></title>
1796 Receive REJECT [mechs] → send AUTH [next mech],
1797 goto <emphasis>WaitingForData</emphasis> or
1798 <emphasis>WaitingForOK</emphasis>
1804 Receive anything else → terminate auth
1805 conversation, disconnect
1814 <sect3 id="auth-states-server">
1815 <title>Server states</title>
1818 For the server MECH(RESP) means that the client response
1819 RESP was fed to the the mechanism MECH, which returns one of
1824 CONTINUE(CHALL) means continue the auth conversation and
1825 send CHALL as the challenge to the client;
1831 OK means that the client has been successfully
1838 REJECT means that the client failed to authenticate or
1839 there was an error in RESP.
1844 The server starts out in state
1845 <emphasis>WaitingForAuth</emphasis>. If the client is
1846 rejected too many times the server must disconnect the
1851 <title><emphasis>WaitingForAuth</emphasis></title>
1857 Receive AUTH → send REJECTED [mechs], goto
1858 <emphasis>WaitingForAuth</emphasis>
1864 Receive AUTH MECH RESP
1868 MECH not valid mechanism → send REJECTED
1870 <emphasis>WaitingForAuth</emphasis>
1874 MECH(RESP) returns CONTINUE(CHALL) → send
1876 <emphasis>WaitingForData</emphasis>
1880 MECH(RESP) returns OK → send OK, goto
1881 <emphasis>WaitingForBegin</emphasis>
1885 MECH(RESP) returns REJECT → send REJECTED
1887 <emphasis>WaitingForAuth</emphasis>
1895 Receive BEGIN → terminate
1896 auth conversation, disconnect
1902 Receive ERROR → send REJECTED [mechs], goto
1903 <emphasis>WaitingForAuth</emphasis>
1909 Receive anything else → send
1911 <emphasis>WaitingForAuth</emphasis>
1920 <title><emphasis>WaitingForData</emphasis></title>
1928 MECH(RESP) returns CONTINUE(CHALL) → send
1930 <emphasis>WaitingForData</emphasis>
1934 MECH(RESP) returns OK → send OK, goto
1935 <emphasis>WaitingForBegin</emphasis>
1939 MECH(RESP) returns REJECT → send REJECTED
1941 <emphasis>WaitingForAuth</emphasis>
1949 Receive BEGIN → terminate auth conversation,
1956 Receive CANCEL → send REJECTED [mechs], goto
1957 <emphasis>WaitingForAuth</emphasis>
1963 Receive ERROR → send REJECTED [mechs], goto
1964 <emphasis>WaitingForAuth</emphasis>
1970 Receive anything else → send ERROR, goto
1971 <emphasis>WaitingForData</emphasis>
1979 <title><emphasis>WaitingForBegin</emphasis></title>
1984 Receive BEGIN → terminate auth conversation,
1985 client authenticated
1991 Receive CANCEL → send REJECTED [mechs], goto
1992 <emphasis>WaitingForAuth</emphasis>
1998 Receive ERROR → send REJECTED [mechs], goto
1999 <emphasis>WaitingForAuth</emphasis>
2005 Receive anything else → send ERROR, goto
2006 <emphasis>WaitingForBegin</emphasis>
2016 <sect2 id="auth-mechanisms">
2017 <title>Authentication mechanisms</title>
2019 This section describes some new authentication mechanisms.
2020 D-Bus also allows any standard SASL mechanism of course.
2022 <sect3 id="auth-mechanisms-sha">
2023 <title>DBUS_COOKIE_SHA1</title>
2025 The DBUS_COOKIE_SHA1 mechanism is designed to establish that a client
2026 has the ability to read a private file owned by the user being
2027 authenticated. If the client can prove that it has access to a secret
2028 cookie stored in this file, then the client is authenticated.
2029 Thus the security of DBUS_COOKIE_SHA1 depends on a secure home
2033 Authentication proceeds as follows:
2037 The client sends the username it would like to authenticate
2043 The server sends the name of its "cookie context" (see below); a
2044 space character; the integer ID of the secret cookie the client
2045 must demonstrate knowledge of; a space character; then a
2046 hex-encoded randomly-generated challenge string.
2051 The client locates the cookie, and generates its own hex-encoded
2052 randomly-generated challenge string. The client then
2053 concatenates the server's hex-encoded challenge, a ":"
2054 character, its own hex-encoded challenge, another ":" character,
2055 and the hex-encoded cookie. It computes the SHA-1 hash of this
2056 composite string. It sends back to the server the client's
2057 hex-encoded challenge string, a space character, and the SHA-1
2063 The server generates the same concatenated string used by the
2064 client and computes its SHA-1 hash. It compares the hash with
2065 the hash received from the client; if the two hashes match, the
2066 client is authenticated.
2072 Each server has a "cookie context," which is a name that identifies a
2073 set of cookies that apply to that server. A sample context might be
2074 "org_freedesktop_session_bus". Context names must be valid ASCII,
2075 nonzero length, and may not contain the characters slash ("/"),
2076 backslash ("\"), space (" "), newline ("\n"), carriage return ("\r"),
2077 tab ("\t"), or period ("."). There is a default context,
2078 "org_freedesktop_general" that's used by servers that do not specify
2082 Cookies are stored in a user's home directory, in the directory
2083 <filename>~/.dbus-keyrings/</filename>. This directory must
2084 not be readable or writable by other users. If it is,
2085 clients and servers must ignore it. The directory
2086 contains cookie files named after the cookie context.
2089 A cookie file contains one cookie per line. Each line
2090 has three space-separated fields:
2094 The cookie ID number, which must be a non-negative integer and
2095 may not be used twice in the same file.
2100 The cookie's creation time, in UNIX seconds-since-the-epoch
2106 The cookie itself, a hex-encoded random block of bytes. The cookie
2107 may be of any length, though obviously security increases
2108 as the length increases.
2114 Only server processes modify the cookie file.
2115 They must do so with this procedure:
2119 Create a lockfile name by appending ".lock" to the name of the
2120 cookie file. The server should attempt to create this file
2121 using <literal>O_CREAT | O_EXCL</literal>. If file creation
2122 fails, the lock fails. Servers should retry for a reasonable
2123 period of time, then they may choose to delete an existing lock
2124 to keep users from having to manually delete a stale
2125 lock. <footnote><para>Lockfiles are used instead of real file
2126 locking <literal>fcntl()</literal> because real locking
2127 implementations are still flaky on network
2128 filesystems.</para></footnote>
2133 Once the lockfile has been created, the server loads the cookie
2134 file. It should then delete any cookies that are old (the
2135 timeout can be fairly short), or more than a reasonable
2136 time in the future (so that cookies never accidentally
2137 become permanent, if the clock was set far into the future
2138 at some point). If no recent keys remain, the
2139 server may generate a new key.
2144 The pruned and possibly added-to cookie file
2145 must be resaved atomically (using a temporary
2146 file which is rename()'d).
2151 The lock must be dropped by deleting the lockfile.
2157 Clients need not lock the file in order to load it,
2158 because servers are required to save the file atomically.
2163 <sect1 id="addresses">
2164 <title>Server Addresses</title>
2166 Server addresses consist of a transport name followed by a colon, and
2167 then an optional, comma-separated list of keys and values in the form key=value.
2168 Each value is escaped.
2172 <programlisting>unix:path=/tmp/dbus-test</programlisting>
2173 Which is the address to a unix socket with the path /tmp/dbus-test.
2176 Value escaping is similar to URI escaping but simpler.
2180 The set of optionally-escaped bytes is:
2181 <literal>[0-9A-Za-z_-/.\]</literal>. To escape, each
2182 <emphasis>byte</emphasis> (note, not character) which is not in the
2183 set of optionally-escaped bytes must be replaced with an ASCII
2184 percent (<literal>%</literal>) and the value of the byte in hex.
2185 The hex value must always be two digits, even if the first digit is
2186 zero. The optionally-escaped bytes may be escaped if desired.
2191 To unescape, append each byte in the value; if a byte is an ASCII
2192 percent (<literal>%</literal>) character then append the following
2193 hex value instead. It is an error if a <literal>%</literal> byte
2194 does not have two hex digits following. It is an error if a
2195 non-optionally-escaped byte is seen unescaped.
2199 The set of optionally-escaped bytes is intended to preserve address
2200 readability and convenience.
2204 A server may specify a key-value pair with the key <literal>guid</literal>
2205 and the value a hex-encoded 16-byte sequence. This globally unique ID must
2206 be created by filling the first 4 bytes with a 32-bit UNIX time since the
2207 epoch, and the remaining 12 bytes with random bytes. If present, the GUID
2208 may be used to distinguish one server from another. A server should use a
2209 different GUID for each address it listens on. For example, if a message
2210 bus daemon offers both UNIX domain socket and TCP connections, but treats
2211 clients the same regardless of how they connect, those two connections are
2212 equivalent post-connection but should have distinct GUIDs to distinguish
2213 the kinds of connection.
2217 The intent of the GUID feature is to allow a client to avoid opening
2218 multiple identical connections to the same server, by allowing the client
2219 to check whether an address corresponds to an already-existing connection.
2220 Comparing two addresses is insufficient, because addresses can be recycled
2221 by distinct servers.
2225 [FIXME clarify if attempting to connect to each is a requirement
2226 or just a suggestion]
2227 When connecting to a server, multiple server addresses can be
2228 separated by a semi-colon. The library will then try to connect
2229 to the first address and if that fails, it'll try to connect to
2230 the next one specified, and so forth. For example
2231 <programlisting>unix:path=/tmp/dbus-test;unix:path=/tmp/dbus-test2</programlisting>
2236 <sect1 id="transports">
2237 <title>Transports</title>
2239 [FIXME we need to specify in detail each transport and its possible arguments]
2241 Current transports include: unix domain sockets (including
2242 abstract namespace on linux), TCP/IP, and a debug/testing transport using
2243 in-process pipes. Future possible transports include one that
2244 tunnels over X11 protocol.
2247 <sect2 id="transports-unix-domain-sockets">
2248 <title>Unix Domain Sockets</title>
2250 Unix domain sockets can be either paths in the file system or on Linux
2251 kernels, they can be abstract which are similar to paths but
2252 do not show up in the file system.
2256 When a socket is opened by the D-Bus library it truncates the path
2257 name right before the first trailing Nul byte. This is true for both
2258 normal paths and abstract paths. Note that this is a departure from
2259 previous versions of D-Bus that would create sockets with a fixed
2260 length path name. Names which were shorter than the fixed length
2261 would be padded by Nul bytes.
2266 <sect1 id="naming-conventions">
2267 <title>Naming Conventions</title>
2270 D-Bus namespaces are all lowercase and correspond to reversed domain
2271 names, as with Java. e.g. "org.freedesktop"
2274 Interface, signal, method, and property names are "WindowsStyleCaps", note
2275 that the first letter is capitalized, unlike Java.
2278 Object paths are normally all lowercase with underscores used rather than
2283 <sect1 id="standard-interfaces">
2284 <title>Standard Interfaces</title>
2286 See <xref linkend="message-protocol-types-notation"/> for details on
2287 the notation used in this section. There are some standard interfaces
2288 that may be useful across various D-Bus applications.
2290 <sect2 id="standard-interfaces-peer">
2291 <title><literal>org.freedesktop.DBus.Peer</literal></title>
2293 The <literal>org.freedesktop.DBus.Peer</literal> interface
2296 org.freedesktop.DBus.Peer.Ping ()
2297 org.freedesktop.DBus.Peer.GetMachineId (out STRING machine_uuid)
2301 On receipt of the <literal>METHOD_CALL</literal> message
2302 <literal>org.freedesktop.DBus.Peer.Ping</literal>, an application should do
2303 nothing other than reply with a <literal>METHOD_RETURN</literal> as
2304 usual. It does not matter which object path a ping is sent to. The
2305 reference implementation handles this method automatically.
2308 On receipt of the <literal>METHOD_CALL</literal> message
2309 <literal>org.freedesktop.DBus.Peer.GetMachineId</literal>, an application should
2310 reply with a <literal>METHOD_RETURN</literal> containing a hex-encoded
2311 UUID representing the identity of the machine the process is running on.
2312 This UUID must be the same for all processes on a single system at least
2313 until that system next reboots. It should be the same across reboots
2314 if possible, but this is not always possible to implement and is not
2316 It does not matter which object path a GetMachineId is sent to. The
2317 reference implementation handles this method automatically.
2320 The UUID is intended to be per-instance-of-the-operating-system, so may represent
2321 a virtual machine running on a hypervisor, rather than a physical machine.
2322 Basically if two processes see the same UUID, they should also see the same
2323 shared memory, UNIX domain sockets, process IDs, and other features that require
2324 a running OS kernel in common between the processes.
2327 The UUID is often used where other programs might use a hostname. Hostnames
2328 can change without rebooting, however, or just be "localhost" - so the UUID
2332 The UUID must contain 128 bits of data and be hex-encoded (meaning, the hex
2333 string contains 32 ASCII characters). The hex-encoded string may not contain
2334 hyphens or other non-hex-digit characters, and it must be exactly 32 characters long.
2335 To generate a UUID, the recommended algorithm is to put the current time in seconds
2336 since the UNIX epoch in the last 32 bits of the UUID, and to put randomly-generated bits
2337 in the first 96 bits of the UUID.
2341 <sect2 id="standard-interfaces-introspectable">
2342 <title><literal>org.freedesktop.DBus.Introspectable</literal></title>
2344 This interface has one method:
2346 org.freedesktop.DBus.Introspectable.Introspect (out STRING xml_data)
2350 Objects instances may implement
2351 <literal>Introspect</literal> which returns an XML description of
2352 the object, including its interfaces (with signals and methods), objects
2353 below it in the object path tree, and its properties.
2356 <xref linkend="introspection-format"/> describes the format of this XML string.
2359 <sect2 id="standard-interfaces-properties">
2360 <title><literal>org.freedesktop.DBus.Properties</literal></title>
2362 Many native APIs will have a concept of object <firstterm>properties</firstterm>
2363 or <firstterm>attributes</firstterm>. These can be exposed via the
2364 <literal>org.freedesktop.DBus.Properties</literal> interface.
2368 org.freedesktop.DBus.Properties.Get (in STRING interface_name,
2369 in STRING property_name,
2371 org.freedesktop.DBus.Properties.Set (in STRING interface_name,
2372 in STRING property_name,
2377 The available properties and whether they are writable can be determined
2378 by calling <literal>org.freedesktop.DBus.Introspectable.Introspect</literal>,
2379 see <xref linkend="standard-interfaces-introspectable"/>.
2382 An empty string may be provided for the interface name; in this case,
2383 if there are multiple properties on an object with the same name,
2384 the results are undefined (picking one by according to an arbitrary
2385 deterministic rule, or returning an error, are the reasonable
2391 <sect1 id="introspection-format">
2392 <title>Introspection Data Format</title>
2394 As described in <xref linkend="standard-interfaces-introspectable"/>,
2395 objects may be introspected at runtime, returning an XML string
2396 that describes the object. The same XML format may be used in
2397 other contexts as well, for example as an "IDL" for generating
2398 static language bindings.
2401 Here is an example of introspection data:
2403 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
2404 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2405 <node name="/org/freedesktop/sample_object">
2406 <interface name="org.freedesktop.SampleInterface">
2407 <method name="Frobate">
2408 <arg name="foo" type="i" direction="in"/>
2409 <arg name="bar" type="s" direction="out"/>
2410 <arg name="baz" type="a{us}" direction="out"/>
2411 <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
2413 <method name="Bazify">
2414 <arg name="bar" type="(iiu)" direction="in"/>
2415 <arg name="bar" type="v" direction="out"/>
2417 <method name="Mogrify">
2418 <arg name="bar" type="(iiav)" direction="in"/>
2420 <signal name="Changed">
2421 <arg name="new_value" type="b"/>
2423 <property name="Bar" type="y" access="readwrite"/>
2425 <node name="child_of_sample_object"/>
2426 <node name="another_child_of_sample_object"/>
2431 A more formal DTD and spec needs writing, but here are some quick notes.
2435 Only the root <node> element can omit the node name, as it's
2436 known to be the object that was introspected. If the root
2437 <node> does have a name attribute, it must be an absolute
2438 object path. If child <node> have object paths, they must be
2444 If a child <node> has any sub-elements, then they
2445 must represent a complete introspection of the child.
2446 If a child <node> is empty, then it may or may
2447 not have sub-elements; the child must be introspected
2448 in order to find out. The intent is that if an object
2449 knows that its children are "fast" to introspect
2450 it can go ahead and return their information, but
2451 otherwise it can omit it.
2456 The direction element on <arg> may be omitted,
2457 in which case it defaults to "in" for method calls
2458 and "out" for signals. Signals only allow "out"
2459 so while direction may be specified, it's pointless.
2464 The possible directions are "in" and "out",
2465 unlike CORBA there is no "inout"
2470 The possible property access flags are
2471 "readwrite", "read", and "write"
2476 Multiple interfaces can of course be listed for
2482 The "name" attribute on arguments is optional.
2488 Method, interface, property, and signal elements may have
2489 "annotations", which are generic key/value pairs of metadata.
2490 They are similar conceptually to Java's annotations and C# attributes.
2491 Well-known annotations:
2498 <entry>Values (separated by ,)</entry>
2499 <entry>Description</entry>
2504 <entry>org.freedesktop.DBus.Deprecated</entry>
2505 <entry>true,false</entry>
2506 <entry>Whether or not the entity is deprecated; defaults to false</entry>
2509 <entry>org.freedesktop.DBus.GLib.CSymbol</entry>
2510 <entry>(string)</entry>
2511 <entry>The C symbol; may be used for methods and interfaces</entry>
2514 <entry>org.freedesktop.DBus.Method.NoReply</entry>
2515 <entry>true,false</entry>
2516 <entry>If set, don't expect a reply to the method call; defaults to false.</entry>
2522 <sect1 id="message-bus">
2523 <title>Message Bus Specification</title>
2524 <sect2 id="message-bus-overview">
2525 <title>Message Bus Overview</title>
2527 The message bus accepts connections from one or more applications.
2528 Once connected, applications can exchange messages with other
2529 applications that are also connected to the bus.
2532 In order to route messages among connections, the message bus keeps a
2533 mapping from names to connections. Each connection has one
2534 unique-for-the-lifetime-of-the-bus name automatically assigned.
2535 Applications may request additional names for a connection. Additional
2536 names are usually "well-known names" such as
2537 "org.freedesktop.TextEditor". When a name is bound to a connection,
2538 that connection is said to <firstterm>own</firstterm> the name.
2541 The bus itself owns a special name, <literal>org.freedesktop.DBus</literal>.
2542 This name routes messages to the bus, allowing applications to make
2543 administrative requests. For example, applications can ask the bus
2544 to assign a name to a connection.
2547 Each name may have <firstterm>queued owners</firstterm>. When an
2548 application requests a name for a connection and the name is already in
2549 use, the bus will optionally add the connection to a queue waiting for
2550 the name. If the current owner of the name disconnects or releases
2551 the name, the next connection in the queue will become the new owner.
2555 This feature causes the right thing to happen if you start two text
2556 editors for example; the first one may request "org.freedesktop.TextEditor",
2557 and the second will be queued as a possible owner of that name. When
2558 the first exits, the second will take over.
2562 Messages may have a <literal>DESTINATION</literal> field (see <xref
2563 linkend="message-protocol-header-fields"/>). If the
2564 <literal>DESTINATION</literal> field is present, it specifies a message
2565 recipient by name. Method calls and replies normally specify this field.
2569 Signals normally do not specify a destination; they are sent to all
2570 applications with <firstterm>message matching rules</firstterm> that
2575 When the message bus receives a method call, if the
2576 <literal>DESTINATION</literal> field is absent, the call is taken to be
2577 a standard one-to-one message and interpreted by the message bus
2578 itself. For example, sending an
2579 <literal>org.freedesktop.DBus.Peer.Ping</literal> message with no
2580 <literal>DESTINATION</literal> will cause the message bus itself to
2581 reply to the ping immediately; the message bus will not make this
2582 message visible to other applications.
2586 Continuing the <literal>org.freedesktop.DBus.Peer.Ping</literal> example, if
2587 the ping message were sent with a <literal>DESTINATION</literal> name of
2588 <literal>com.yoyodyne.Screensaver</literal>, then the ping would be
2589 forwarded, and the Yoyodyne Corporation screensaver application would be
2590 expected to reply to the ping.
2594 <sect2 id="message-bus-names">
2595 <title>Message Bus Names</title>
2597 Each connection has at least one name, assigned at connection time and
2598 returned in response to the
2599 <literal>org.freedesktop.DBus.Hello</literal> method call. This
2600 automatically-assigned name is called the connection's <firstterm>unique
2601 name</firstterm>. Unique names are never reused for two different
2602 connections to the same bus.
2605 Ownership of a unique name is a prerequisite for interaction with
2606 the message bus. It logically follows that the unique name is always
2607 the first name that an application comes to own, and the last
2608 one that it loses ownership of.
2611 Unique connection names must begin with the character ':' (ASCII colon
2612 character); bus names that are not unique names must not begin
2613 with this character. (The bus must reject any attempt by an application
2614 to manually request a name beginning with ':'.) This restriction
2615 categorically prevents "spoofing"; messages sent to a unique name
2616 will always go to the expected connection.
2619 When a connection is closed, all the names that it owns are deleted (or
2620 transferred to the next connection in the queue if any).
2623 A connection can request additional names to be associated with it using
2624 the <literal>org.freedesktop.DBus.RequestName</literal> message. <xref
2625 linkend="message-protocol-names-bus"/> describes the format of a valid
2626 name. These names can be released again using the
2627 <literal>org.freedesktop.DBus.ReleaseName</literal> message.
2630 <sect3 id="bus-messages-request-name">
2631 <title><literal>org.freedesktop.DBus.RequestName</literal></title>
2635 UINT32 RequestName (in STRING name, in UINT32 flags)
2642 <entry>Argument</entry>
2644 <entry>Description</entry>
2650 <entry>STRING</entry>
2651 <entry>Name to request</entry>
2655 <entry>UINT32</entry>
2656 <entry>Flags</entry>
2666 <entry>Argument</entry>
2668 <entry>Description</entry>
2674 <entry>UINT32</entry>
2675 <entry>Return value</entry>
2682 This method call should be sent to
2683 <literal>org.freedesktop.DBus</literal> and asks the message bus to
2684 assign the given name to the method caller. Each name maintains a
2685 queue of possible owners, where the head of the queue is the primary
2686 or current owner of the name. Each potential owner in the queue
2687 maintains the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and
2688 DBUS_NAME_FLAG_DO_NOT_QUEUE settings from its latest RequestName
2689 call. When RequestName is invoked the following occurs:
2693 If the method caller is currently the primary owner of the name,
2694 the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and DBUS_NAME_FLAG_DO_NOT_QUEUE
2695 values are updated with the values from the new RequestName call,
2696 and nothing further happens.
2702 If the current primary owner (head of the queue) has
2703 DBUS_NAME_FLAG_ALLOW_REPLACEMENT set, and the RequestName
2704 invocation has the DBUS_NAME_FLAG_REPLACE_EXISTING flag, then
2705 the caller of RequestName replaces the current primary owner at
2706 the head of the queue and the current primary owner moves to the
2707 second position in the queue. If the caller of RequestName was
2708 in the queue previously its flags are updated with the values from
2709 the new RequestName in addition to moving it to the head of the queue.
2715 If replacement is not possible, and the method caller is
2716 currently in the queue but not the primary owner, its flags are
2717 updated with the values from the new RequestName call.
2723 If replacement is not possible, and the method caller is
2724 currently not in the queue, the method caller is appended to the
2731 If any connection in the queue has DBUS_NAME_FLAG_DO_NOT_QUEUE
2732 set and is not the primary owner, it is removed from the
2733 queue. This can apply to the previous primary owner (if it
2734 was replaced) or the method caller (if it updated the
2735 DBUS_NAME_FLAG_DO_NOT_QUEUE flag while still stuck in the
2736 queue, or if it was just added to the queue with that flag set).
2742 Note that DBUS_NAME_FLAG_REPLACE_EXISTING results in "jumping the
2743 queue," even if another application already in the queue had specified
2744 DBUS_NAME_FLAG_REPLACE_EXISTING. This comes up if a primary owner
2745 that does not allow replacement goes away, and the next primary owner
2746 does allow replacement. In this case, queued items that specified
2747 DBUS_NAME_FLAG_REPLACE_EXISTING <emphasis>do not</emphasis>
2748 automatically replace the new primary owner. In other words,
2749 DBUS_NAME_FLAG_REPLACE_EXISTING is not saved, it is only used at the
2750 time RequestName is called. This is deliberate to avoid an infinite loop
2751 anytime two applications are both DBUS_NAME_FLAG_ALLOW_REPLACEMENT
2752 and DBUS_NAME_FLAG_REPLACE_EXISTING.
2755 The flags argument contains any of the following values logically ORed
2762 <entry>Conventional Name</entry>
2763 <entry>Value</entry>
2764 <entry>Description</entry>
2769 <entry>DBUS_NAME_FLAG_ALLOW_REPLACEMENT</entry>
2773 If an application A specifies this flag and succeeds in
2774 becoming the owner of the name, and another application B
2775 later calls RequestName with the
2776 DBUS_NAME_FLAG_REPLACE_EXISTING flag, then application A
2777 will lose ownership and receive a
2778 <literal>org.freedesktop.DBus.NameLost</literal> signal, and
2779 application B will become the new owner. If DBUS_NAME_FLAG_ALLOW_REPLACEMENT
2780 is not specified by application A, or DBUS_NAME_FLAG_REPLACE_EXISTING
2781 is not specified by application B, then application B will not replace
2782 application A as the owner.
2787 <entry>DBUS_NAME_FLAG_REPLACE_EXISTING</entry>
2791 Try to replace the current owner if there is one. If this
2792 flag is not set the application will only become the owner of
2793 the name if there is no current owner. If this flag is set,
2794 the application will replace the current owner if
2795 the current owner specified DBUS_NAME_FLAG_ALLOW_REPLACEMENT.
2800 <entry>DBUS_NAME_FLAG_DO_NOT_QUEUE</entry>
2804 Without this flag, if an application requests a name that is
2805 already owned, the application will be placed in a queue to
2806 own the name when the current owner gives it up. If this
2807 flag is given, the application will not be placed in the
2808 queue, the request for the name will simply fail. This flag
2809 also affects behavior when an application is replaced as
2810 name owner; by default the application moves back into the
2811 waiting queue, unless this flag was provided when the application
2812 became the name owner.
2820 The return code can be one of the following values:
2826 <entry>Conventional Name</entry>
2827 <entry>Value</entry>
2828 <entry>Description</entry>
2833 <entry>DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER</entry>
2834 <entry>1</entry> <entry>The caller is now the primary owner of
2835 the name, replacing any previous owner. Either the name had no
2836 owner before, or the caller specified
2837 DBUS_NAME_FLAG_REPLACE_EXISTING and the current owner specified
2838 DBUS_NAME_FLAG_ALLOW_REPLACEMENT.</entry>
2841 <entry>DBUS_REQUEST_NAME_REPLY_IN_QUEUE</entry>
2844 <entry>The name already had an owner,
2845 DBUS_NAME_FLAG_DO_NOT_QUEUE was not specified, and either
2846 the current owner did not specify
2847 DBUS_NAME_FLAG_ALLOW_REPLACEMENT or the requesting
2848 application did not specify DBUS_NAME_FLAG_REPLACE_EXISTING.
2852 <entry>DBUS_REQUEST_NAME_REPLY_EXISTS</entry> <entry>3</entry>
2853 <entry>The name already has an owner,
2854 DBUS_NAME_FLAG_DO_NOT_QUEUE was specified, and either
2855 DBUS_NAME_FLAG_ALLOW_REPLACEMENT was not specified by the
2856 current owner, or DBUS_NAME_FLAG_REPLACE_EXISTING was not
2857 specified by the requesting application.</entry>
2860 <entry>DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER</entry>
2862 <entry>The application trying to request ownership of a name is already the owner of it.</entry>
2870 <sect3 id="bus-messages-release-name">
2871 <title><literal>org.freedesktop.DBus.ReleaseName</literal></title>
2875 UINT32 ReleaseName (in STRING name)
2882 <entry>Argument</entry>
2884 <entry>Description</entry>
2890 <entry>STRING</entry>
2891 <entry>Name to release</entry>
2901 <entry>Argument</entry>
2903 <entry>Description</entry>
2909 <entry>UINT32</entry>
2910 <entry>Return value</entry>
2917 This method call should be sent to
2918 <literal>org.freedesktop.DBus</literal> and asks the message bus to
2919 release the method caller's claim to the given name. If the caller is
2920 the primary owner, a new primary owner will be selected from the
2921 queue if any other owners are waiting. If the caller is waiting in
2922 the queue for the name, the caller will removed from the queue and
2923 will not be made an owner of the name if it later becomes available.
2924 If there are no other owners in the queue for the name, it will be
2925 removed from the bus entirely.
2927 The return code can be one of the following values:
2933 <entry>Conventional Name</entry>
2934 <entry>Value</entry>
2935 <entry>Description</entry>
2940 <entry>DBUS_RELEASE_NAME_REPLY_RELEASED</entry>
2941 <entry>1</entry> <entry>The caller has released his claim on
2942 the given name. Either the caller was the primary owner of
2943 the name, and the name is now unused or taken by somebody
2944 waiting in the queue for the name, or the caller was waiting
2945 in the queue for the name and has now been removed from the
2949 <entry>DBUS_RELEASE_NAME_REPLY_NON_EXISTENT</entry>
2951 <entry>The given name does not exist on this bus.</entry>
2954 <entry>DBUS_RELEASE_NAME_REPLY_NOT_OWNER</entry>
2956 <entry>The caller was not the primary owner of this name,
2957 and was also not waiting in the queue to own this name.</entry>
2966 <sect2 id="message-bus-routing">
2967 <title>Message Bus Message Routing</title>
2971 <sect3 id="message-bus-routing-match-rules">
2972 <title>Match Rules</title>
2974 An important part of the message bus routing protocol is match
2975 rules. Match rules describe what messages can be sent to a client
2976 based on the contents of the message. When a message is routed
2977 through the bus it is compared to clients' match rules. If any
2978 of the rules match, the message is dispatched to the client.
2979 If none of the rules match the message never leaves the bus. This
2980 is an effective way to control traffic over the bus and to make sure
2981 only relevant message need to be processed by the client.
2984 Match rules are added using the AddMatch bus method
2985 (see xref linkend="bus-messages-add-match"/>). Rules are
2986 specified as a string of comma separated key/value pairs.
2987 Excluding a key from the rule indicates a wildcard match.
2988 For instance excluding the the member from a match rule but
2989 adding a sender would let all messages from that sender through.
2990 An example of a complete rule would be
2991 "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='Foo',path='/bar/foo',destination=':452345.34',arg2='bar'"
2994 The following table describes the keys that can be used to create
2996 The following table summarizes the D-Bus types.
3002 <entry>Possible Values</entry>
3003 <entry>Description</entry>
3008 <entry><literal>type</literal></entry>
3009 <entry>'signal', 'method_call', 'method_return', 'error'</entry>
3010 <entry>Match on the message type. An example of a type match is type='signal'</entry>
3013 <entry><literal>sender</literal></entry>
3014 <entry>A bus or unique name (see <xref linkend="term-bus-name"/>
3015 and <xref linkend="term-unique-name"/> respectively)
3017 <entry>Match messages sent by a particular sender. An example of a sender match
3018 is sender='org.freedesktop.Hal'</entry>
3021 <entry><literal>interface</literal></entry>
3022 <entry>An interface name (see <xref linkend="message-protocol-names-interface"/>)</entry>
3023 <entry>Match messages sent over or to a particular interface. An example of an
3024 interface match is interface='org.freedesktop.Hal.Manager'.
3025 If a message omits the interface header, it must not match any rule
3026 that specifies this key.</entry>
3029 <entry><literal>member</literal></entry>
3030 <entry>Any valid method or signal name</entry>
3031 <entry>Matches messages which have the give method or signal name. An example of
3032 a member match is member='NameOwnerChanged'</entry>
3035 <entry><literal>path</literal></entry>
3036 <entry>An object path (see <xref linkend="message-protocol-marshaling-object-path"/>)</entry>
3037 <entry>Matches messages which are sent from or to the given object. An example of a
3038 path match is path='/org/freedesktop/Hal/Manager'</entry>
3041 <entry><literal>destination</literal></entry>
3042 <entry>A unique name (see <xref linkend="term-unique-name"/>)</entry>
3043 <entry>Matches messages which are being sent to the given unique name. An
3044 example of a destination match is destination=':1.0'</entry>
3047 <entry><literal>arg[0, 1, 2, 3, ...]</literal></entry>
3048 <entry>Any string</entry>
3049 <entry>Arg matches are special and are used for further restricting the
3050 match based on the arguments in the body of a message. As of this time
3051 only string arguments can be matched. An example of an argument match
3052 would be arg3='Foo'. Only argument indexes from 0 to 63 should be
3061 <sect2 id="message-bus-starting-services">
3062 <title>Message Bus Starting Services</title>
3064 The message bus can start applications on behalf of other applications.
3065 In CORBA terms, this would be called <firstterm>activation</firstterm>.
3066 An application that can be started in this way is called a
3067 <firstterm>service</firstterm>.
3070 With D-Bus, starting a service is normally done by name. That is,
3071 applications ask the message bus to start some program that will own a
3072 well-known name, such as <literal>org.freedesktop.TextEditor</literal>.
3073 This implies a contract documented along with the name
3074 <literal>org.freedesktop.TextEditor</literal> for which objects
3075 the owner of that name will provide, and what interfaces those
3079 To find an executable corresponding to a particular name, the bus daemon
3080 looks for <firstterm>service description files</firstterm>. Service
3081 description files define a mapping from names to executables. Different
3082 kinds of message bus will look for these files in different places, see
3083 <xref linkend="message-bus-types"/>.
3086 [FIXME the file format should be much better specified than "similar to
3087 .desktop entries" esp. since desktop entries are already
3088 badly-specified. ;-)] Service description files have the ".service" file
3089 extension. The message bus will only load service description files
3090 ending with .service; all other files will be ignored. The file format
3091 is similar to that of <ulink
3092 url="http://www.freedesktop.org/standards/desktop-entry-spec/desktop-entry-spec.html">desktop
3093 entries</ulink>. All service description files must be in UTF-8
3094 encoding. To ensure that there will be no name collisions, service files
3095 must be namespaced using the same mechanism as messages and service
3099 <title>Example service description file</title>
3101 # Sample service description file
3103 Names=org.freedesktop.ConfigurationDatabase;org.gnome.GConf;
3104 Exec=/usr/libexec/gconfd-2
3109 When an application asks to start a service by name, the bus daemon tries to
3110 find a service that will own that name. It then tries to spawn the
3111 executable associated with it. If this fails, it will report an
3112 error. [FIXME what happens if two .service files offer the same service;
3113 what kind of error is reported, should we have a way for the client to
3117 The executable launched will have the environment variable
3118 <literal>DBUS_STARTER_ADDRESS</literal> set to the address of the
3119 message bus so it can connect and request the appropriate names.
3122 The executable being launched may want to know whether the message bus
3123 starting it is one of the well-known message buses (see <xref
3124 linkend="message-bus-types"/>). To facilitate this, the bus must also set
3125 the <literal>DBUS_STARTER_BUS_TYPE</literal> environment variable if it is one
3126 of the well-known buses. The currently-defined values for this variable
3127 are <literal>system</literal> for the systemwide message bus,
3128 and <literal>session</literal> for the per-login-session message
3129 bus. The new executable must still connect to the address given
3130 in <literal>DBUS_STARTER_ADDRESS</literal>, but may assume that the
3131 resulting connection is to the well-known bus.
3134 [FIXME there should be a timeout somewhere, either specified
3135 in the .service file, by the client, or just a global value
3136 and if the client being activated fails to connect within that
3137 timeout, an error should be sent back.]
3140 <sect3 id="message-bus-starting-services-scope">
3141 <title>Message Bus Service Scope</title>
3143 The "scope" of a service is its "per-", such as per-session,
3144 per-machine, per-home-directory, or per-display. The reference
3145 implementation doesn't yet support starting services in a different
3146 scope from the message bus itself. So e.g. if you start a service
3147 on the session bus its scope is per-session.
3150 We could add an optional scope to a bus name. For example, for
3151 per-(display,session pair), we could have a unique ID for each display
3152 generated automatically at login and set on screen 0 by executing a
3153 special "set display ID" binary. The ID would be stored in a
3154 <literal>_DBUS_DISPLAY_ID</literal> property and would be a string of
3155 random bytes. This ID would then be used to scope names.
3156 Starting/locating a service could be done by ID-name pair rather than
3160 Contrast this with a per-display scope. To achieve that, we would
3161 want a single bus spanning all sessions using a given display.
3162 So we might set a <literal>_DBUS_DISPLAY_BUS_ADDRESS</literal>
3163 property on screen 0 of the display, pointing to this bus.
3168 <sect2 id="message-bus-types">
3169 <title>Well-known Message Bus Instances</title>
3171 Two standard message bus instances are defined here, along with how
3172 to locate them and where their service files live.
3174 <sect3 id="message-bus-types-login">
3175 <title>Login session message bus</title>
3177 Each time a user logs in, a <firstterm>login session message
3178 bus</firstterm> may be started. All applications in the user's login
3179 session may interact with one another using this message bus.
3182 The address of the login session message bus is given
3183 in the <literal>DBUS_SESSION_BUS_ADDRESS</literal> environment
3184 variable. If that variable is not set, applications may
3185 also try to read the address from the X Window System root
3186 window property <literal>_DBUS_SESSION_BUS_ADDRESS</literal>.
3187 The root window property must have type <literal>STRING</literal>.
3188 The environment variable should have precedence over the
3189 root window property.
3192 [FIXME specify location of .service files, probably using
3193 DESKTOP_DIRS etc. from basedir specification, though login session
3194 bus is not really desktop-specific]
3197 <sect3 id="message-bus-types-system">
3198 <title>System message bus</title>
3200 A computer may have a <firstterm>system message bus</firstterm>,
3201 accessible to all applications on the system. This message bus may be
3202 used to broadcast system events, such as adding new hardware devices,
3203 changes in the printer queue, and so forth.
3206 The address of the system message bus is given
3207 in the <literal>DBUS_SYSTEM_BUS_ADDRESS</literal> environment
3208 variable. If that variable is not set, applications should try
3209 to connect to the well-known address
3210 <literal>unix:path=/var/run/dbus/system_bus_socket</literal>.
3213 The D-Bus reference implementation actually honors the
3214 <literal>$(localstatedir)</literal> configure option
3215 for this address, on both client and server side.
3220 [FIXME specify location of system bus .service files]
3225 <sect2 id="message-bus-messages">
3226 <title>Message Bus Messages</title>
3228 The special message bus name <literal>org.freedesktop.DBus</literal>
3229 responds to a number of additional messages.
3232 <sect3 id="bus-messages-hello">
3233 <title><literal>org.freedesktop.DBus.Hello</literal></title>
3244 <entry>Argument</entry>
3246 <entry>Description</entry>
3252 <entry>STRING</entry>
3253 <entry>Unique name assigned to the connection</entry>
3260 Before an application is able to send messages to other applications
3261 it must send the <literal>org.freedesktop.DBus.Hello</literal> message
3262 to the message bus to obtain a unique name. If an application without
3263 a unique name tries to send a message to another application, or a
3264 message to the message bus itself that isn't the
3265 <literal>org.freedesktop.DBus.Hello</literal> message, it will be
3266 disconnected from the bus.
3269 There is no corresponding "disconnect" request; if a client wishes to
3270 disconnect from the bus, it simply closes the socket (or other
3271 communication channel).
3274 <sect3 id="bus-messages-list-names">
3275 <title><literal>org.freedesktop.DBus.ListNames</literal></title>
3279 ARRAY of STRING ListNames ()
3286 <entry>Argument</entry>
3288 <entry>Description</entry>
3294 <entry>ARRAY of STRING</entry>
3295 <entry>Array of strings where each string is a bus name</entry>
3302 Returns a list of all currently-owned names on the bus.
3305 <sect3 id="bus-messages-list-activatable-names">
3306 <title><literal>org.freedesktop.DBus.ListActivatableNames</literal></title>
3310 ARRAY of STRING ListActivatableNames ()
3317 <entry>Argument</entry>
3319 <entry>Description</entry>
3325 <entry>ARRAY of STRING</entry>
3326 <entry>Array of strings where each string is a bus name</entry>
3333 Returns a list of all names that can be activated on the bus.
3336 <sect3 id="bus-messages-name-exists">
3337 <title><literal>org.freedesktop.DBus.NameHasOwner</literal></title>
3341 BOOLEAN NameHasOwner (in STRING name)
3348 <entry>Argument</entry>
3350 <entry>Description</entry>
3356 <entry>STRING</entry>
3357 <entry>Name to check</entry>
3367 <entry>Argument</entry>
3369 <entry>Description</entry>
3375 <entry>BOOLEAN</entry>
3376 <entry>Return value, true if the name exists</entry>
3383 Checks if the specified name exists (currently has an owner).
3387 <sect3 id="bus-messages-name-owner-changed">
3388 <title><literal>org.freedesktop.DBus.NameOwnerChanged</literal></title>
3392 NameOwnerChanged (STRING name, STRING old_owner, STRING new_owner)
3399 <entry>Argument</entry>
3401 <entry>Description</entry>
3407 <entry>STRING</entry>
3408 <entry>Name with a new owner</entry>
3412 <entry>STRING</entry>
3413 <entry>Old owner or empty string if none</entry>
3417 <entry>STRING</entry>
3418 <entry>New owner or empty string if none</entry>
3425 This signal indicates that the owner of a name has changed.
3426 It's also the signal to use to detect the appearance of
3427 new names on the bus.
3430 <sect3 id="bus-messages-name-lost">
3431 <title><literal>org.freedesktop.DBus.NameLost</literal></title>
3435 NameLost (STRING name)
3442 <entry>Argument</entry>
3444 <entry>Description</entry>
3450 <entry>STRING</entry>
3451 <entry>Name which was lost</entry>
3458 This signal is sent to a specific application when it loses
3459 ownership of a name.
3463 <sect3 id="bus-messages-name-acquired">
3464 <title><literal>org.freedesktop.DBus.NameAcquired</literal></title>
3468 NameAcquired (STRING name)
3475 <entry>Argument</entry>
3477 <entry>Description</entry>
3483 <entry>STRING</entry>
3484 <entry>Name which was acquired</entry>
3491 This signal is sent to a specific application when it gains
3492 ownership of a name.
3496 <sect3 id="bus-messages-start-service-by-name">
3497 <title><literal>org.freedesktop.DBus.StartServiceByName</literal></title>
3501 UINT32 StartServiceByName (in STRING name, in UINT32 flags)
3508 <entry>Argument</entry>
3510 <entry>Description</entry>
3516 <entry>STRING</entry>
3517 <entry>Name of the service to start</entry>
3521 <entry>UINT32</entry>
3522 <entry>Flags (currently not used)</entry>
3532 <entry>Argument</entry>
3534 <entry>Description</entry>
3540 <entry>UINT32</entry>
3541 <entry>Return value</entry>
3546 Tries to launch the executable associated with a name. For more information, see <xref linkend="message-bus-starting-services"/>.
3550 The return value can be one of the following values:
3555 <entry>Identifier</entry>
3556 <entry>Value</entry>
3557 <entry>Description</entry>
3562 <entry>DBUS_START_REPLY_SUCCESS</entry>
3564 <entry>The service was successfully started.</entry>
3567 <entry>DBUS_START_REPLY_ALREADY_RUNNING</entry>
3569 <entry>A connection already owns the given name.</entry>
3578 <sect3 id="bus-messages-get-name-owner">
3579 <title><literal>org.freedesktop.DBus.GetNameOwner</literal></title>
3583 STRING GetNameOwner (in STRING name)
3590 <entry>Argument</entry>
3592 <entry>Description</entry>
3598 <entry>STRING</entry>
3599 <entry>Name to get the owner of</entry>
3609 <entry>Argument</entry>
3611 <entry>Description</entry>
3617 <entry>STRING</entry>
3618 <entry>Return value, a unique connection name</entry>
3623 Returns the unique connection name of the primary owner of the name
3624 given. If the requested name doesn't have an owner, returns a
3625 <literal>org.freedesktop.DBus.Error.NameHasNoOwner</literal> error.
3629 <sect3 id="bus-messages-get-connection-unix-user">
3630 <title><literal>org.freedesktop.DBus.GetConnectionUnixUser</literal></title>
3634 UINT32 GetConnectionUnixUser (in STRING connection_name)
3641 <entry>Argument</entry>
3643 <entry>Description</entry>
3649 <entry>STRING</entry>
3650 <entry>Name of the connection to query</entry>
3660 <entry>Argument</entry>
3662 <entry>Description</entry>
3668 <entry>UINT32</entry>
3669 <entry>unix user id</entry>
3674 Returns the unix uid of the process connected to the server. If unable to
3675 determine it, a <literal>org.freedesktop.DBus.Error.Failed</literal>
3680 <sect3 id="bus-messages-add-match">
3681 <title><literal>org.freedesktop.DBus.AddMatch</literal></title>
3685 AddMatch (in STRING rule)
3692 <entry>Argument</entry>
3694 <entry>Description</entry>
3700 <entry>STRING</entry>
3701 <entry>Match rule to add to the connection</entry>
3706 Adds a match rule to match messages going through the message bus (see <xref linkend='message-bus-routing-match-rules'/>).
3707 If the bus does not have enough resources the <literal>org.freedesktop.DBus.Error.OOM</literal>
3711 <sect3 id="bus-messages-remove-match">
3712 <title><literal>org.freedesktop.DBus.RemoveMatch</literal></title>
3716 RemoveMatch (in STRING rule)
3723 <entry>Argument</entry>
3725 <entry>Description</entry>
3731 <entry>STRING</entry>
3732 <entry>Match rule to remove from the connection</entry>
3737 Removes the first rule that matches (see <xref linkend='message-bus-routing-match-rules'/>).
3738 If the rule is not found the <literal>org.freedesktop.DBus.Error.MatchRuleNotFound</literal>
3747 <appendix id="implementation-notes">
3748 <title>Implementation notes</title>
3749 <sect1 id="implementation-notes-subsection">
3757 <glossary><title>Glossary</title>
3759 This glossary defines some of the terms used in this specification.
3762 <glossentry id="term-bus-name"><glossterm>Bus Name</glossterm>
3765 The message bus maintains an association between names and
3766 connections. (Normally, there's one connection per application.) A
3767 bus name is simply an identifier used to locate connections. For
3768 example, the hypothetical <literal>com.yoyodyne.Screensaver</literal>
3769 name might be used to send a message to a screensaver from Yoyodyne
3770 Corporation. An application is said to <firstterm>own</firstterm> a
3771 name if the message bus has associated the application's connection
3772 with the name. Names may also have <firstterm>queued
3773 owners</firstterm> (see <xref linkend="term-queued-owner"/>).
3774 The bus assigns a unique name to each connection,
3775 see <xref linkend="term-unique-name"/>. Other names
3776 can be thought of as "well-known names" and are
3777 used to find applications that offer specific functionality.
3782 <glossentry id="term-message"><glossterm>Message</glossterm>
3785 A message is the atomic unit of communication via the D-Bus
3786 protocol. It consists of a <firstterm>header</firstterm> and a
3787 <firstterm>body</firstterm>; the body is made up of
3788 <firstterm>arguments</firstterm>.
3793 <glossentry id="term-message-bus"><glossterm>Message Bus</glossterm>
3796 The message bus is a special application that forwards
3797 or routes messages between a group of applications
3798 connected to the message bus. It also manages
3799 <firstterm>names</firstterm> used for routing
3805 <glossentry id="term-name"><glossterm>Name</glossterm>
3808 See <xref linkend="term-bus-name"/>. "Name" may
3809 also be used to refer to some of the other names
3810 in D-Bus, such as interface names.
3815 <glossentry id="namespace"><glossterm>Namespace</glossterm>
3818 Used to prevent collisions when defining new interfaces or bus
3819 names. The convention used is the same one Java uses for defining
3820 classes: a reversed domain name.
3825 <glossentry id="term-object"><glossterm>Object</glossterm>
3828 Each application contains <firstterm>objects</firstterm>, which have
3829 <firstterm>interfaces</firstterm> and
3830 <firstterm>methods</firstterm>. Objects are referred to by a name,
3831 called a <firstterm>path</firstterm>.
3836 <glossentry id="one-to-one"><glossterm>One-to-One</glossterm>
3839 An application talking directly to another application, without going
3840 through a message bus. One-to-one connections may be "peer to peer" or
3841 "client to server." The D-Bus protocol has no concept of client
3842 vs. server after a connection has authenticated; the flow of messages
3843 is symmetrical (full duplex).
3848 <glossentry id="term-path"><glossterm>Path</glossterm>
3851 Object references (object names) in D-Bus are organized into a
3852 filesystem-style hierarchy, so each object is named by a path. As in
3853 LDAP, there's no difference between "files" and "directories"; a path
3854 can refer to an object, while still having child objects below it.
3859 <glossentry id="term-queued-owner"><glossterm>Queued Name Owner</glossterm>
3862 Each bus name has a primary owner; messages sent to the name go to the
3863 primary owner. However, certain names also maintain a queue of
3864 secondary owners "waiting in the wings." If the primary owner releases
3865 the name, then the first secondary owner in the queue automatically
3866 becomes the new owner of the name.
3871 <glossentry id="term-service"><glossterm>Service</glossterm>
3874 A service is an executable that can be launched by the bus daemon.
3875 Services normally guarantee some particular features, for example they
3876 may guarantee that they will request a specific name such as
3877 "org.freedesktop.Screensaver", have a singleton object
3878 "/org/freedesktop/Application", and that object will implement the
3879 interface "org.freedesktop.ScreensaverControl".
3884 <glossentry id="term-service-description-files"><glossterm>Service Description Files</glossterm>
3887 ".service files" tell the bus about service applications that can be
3888 launched (see <xref linkend="term-service"/>). Most importantly they
3889 provide a mapping from bus names to services that will request those
3890 names when they start up.
3895 <glossentry id="term-unique-name"><glossterm>Unique Connection Name</glossterm>
3898 The special name automatically assigned to each connection by the
3899 message bus. This name will never change owner, and will be unique
3900 (never reused during the lifetime of the message bus).
3901 It will begin with a ':' character.