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"
8 <title>D-Bus Specification</title>
9 <releaseinfo>Version 0.19</releaseinfo>
10 <date>2012-02-21</date>
13 <firstname>Havoc</firstname>
14 <surname>Pennington</surname>
16 <orgname>Red Hat, Inc.</orgname>
18 <email>hp@pobox.com</email>
23 <firstname>Anders</firstname>
24 <surname>Carlsson</surname>
26 <orgname>CodeFactory AB</orgname>
28 <email>andersca@codefactory.se</email>
33 <firstname>Alexander</firstname>
34 <surname>Larsson</surname>
36 <orgname>Red Hat, Inc.</orgname>
38 <email>alexl@redhat.com</email>
43 <firstname>Sven</firstname>
44 <surname>Herzberg</surname>
46 <orgname>Imendio AB</orgname>
48 <email>sven@imendio.com</email>
53 <firstname>Simon</firstname>
54 <surname>McVittie</surname>
56 <orgname>Collabora Ltd.</orgname>
58 <email>simon.mcvittie@collabora.co.uk</email>
63 <firstname>David</firstname>
64 <surname>Zeuthen</surname>
66 <orgname>Red Hat, Inc.</orgname>
68 <email>davidz@redhat.com</email>
75 <revnumber>current</revnumber>
76 <date><ulink url='http://cgit.freedesktop.org/dbus/dbus/log/doc/dbus-specification.xml'>commit log</ulink></date>
77 <authorinitials></authorinitials>
78 <revremark></revremark>
81 <revnumber>0.19</revnumber>
82 <date>20 February 2012</date>
83 <authorinitials>smcv/lp</authorinitials>
84 <revremark>formally define unique connection names and well-known
85 bus names; document best practices for interface, bus, member and
86 error names, and object paths; document the search path for session
87 and system services on Unix; document the systemd transport</revremark>
90 <revnumber>0.18</revnumber>
91 <date>29 July 2011</date>
92 <authorinitials>smcv</authorinitials>
93 <revremark>define eavesdropping, unicast, broadcast; add eavesdrop
94 match keyword; promote type system to a top-level section</revremark>
97 <revnumber>0.17</revnumber>
98 <date>1 June 2011</date>
99 <authorinitials>smcv/davidz</authorinitials>
100 <revremark>define ObjectManager; reserve extra pseudo-type-codes used
101 by GVariant</revremark>
104 <revnumber>0.16</revnumber>
105 <date>11 April 2011</date>
106 <authorinitials></authorinitials>
107 <revremark>add path_namespace, arg0namespace; argNpath matches object
111 <revnumber>0.15</revnumber>
112 <date>3 November 2010</date>
113 <authorinitials></authorinitials>
114 <revremark></revremark>
117 <revnumber>0.14</revnumber>
118 <date>12 May 2010</date>
119 <authorinitials></authorinitials>
120 <revremark></revremark>
123 <revnumber>0.13</revnumber>
124 <date>23 Dezember 2009</date>
125 <authorinitials></authorinitials>
126 <revremark></revremark>
129 <revnumber>0.12</revnumber>
130 <date>7 November, 2006</date>
131 <authorinitials></authorinitials>
132 <revremark></revremark>
135 <revnumber>0.11</revnumber>
136 <date>6 February 2005</date>
137 <authorinitials></authorinitials>
138 <revremark></revremark>
141 <revnumber>0.10</revnumber>
142 <date>28 January 2005</date>
143 <authorinitials></authorinitials>
144 <revremark></revremark>
147 <revnumber>0.9</revnumber>
148 <date>7 Januar 2005</date>
149 <authorinitials></authorinitials>
150 <revremark></revremark>
153 <revnumber>0.8</revnumber>
154 <date>06 September 2003</date>
155 <authorinitials></authorinitials>
156 <revremark>First released document.</revremark>
161 <sect1 id="introduction">
162 <title>Introduction</title>
164 D-Bus is a system for low-latency, low-overhead, easy to use
165 interprocess communication (IPC). In more detail:
169 D-Bus is <emphasis>low-latency</emphasis> because it is designed
170 to avoid round trips and allow asynchronous operation, much like
176 D-Bus is <emphasis>low-overhead</emphasis> because it uses a
177 binary protocol, and does not have to convert to and from a text
178 format such as XML. Because D-Bus is intended for potentially
179 high-resolution same-machine IPC, not primarily for Internet IPC,
180 this is an interesting optimization.
185 D-Bus is <emphasis>easy to use</emphasis> because it works in terms
186 of <firstterm>messages</firstterm> rather than byte streams, and
187 automatically handles a lot of the hard IPC issues. Also, the D-Bus
188 library is designed to be wrapped in a way that lets developers use
189 their framework's existing object/type system, rather than learning
190 a new one specifically for IPC.
197 The base D-Bus protocol is a one-to-one (peer-to-peer or client-server)
198 protocol, specified in <xref linkend="message-protocol"/>. That is, it is
199 a system for one application to talk to a single other
200 application. However, the primary intended application of the protocol is the
201 D-Bus <firstterm>message bus</firstterm>, specified in <xref
202 linkend="message-bus"/>. The message bus is a special application that
203 accepts connections from multiple other applications, and forwards
208 Uses of D-Bus include notification of system changes (notification of when
209 a camera is plugged in to a computer, or a new version of some software
210 has been installed), or desktop interoperability, for example a file
211 monitoring service or a configuration service.
215 D-Bus is designed for two specific use cases:
219 A "system bus" for notifications from the system to user sessions,
220 and to allow the system to request input from user sessions.
225 A "session bus" used to implement desktop environments such as
230 D-Bus is not intended to be a generic IPC system for any possible
231 application, and intentionally omits many features found in other
232 IPC systems for this reason.
236 At the same time, the bus daemons offer a number of features not found in
237 other IPC systems, such as single-owner "bus names" (similar to X
238 selections), on-demand startup of services, and security policies.
239 In many ways, these features are the primary motivation for developing
240 D-Bus; other systems would have sufficed if IPC were the only goal.
244 D-Bus may turn out to be useful in unanticipated applications, but future
245 versions of this spec and the reference implementation probably will not
246 incorporate features that interfere with the core use cases.
250 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
251 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
252 document are to be interpreted as described in RFC 2119. However, the
253 document could use a serious audit to be sure it makes sense to do
254 so. Also, they are not capitalized.
257 <sect2 id="stability">
258 <title>Protocol and Specification Stability</title>
260 The D-Bus protocol is frozen (only compatible extensions are allowed) as
261 of November 8, 2006. However, this specification could still use a fair
262 bit of work to make interoperable reimplementation possible without
263 reference to the D-Bus reference implementation. Thus, this
264 specification is not marked 1.0. To mark it 1.0, we'd like to see
265 someone invest significant effort in clarifying the specification
266 language, and growing the specification to cover more aspects of the
267 reference implementation's behavior.
270 Until this work is complete, any attempt to reimplement D-Bus will
271 probably require looking at the reference implementation and/or asking
272 questions on the D-Bus mailing list about intended behavior.
273 Questions on the list are very welcome.
276 Nonetheless, this document should be a useful starting point and is
277 to our knowledge accurate, though incomplete.
283 <sect1 id="type-system">
284 <title>Type System</title>
287 D-Bus has a type system, in which values of various types can be
288 serialized into a sequence of bytes referred to as the
289 <firstterm>wire format</firstterm> in a standard way.
290 Converting a value from some other representation into the wire
291 format is called <firstterm>marshaling</firstterm> and converting
292 it back from the wire format is <firstterm>unmarshaling</firstterm>.
296 The D-Bus protocol does not include type tags in the marshaled data; a
297 block of marshaled values must have a known <firstterm>type
298 signature</firstterm>. The type signature is made up of zero or more
299 <firstterm id="term-single-complete-type">single complete
300 types</firstterm>, each made up of one or more
301 <firstterm>type codes</firstterm>.
305 A type code is an ASCII character representing the
306 type of a value. Because ASCII characters are used, the type signature
307 will always form a valid ASCII string. A simple string compare
308 determines whether two type signatures are equivalent.
312 A single complete type is a sequence of type codes that fully describes
313 one type: either a basic type, or a single fully-described container type.
314 A single complete type is a basic type code, a variant type code,
315 an array with its element type, or a struct with its fields (all of which
316 are defined below). So the following signatures are not single complete
327 And the following signatures contain multiple complete types:
337 Note however that a single complete type may <emphasis>contain</emphasis>
338 multiple other single complete types, by containing a struct or dict
342 <sect2 id="basic-types">
343 <title>Basic types</title>
346 The simplest type codes are the <firstterm id="term-basic-type">basic
347 types</firstterm>, which are the types whose structure is entirely
348 defined by their 1-character type code. Basic types consist of
349 fixed types and string-like types.
353 The <firstterm id="term-fixed-type">fixed types</firstterm>
354 are basic types whose values have a fixed length, namely BYTE,
355 BOOLEAN, DOUBLE, UNIX_FD, and signed or unsigned integers of length
360 As a simple example, the type code for 32-bit integer (<literal>INT32</literal>) is
361 the ASCII character 'i'. So the signature for a block of values
362 containing a single <literal>INT32</literal> would be:
366 A block of values containing two <literal>INT32</literal> would have this signature:
373 The characteristics of the fixed types are listed in this table.
379 <entry>Conventional name</entry>
380 <entry>ASCII type-code</entry>
381 <entry>Encoding</entry>
386 <entry><literal>BYTE</literal></entry>
387 <entry><literal>y</literal> (121)</entry>
388 <entry>Unsigned 8-bit integer</entry>
391 <entry><literal>BOOLEAN</literal></entry>
392 <entry><literal>b</literal> (98)</entry>
393 <entry>Boolean value: 0 is false, 1 is true, any other value
394 allowed by the marshalling format is invalid</entry>
397 <entry><literal>INT16</literal></entry>
398 <entry><literal>n</literal> (110)</entry>
399 <entry>Signed (two's complement) 16-bit integer</entry>
402 <entry><literal>UINT16</literal></entry>
403 <entry><literal>q</literal> (113)</entry>
404 <entry>Unsigned 16-bit integer</entry>
407 <entry><literal>INT32</literal></entry>
408 <entry><literal>i</literal> (105)</entry>
409 <entry>Signed (two's complement) 32-bit integer</entry>
412 <entry><literal>UINT32</literal></entry>
413 <entry><literal>u</literal> (117)</entry>
414 <entry>Unsigned 32-bit integer</entry>
417 <entry><literal>INT64</literal></entry>
418 <entry><literal>x</literal> (120)</entry>
419 <entry>Signed (two's complement) 64-bit integer
420 (mnemonic: x and t are the first characters in "sixty" not
421 already used for something more common)</entry>
424 <entry><literal>UINT64</literal></entry>
425 <entry><literal>t</literal> (116)</entry>
426 <entry>Unsigned 64-bit integer</entry>
429 <entry><literal>DOUBLE</literal></entry>
430 <entry><literal>d</literal> (100)</entry>
431 <entry>IEEE 754 double-precision floating point</entry>
434 <entry><literal>UNIX_FD</literal></entry>
435 <entry><literal>h</literal> (104)</entry>
436 <entry>Unsigned 32-bit integer representing an index into an
437 out-of-band array of file descriptors, transferred via some
438 platform-specific mechanism (mnemonic: h for handle)</entry>
446 The <firstterm id="term-string-like-type">string-like types</firstterm>
447 are basic types with a variable length. The value of any string-like
448 type is conceptually 0 or more Unicode codepoints encoded in UTF-8,
449 none of which may be U+0000. The UTF-8 text must be validated
450 strictly: in particular, it must not contain overlong sequences,
451 noncharacters such as U+FFFE, or codepoints above U+10FFFF.
455 The marshalling formats for the string-like types all end with a
456 single zero (NUL) byte, but that byte is not considered to be part of
461 The characteristics of the string-like types are listed in this table.
467 <entry>Conventional name</entry>
468 <entry>ASCII type-code</entry>
469 <entry>Validity constraints</entry>
474 <entry><literal>STRING</literal></entry>
475 <entry><literal>s</literal> (115)</entry>
476 <entry>No extra constraints</entry>
479 <entry><literal>OBJECT_PATH</literal></entry>
480 <entry><literal>o</literal> (111)</entry>
482 <link linkend="message-protocol-marshaling-object-path">a
483 syntactically valid object path</link></entry>
486 <entry><literal>SIGNATURE</literal></entry>
487 <entry><literal>g</literal> (103)</entry>
489 <firstterm linkend="term-single-complete-type">single
490 complete types</firstterm></entry>
499 <sect2 id="container-types">
500 <title>Container types</title>
503 In addition to basic types, there are four <firstterm>container</firstterm>
504 types: <literal>STRUCT</literal>, <literal>ARRAY</literal>, <literal>VARIANT</literal>,
505 and <literal>DICT_ENTRY</literal>.
509 <literal>STRUCT</literal> has a type code, ASCII character 'r', but this type
510 code does not appear in signatures. Instead, ASCII characters
511 '(' and ')' are used to mark the beginning and end of the struct.
512 So for example, a struct containing two integers would have this
517 Structs can be nested, so for example a struct containing
518 an integer and another struct:
522 The value block storing that struct would contain three integers; the
523 type signature allows you to distinguish "(i(ii))" from "((ii)i)" or
528 The <literal>STRUCT</literal> type code 'r' is not currently used in the D-Bus protocol,
529 but is useful in code that implements the protocol. This type code
530 is specified to allow such code to interoperate in non-protocol contexts.
534 Empty structures are not allowed; there must be at least one
535 type code between the parentheses.
539 <literal>ARRAY</literal> has ASCII character 'a' as type code. The array type code must be
540 followed by a <firstterm>single complete type</firstterm>. The single
541 complete type following the array is the type of each array element. So
542 the simple example is:
546 which is an array of 32-bit integers. But an array can be of any type,
547 such as this array-of-struct-with-two-int32-fields:
551 Or this array of array of integer:
558 <literal>VARIANT</literal> has ASCII character 'v' as its type code. A marshaled value of
559 type <literal>VARIANT</literal> will have the signature of a single complete type as part
560 of the <emphasis>value</emphasis>. This signature will be followed by a
561 marshaled value of that type.
565 A <literal>DICT_ENTRY</literal> works exactly like a struct, but rather
566 than parentheses it uses curly braces, and it has more restrictions.
567 The restrictions are: it occurs only as an array element type; it has
568 exactly two single complete types inside the curly braces; the first
569 single complete type (the "key") must be a basic type rather than a
570 container type. Implementations must not accept dict entries outside of
571 arrays, must not accept dict entries with zero, one, or more than two
572 fields, and must not accept dict entries with non-basic-typed keys. A
573 dict entry is always a key-value pair.
577 The first field in the <literal>DICT_ENTRY</literal> is always the key.
578 A message is considered corrupt if the same key occurs twice in the same
579 array of <literal>DICT_ENTRY</literal>. However, for performance reasons
580 implementations are not required to reject dicts with duplicate keys.
584 In most languages, an array of dict entry would be represented as a
585 map, hash table, or dict object.
590 <title>Summary of types</title>
593 The following table summarizes the D-Bus types.
598 <entry>Conventional Name</entry>
600 <entry>Description</entry>
605 <entry><literal>INVALID</literal></entry>
606 <entry>0 (ASCII NUL)</entry>
607 <entry>Not a valid type code, used to terminate signatures</entry>
609 <entry><literal>BYTE</literal></entry>
610 <entry>121 (ASCII 'y')</entry>
611 <entry>8-bit unsigned integer</entry>
613 <entry><literal>BOOLEAN</literal></entry>
614 <entry>98 (ASCII 'b')</entry>
615 <entry>Boolean value, 0 is <literal>FALSE</literal> and 1 is <literal>TRUE</literal>. Everything else is invalid.</entry>
617 <entry><literal>INT16</literal></entry>
618 <entry>110 (ASCII 'n')</entry>
619 <entry>16-bit signed integer</entry>
621 <entry><literal>UINT16</literal></entry>
622 <entry>113 (ASCII 'q')</entry>
623 <entry>16-bit unsigned integer</entry>
625 <entry><literal>INT32</literal></entry>
626 <entry>105 (ASCII 'i')</entry>
627 <entry>32-bit signed integer</entry>
629 <entry><literal>UINT32</literal></entry>
630 <entry>117 (ASCII 'u')</entry>
631 <entry>32-bit unsigned integer</entry>
633 <entry><literal>INT64</literal></entry>
634 <entry>120 (ASCII 'x')</entry>
635 <entry>64-bit signed integer</entry>
637 <entry><literal>UINT64</literal></entry>
638 <entry>116 (ASCII 't')</entry>
639 <entry>64-bit unsigned integer</entry>
641 <entry><literal>DOUBLE</literal></entry>
642 <entry>100 (ASCII 'd')</entry>
643 <entry>IEEE 754 double</entry>
645 <entry><literal>STRING</literal></entry>
646 <entry>115 (ASCII 's')</entry>
647 <entry>UTF-8 string (<emphasis>must</emphasis> be valid UTF-8). Must be nul terminated and contain no other nul bytes.</entry>
649 <entry><literal>OBJECT_PATH</literal></entry>
650 <entry>111 (ASCII 'o')</entry>
651 <entry>Name of an object instance</entry>
653 <entry><literal>SIGNATURE</literal></entry>
654 <entry>103 (ASCII 'g')</entry>
655 <entry>A type signature</entry>
657 <entry><literal>ARRAY</literal></entry>
658 <entry>97 (ASCII 'a')</entry>
661 <entry><literal>STRUCT</literal></entry>
662 <entry>114 (ASCII 'r'), 40 (ASCII '('), 41 (ASCII ')')</entry>
663 <entry>Struct; type code 114 'r' is reserved for use in
664 bindings and implementations to represent the general
665 concept of a struct, and must not appear in signatures
666 used on D-Bus.</entry>
668 <entry><literal>VARIANT</literal></entry>
669 <entry>118 (ASCII 'v') </entry>
670 <entry>Variant type (the type of the value is part of the value itself)</entry>
672 <entry><literal>DICT_ENTRY</literal></entry>
673 <entry>101 (ASCII 'e'), 123 (ASCII '{'), 125 (ASCII '}') </entry>
674 <entry>Entry in a dict or map (array of key-value pairs).
675 Type code 101 'e' is reserved for use in bindings and
676 implementations to represent the general concept of a
677 dict or dict-entry, and must not appear in signatures
678 used on D-Bus.</entry>
680 <entry><literal>UNIX_FD</literal></entry>
681 <entry>104 (ASCII 'h')</entry>
682 <entry>Unix file descriptor</entry>
685 <entry>(reserved)</entry>
686 <entry>109 (ASCII 'm')</entry>
687 <entry>Reserved for <ulink
688 url="https://bugs.freedesktop.org/show_bug.cgi?id=27857">a
689 'maybe' type compatible with the one in GVariant</ulink>,
690 and must not appear in signatures used on D-Bus until
691 specified here</entry>
694 <entry>(reserved)</entry>
695 <entry>42 (ASCII '*')</entry>
696 <entry>Reserved for use in bindings/implementations to
697 represent any <firstterm>single complete type</firstterm>,
698 and must not appear in signatures used on D-Bus.</entry>
701 <entry>(reserved)</entry>
702 <entry>63 (ASCII '?')</entry>
703 <entry>Reserved for use in bindings/implementations to
704 represent any <firstterm>basic type</firstterm>, and must
705 not appear in signatures used on D-Bus.</entry>
708 <entry>(reserved)</entry>
709 <entry>64 (ASCII '@'), 38 (ASCII '&'),
710 94 (ASCII '^')</entry>
711 <entry>Reserved for internal use by bindings/implementations,
712 and must not appear in signatures used on D-Bus.
713 GVariant uses these type-codes to encode calling
723 <sect2 id="message-protocol-marshaling">
724 <title>Marshaling (Wire Format)</title>
727 Given a type signature, a block of bytes can be converted into typed
728 values. This section describes the format of the block of bytes. Byte
729 order and alignment issues are handled uniformly for all D-Bus types.
733 A block of bytes has an associated byte order. The byte order
734 has to be discovered in some way; for D-Bus messages, the
735 byte order is part of the message header as described in
736 <xref linkend="message-protocol-messages"/>. For now, assume
737 that the byte order is known to be either little endian or big
742 Each value in a block of bytes is aligned "naturally," for example
743 4-byte values are aligned to a 4-byte boundary, and 8-byte values to an
744 8-byte boundary. To properly align a value, <firstterm>alignment
745 padding</firstterm> may be necessary. The alignment padding must always
746 be the minimum required padding to properly align the following value;
747 and it must always be made up of nul bytes. The alignment padding must
748 not be left uninitialized (it can't contain garbage), and more padding
749 than required must not be used.
753 To marshal and unmarshal fixed types, you simply read one value
754 from the data block corresponding to each type code in the signature.
755 All signed integer values are encoded in two's complement, DOUBLE
756 values are IEEE 754 double-precision floating-point, and BOOLEAN
757 values are encoded in 32 bits (of which only the least significant
762 The string-like types are all marshalled as a
763 fixed-length unsigned integer <varname>n</varname> giving the
764 length of the variable part, followed by <varname>n</varname>
765 nonzero bytes of UTF-8 text, followed by a single zero (nul) byte
766 which is not considered to be part of the text. The alignment
767 of the string-like type is the same as the alignment of
768 <varname>n</varname>.
772 For the STRING and OBJECT_PATH types, <varname>n</varname> is
773 encoded in 4 bytes, leading to 4-byte alignment.
774 For the SIGNATURE type, <varname>n</varname> is encoded as a single
775 byte. As a result, alignment padding is never required before a
780 Given all this, the types are marshaled on the wire as follows:
785 <entry>Conventional Name</entry>
786 <entry>Encoding</entry>
787 <entry>Alignment</entry>
792 <entry><literal>INVALID</literal></entry>
793 <entry>Not applicable; cannot be marshaled.</entry>
796 <entry><literal>BYTE</literal></entry>
797 <entry>A single 8-bit byte.</entry>
800 <entry><literal>BOOLEAN</literal></entry>
801 <entry>As for <literal>UINT32</literal>, but only 0 and 1 are valid values.</entry>
804 <entry><literal>INT16</literal></entry>
805 <entry>16-bit signed integer in the message's byte order.</entry>
808 <entry><literal>UINT16</literal></entry>
809 <entry>16-bit unsigned integer in the message's byte order.</entry>
812 <entry><literal>INT32</literal></entry>
813 <entry>32-bit signed integer in the message's byte order.</entry>
816 <entry><literal>UINT32</literal></entry>
817 <entry>32-bit unsigned integer in the message's byte order.</entry>
820 <entry><literal>INT64</literal></entry>
821 <entry>64-bit signed integer in the message's byte order.</entry>
824 <entry><literal>UINT64</literal></entry>
825 <entry>64-bit unsigned integer in the message's byte order.</entry>
828 <entry><literal>DOUBLE</literal></entry>
829 <entry>64-bit IEEE 754 double in the message's byte order.</entry>
832 <entry><literal>STRING</literal></entry>
833 <entry>A <literal>UINT32</literal> indicating the string's
834 length in bytes excluding its terminating nul, followed by
835 non-nul string data of the given length, followed by a terminating nul
842 <entry><literal>OBJECT_PATH</literal></entry>
843 <entry>Exactly the same as <literal>STRING</literal> except the
844 content must be a valid object path (see below).
850 <entry><literal>SIGNATURE</literal></entry>
851 <entry>The same as <literal>STRING</literal> except the length is a single
852 byte (thus signatures have a maximum length of 255)
853 and the content must be a valid signature (see below).
859 <entry><literal>ARRAY</literal></entry>
861 A <literal>UINT32</literal> giving the length of the array data in bytes, followed by
862 alignment padding to the alignment boundary of the array element type,
863 followed by each array element. The array length is from the
864 end of the alignment padding to the end of the last element,
865 i.e. it does not include the padding after the length,
866 or any padding after the last element.
867 Arrays have a maximum length defined to be 2 to the 26th power or
868 67108864. Implementations must not send or accept arrays exceeding this
875 <entry><literal>STRUCT</literal></entry>
877 A struct must start on an 8-byte boundary regardless of the
878 type of the struct fields. The struct value consists of each
879 field marshaled in sequence starting from that 8-byte
886 <entry><literal>VARIANT</literal></entry>
888 A variant type has a marshaled
889 <literal>SIGNATURE</literal> followed by a marshaled
890 value with the type given in the signature. Unlike
891 a message signature, the variant signature can
892 contain only a single complete type. So "i", "ai"
893 or "(ii)" is OK, but "ii" is not. Use of variants may not
894 cause a total message depth to be larger than 64, including
895 other container types such as structures.
898 1 (alignment of the signature)
901 <entry><literal>DICT_ENTRY</literal></entry>
909 <entry><literal>UNIX_FD</literal></entry>
910 <entry>32-bit unsigned integer in the message's byte
911 order. The actual file descriptors need to be
912 transferred out-of-band via some platform specific
913 mechanism. On the wire, values of this type store the index to the
914 file descriptor in the array of file descriptors that
915 accompany the message.</entry>
923 <sect3 id="message-protocol-marshaling-object-path">
924 <title>Valid Object Paths</title>
927 An object path is a name used to refer to an object instance.
928 Conceptually, each participant in a D-Bus message exchange may have
929 any number of object instances (think of C++ or Java objects) and each
930 such instance will have a path. Like a filesystem, the object
931 instances in an application form a hierarchical tree.
935 The following rules define a valid object path. Implementations must
936 not send or accept messages with invalid object paths.
940 The path may be of any length.
945 The path must begin with an ASCII '/' (integer 47) character,
946 and must consist of elements separated by slash characters.
951 Each element must only contain the ASCII characters
957 No element may be the empty string.
962 Multiple '/' characters cannot occur in sequence.
967 A trailing '/' character is not allowed unless the
968 path is the root path (a single '/' character).
975 Object paths are often namespaced by starting with a reversed
976 domain name and containing an interface version number, in the
978 <link linkend="message-protocol-names-interface">interface
980 <link linkend="message-protocol-names-bus">well-known
982 This makes it possible to implement more than one service, or
983 more than one version of a service, in the same process,
984 even if the services share a connection but cannot otherwise
985 co-operate (for instance, if they are implemented by different
990 For instance, if the owner of <literal>example.com</literal> is
991 developing a D-Bus API for a music player, they might use the
992 hierarchy of object paths that start with
993 <literal>/com/example/MusicPlayer1</literal> for its objects.
997 <sect3 id="message-protocol-marshaling-signature">
998 <title>Valid Signatures</title>
1000 An implementation must not send or accept invalid signatures.
1001 Valid signatures will conform to the following rules:
1005 The signature ends with a nul byte.
1010 The signature is a list of single complete types.
1011 Arrays must have element types, and structs must
1012 have both open and close parentheses.
1017 Only type codes and open and close parentheses are
1018 allowed in the signature. The <literal>STRUCT</literal> type code
1019 is not allowed in signatures, because parentheses
1025 The maximum depth of container type nesting is 32 array type
1026 codes and 32 open parentheses. This implies that the maximum
1027 total depth of recursion is 64, for an "array of array of array
1028 of ... struct of struct of struct of ..." where there are 32
1029 array and 32 struct.
1034 The maximum length of a signature is 255.
1039 Signatures must be nul-terminated.
1050 <sect1 id="message-protocol">
1051 <title>Message Protocol</title>
1054 A <firstterm>message</firstterm> consists of a
1055 <firstterm>header</firstterm> and a <firstterm>body</firstterm>. If you
1056 think of a message as a package, the header is the address, and the body
1057 contains the package contents. The message delivery system uses the header
1058 information to figure out where to send the message and how to interpret
1059 it; the recipient interprets the body of the message.
1063 The body of the message is made up of zero or more
1064 <firstterm>arguments</firstterm>, which are typed values, such as an
1065 integer or a byte array.
1069 Both header and body use the D-Bus <link linkend="type-system">type
1070 system</link> and format for serializing data.
1073 <sect2 id="message-protocol-messages">
1074 <title>Message Format</title>
1077 A message consists of a header and a body. The header is a block of
1078 values with a fixed signature and meaning. The body is a separate block
1079 of values, with a signature specified in the header.
1083 The length of the header must be a multiple of 8, allowing the body to
1084 begin on an 8-byte boundary when storing the entire message in a single
1085 buffer. If the header does not naturally end on an 8-byte boundary
1086 up to 7 bytes of nul-initialized alignment padding must be added.
1090 The message body need not end on an 8-byte boundary.
1094 The maximum length of a message, including header, header alignment padding,
1095 and body is 2 to the 27th power or 134217728. Implementations must not
1096 send or accept messages exceeding this size.
1100 The signature of the header is:
1104 Written out more readably, this is:
1106 BYTE, BYTE, BYTE, BYTE, UINT32, UINT32, ARRAY of STRUCT of (BYTE,VARIANT)
1111 These values have the following meanings:
1116 <entry>Value</entry>
1117 <entry>Description</entry>
1122 <entry>1st <literal>BYTE</literal></entry>
1123 <entry>Endianness flag; ASCII 'l' for little-endian
1124 or ASCII 'B' for big-endian. Both header and body are
1125 in this endianness.</entry>
1128 <entry>2nd <literal>BYTE</literal></entry>
1129 <entry><firstterm>Message type</firstterm>. Unknown types must be ignored.
1130 Currently-defined types are described below.
1134 <entry>3rd <literal>BYTE</literal></entry>
1135 <entry>Bitwise OR of flags. Unknown flags
1136 must be ignored. Currently-defined flags are described below.
1140 <entry>4th <literal>BYTE</literal></entry>
1141 <entry>Major protocol version of the sending application. If
1142 the major protocol version of the receiving application does not
1143 match, the applications will not be able to communicate and the
1144 D-Bus connection must be disconnected. The major protocol
1145 version for this version of the specification is 1.
1149 <entry>1st <literal>UINT32</literal></entry>
1150 <entry>Length in bytes of the message body, starting
1151 from the end of the header. The header ends after
1152 its alignment padding to an 8-boundary.
1156 <entry>2nd <literal>UINT32</literal></entry>
1157 <entry>The serial of this message, used as a cookie
1158 by the sender to identify the reply corresponding
1159 to this request. This must not be zero.
1163 <entry><literal>ARRAY</literal> of <literal>STRUCT</literal> of (<literal>BYTE</literal>,<literal>VARIANT</literal>)</entry>
1164 <entry>An array of zero or more <firstterm>header
1165 fields</firstterm> where the byte is the field code, and the
1166 variant is the field value. The message type determines
1167 which fields are required.
1175 <firstterm>Message types</firstterm> that can appear in the second byte
1181 <entry>Conventional name</entry>
1182 <entry>Decimal value</entry>
1183 <entry>Description</entry>
1188 <entry><literal>INVALID</literal></entry>
1190 <entry>This is an invalid type.</entry>
1193 <entry><literal>METHOD_CALL</literal></entry>
1195 <entry>Method call.</entry>
1198 <entry><literal>METHOD_RETURN</literal></entry>
1200 <entry>Method reply with returned data.</entry>
1203 <entry><literal>ERROR</literal></entry>
1205 <entry>Error reply. If the first argument exists and is a
1206 string, it is an error message.</entry>
1209 <entry><literal>SIGNAL</literal></entry>
1211 <entry>Signal emission.</entry>
1218 Flags that can appear in the third byte of the header:
1223 <entry>Conventional name</entry>
1224 <entry>Hex value</entry>
1225 <entry>Description</entry>
1230 <entry><literal>NO_REPLY_EXPECTED</literal></entry>
1232 <entry>This message does not expect method return replies or
1233 error replies; the reply can be omitted as an
1234 optimization. However, it is compliant with this specification
1235 to return the reply despite this flag and the only harm
1236 from doing so is extra network traffic.
1240 <entry><literal>NO_AUTO_START</literal></entry>
1242 <entry>The bus must not launch an owner
1243 for the destination name in response to this message.
1251 <sect3 id="message-protocol-header-fields">
1252 <title>Header Fields</title>
1255 The array at the end of the header contains <firstterm>header
1256 fields</firstterm>, where each field is a 1-byte field code followed
1257 by a field value. A header must contain the required header fields for
1258 its message type, and zero or more of any optional header
1259 fields. Future versions of this protocol specification may add new
1260 fields. Implementations must ignore fields they do not
1261 understand. Implementations must not invent their own header fields;
1262 only changes to this specification may introduce new header fields.
1266 Again, if an implementation sees a header field code that it does not
1267 expect, it must ignore that field, as it will be part of a new
1268 (but compatible) version of this specification. This also applies
1269 to known header fields appearing in unexpected messages, for
1270 example: if a signal has a reply serial it must be ignored
1271 even though it has no meaning as of this version of the spec.
1275 However, implementations must not send or accept known header fields
1276 with the wrong type stored in the field value. So for example a
1277 message with an <literal>INTERFACE</literal> field of type
1278 <literal>UINT32</literal> would be considered corrupt.
1282 Here are the currently-defined header fields:
1287 <entry>Conventional Name</entry>
1288 <entry>Decimal Code</entry>
1290 <entry>Required In</entry>
1291 <entry>Description</entry>
1296 <entry><literal>INVALID</literal></entry>
1299 <entry>not allowed</entry>
1300 <entry>Not a valid field name (error if it appears in a message)</entry>
1303 <entry><literal>PATH</literal></entry>
1305 <entry><literal>OBJECT_PATH</literal></entry>
1306 <entry><literal>METHOD_CALL</literal>, <literal>SIGNAL</literal></entry>
1307 <entry>The object to send a call to,
1308 or the object a signal is emitted from.
1310 <literal>/org/freedesktop/DBus/Local</literal> is reserved;
1311 implementations should not send messages with this path,
1312 and the reference implementation of the bus daemon will
1313 disconnect any application that attempts to do so.
1317 <entry><literal>INTERFACE</literal></entry>
1319 <entry><literal>STRING</literal></entry>
1320 <entry><literal>SIGNAL</literal></entry>
1322 The interface to invoke a method call on, or
1323 that a signal is emitted from. Optional for
1324 method calls, required for signals.
1325 The special interface
1326 <literal>org.freedesktop.DBus.Local</literal> is reserved;
1327 implementations should not send messages with this
1328 interface, and the reference implementation of the bus
1329 daemon will disconnect any application that attempts to
1334 <entry><literal>MEMBER</literal></entry>
1336 <entry><literal>STRING</literal></entry>
1337 <entry><literal>METHOD_CALL</literal>, <literal>SIGNAL</literal></entry>
1338 <entry>The member, either the method name or signal name.</entry>
1341 <entry><literal>ERROR_NAME</literal></entry>
1343 <entry><literal>STRING</literal></entry>
1344 <entry><literal>ERROR</literal></entry>
1345 <entry>The name of the error that occurred, for errors</entry>
1348 <entry><literal>REPLY_SERIAL</literal></entry>
1350 <entry><literal>UINT32</literal></entry>
1351 <entry><literal>ERROR</literal>, <literal>METHOD_RETURN</literal></entry>
1352 <entry>The serial number of the message this message is a reply
1353 to. (The serial number is the second <literal>UINT32</literal> in the header.)</entry>
1356 <entry><literal>DESTINATION</literal></entry>
1358 <entry><literal>STRING</literal></entry>
1359 <entry>optional</entry>
1360 <entry>The name of the connection this message is intended for.
1361 Only used in combination with the message bus, see
1362 <xref linkend="message-bus"/>.</entry>
1365 <entry><literal>SENDER</literal></entry>
1367 <entry><literal>STRING</literal></entry>
1368 <entry>optional</entry>
1369 <entry>Unique name of the sending connection.
1370 The message bus fills in this field so it is reliable; the field is
1371 only meaningful in combination with the message bus.</entry>
1374 <entry><literal>SIGNATURE</literal></entry>
1376 <entry><literal>SIGNATURE</literal></entry>
1377 <entry>optional</entry>
1378 <entry>The signature of the message body.
1379 If omitted, it is assumed to be the
1380 empty signature "" (i.e. the body must be 0-length).</entry>
1383 <entry><literal>UNIX_FDS</literal></entry>
1385 <entry><literal>UINT32</literal></entry>
1386 <entry>optional</entry>
1387 <entry>The number of Unix file descriptors that
1388 accompany the message. If omitted, it is assumed
1389 that no Unix file descriptors accompany the
1390 message. The actual file descriptors need to be
1391 transferred via platform specific mechanism
1392 out-of-band. They must be sent at the same time as
1393 part of the message itself. They may not be sent
1394 before the first byte of the message itself is
1395 transferred or after the last byte of the message
1405 <sect2 id="message-protocol-names">
1406 <title>Valid Names</title>
1408 The various names in D-Bus messages have some restrictions.
1411 There is a <firstterm>maximum name length</firstterm>
1412 of 255 which applies to bus names, interfaces, and members.
1414 <sect3 id="message-protocol-names-interface">
1415 <title>Interface names</title>
1417 Interfaces have names with type <literal>STRING</literal>, meaning that
1418 they must be valid UTF-8. However, there are also some
1419 additional restrictions that apply to interface names
1422 <listitem><para>Interface names are composed of 1 or more elements separated by
1423 a period ('.') character. All elements must contain at least
1427 <listitem><para>Each element must only contain the ASCII characters
1428 "[A-Z][a-z][0-9]_" and must not begin with a digit.
1432 <listitem><para>Interface names must contain at least one '.' (period)
1433 character (and thus at least two elements).
1436 <listitem><para>Interface names must not begin with a '.' (period) character.</para></listitem>
1437 <listitem><para>Interface names must not exceed the maximum name length.</para></listitem>
1442 Interface names should start with the reversed DNS domain name of
1443 the author of the interface (in lower-case), like interface names
1444 in Java. It is conventional for the rest of the interface name
1445 to consist of words run together, with initial capital letters
1446 on all words ("CamelCase"). Several levels of hierarchy can be used.
1447 It is also a good idea to include the major version of the interface
1448 in the name, and increment it if incompatible changes are made;
1449 this way, a single object can implement several versions of an
1450 interface in parallel, if necessary.
1454 For instance, if the owner of <literal>example.com</literal> is
1455 developing a D-Bus API for a music player, they might define
1456 interfaces called <literal>com.example.MusicPlayer1</literal>,
1457 <literal>com.example.MusicPlayer1.Track</literal> and
1458 <literal>com.example.MusicPlayer1.Seekable</literal>.
1462 D-Bus does not distinguish between the concepts that would be
1463 called classes and interfaces in Java: either can be identified on
1464 D-Bus by an interface name.
1467 <sect3 id="message-protocol-names-bus">
1468 <title>Bus names</title>
1470 Connections have one or more bus names associated with them.
1471 A connection has exactly one bus name that is a <firstterm>unique
1472 connection name</firstterm>. The unique connection name remains
1473 with the connection for its entire lifetime.
1474 A bus name is of type <literal>STRING</literal>,
1475 meaning that it must be valid UTF-8. However, there are also
1476 some additional restrictions that apply to bus names
1479 <listitem><para>Bus names that start with a colon (':')
1480 character are unique connection names. Other bus names
1481 are called <firstterm>well-known bus names</firstterm>.
1484 <listitem><para>Bus names are composed of 1 or more elements separated by
1485 a period ('.') character. All elements must contain at least
1489 <listitem><para>Each element must only contain the ASCII characters
1490 "[A-Z][a-z][0-9]_-". Only elements that are part of a unique
1491 connection name may begin with a digit, elements in
1492 other bus names must not begin with a digit.
1496 <listitem><para>Bus names must contain at least one '.' (period)
1497 character (and thus at least two elements).
1500 <listitem><para>Bus names must not begin with a '.' (period) character.</para></listitem>
1501 <listitem><para>Bus names must not exceed the maximum name length.</para></listitem>
1505 Note that the hyphen ('-') character is allowed in bus names but
1506 not in interface names.
1510 Like <link linkend="message-protocol-names-interface">interface
1511 names</link>, well-known bus names should start with the
1512 reversed DNS domain name of the author of the interface (in
1513 lower-case), and it is conventional for the rest of the well-known
1514 bus name to consist of words run together, with initial
1515 capital letters. As with interface names, including a version
1516 number in well-known bus names is a good idea; it's possible to
1517 have the well-known bus name for more than one version
1518 simultaneously if backwards compatibility is required.
1522 If a well-known bus name implies the presence of a "main" interface,
1523 that "main" interface is often given the same name as
1524 the well-known bus name, and situated at the corresponding object
1525 path. For instance, if the owner of <literal>example.com</literal>
1526 is developing a D-Bus API for a music player, they might define
1527 that any application that takes the well-known name
1528 <literal>com.example.MusicPlayer1</literal> should have an object
1529 at the object path <literal>/com/example/MusicPlayer1</literal>
1530 which implements the interface
1531 <literal>com.example.MusicPlayer1</literal>.
1534 <sect3 id="message-protocol-names-member">
1535 <title>Member names</title>
1537 Member (i.e. method or signal) names:
1539 <listitem><para>Must only contain the ASCII characters
1540 "[A-Z][a-z][0-9]_" and may not begin with a
1541 digit.</para></listitem>
1542 <listitem><para>Must not contain the '.' (period) character.</para></listitem>
1543 <listitem><para>Must not exceed the maximum name length.</para></listitem>
1544 <listitem><para>Must be at least 1 byte in length.</para></listitem>
1549 It is conventional for member names on D-Bus to consist of
1550 capitalized words with no punctuation ("camel-case").
1551 Method names should usually be verbs, such as
1552 <literal>GetItems</literal>, and signal names should usually be
1553 a description of an event, such as <literal>ItemsChanged</literal>.
1556 <sect3 id="message-protocol-names-error">
1557 <title>Error names</title>
1559 Error names have the same restrictions as interface names.
1563 Error names have the same naming conventions as interface
1564 names, and often contain <literal>.Error.</literal>; for instance,
1565 the owner of <literal>example.com</literal> might define the
1566 errors <literal>com.example.MusicPlayer.Error.FileNotFound</literal>
1567 and <literal>com.example.MusicPlayer.Error.OutOfMemory</literal>.
1568 The errors defined by D-Bus itself, such as
1569 <literal>org.freedesktop.DBus.Error.Failed</literal>, follow a
1575 <sect2 id="message-protocol-types">
1576 <title>Message Types</title>
1578 Each of the message types (<literal>METHOD_CALL</literal>, <literal>METHOD_RETURN</literal>, <literal>ERROR</literal>, and
1579 <literal>SIGNAL</literal>) has its own expected usage conventions and header fields.
1580 This section describes these conventions.
1582 <sect3 id="message-protocol-types-method">
1583 <title>Method Calls</title>
1585 Some messages invoke an operation on a remote object. These are
1586 called method call messages and have the type tag <literal>METHOD_CALL</literal>. Such
1587 messages map naturally to methods on objects in a typical program.
1590 A method call message is required to have a <literal>MEMBER</literal> header field
1591 indicating the name of the method. Optionally, the message has an
1592 <literal>INTERFACE</literal> field giving the interface the method is a part of. In the
1593 absence of an <literal>INTERFACE</literal> field, if two interfaces on the same object have
1594 a method with the same name, it is undefined which of the two methods
1595 will be invoked. Implementations may also choose to return an error in
1596 this ambiguous case. However, if a method name is unique
1597 implementations must not require an interface field.
1600 Method call messages also include a <literal>PATH</literal> field
1601 indicating the object to invoke the method on. If the call is passing
1602 through a message bus, the message will also have a
1603 <literal>DESTINATION</literal> field giving the name of the connection
1604 to receive the message.
1607 When an application handles a method call message, it is required to
1608 return a reply. The reply is identified by a <literal>REPLY_SERIAL</literal> header field
1609 indicating the serial number of the <literal>METHOD_CALL</literal> being replied to. The
1610 reply can have one of two types; either <literal>METHOD_RETURN</literal> or <literal>ERROR</literal>.
1613 If the reply has type <literal>METHOD_RETURN</literal>, the arguments to the reply message
1614 are the return value(s) or "out parameters" of the method call.
1615 If the reply has type <literal>ERROR</literal>, then an "exception" has been thrown,
1616 and the call fails; no return value will be provided. It makes
1617 no sense to send multiple replies to the same method call.
1620 Even if a method call has no return values, a <literal>METHOD_RETURN</literal>
1621 reply is required, so the caller will know the method
1622 was successfully processed.
1625 The <literal>METHOD_RETURN</literal> or <literal>ERROR</literal> reply message must have the <literal>REPLY_SERIAL</literal>
1629 If a <literal>METHOD_CALL</literal> message has the flag <literal>NO_REPLY_EXPECTED</literal>,
1630 then as an optimization the application receiving the method
1631 call may choose to omit the reply message (regardless of
1632 whether the reply would have been <literal>METHOD_RETURN</literal> or <literal>ERROR</literal>).
1633 However, it is also acceptable to ignore the <literal>NO_REPLY_EXPECTED</literal>
1634 flag and reply anyway.
1637 Unless a message has the flag <literal>NO_AUTO_START</literal>, if the
1638 destination name does not exist then a program to own the destination
1639 name will be started before the message is delivered. The message
1640 will be held until the new program is successfully started or has
1641 failed to start; in case of failure, an error will be returned. This
1642 flag is only relevant in the context of a message bus, it is ignored
1643 during one-to-one communication with no intermediate bus.
1645 <sect4 id="message-protocol-types-method-apis">
1646 <title>Mapping method calls to native APIs</title>
1648 APIs for D-Bus may map method calls to a method call in a specific
1649 programming language, such as C++, or may map a method call written
1650 in an IDL to a D-Bus message.
1653 In APIs of this nature, arguments to a method are often termed "in"
1654 (which implies sent in the <literal>METHOD_CALL</literal>), or "out" (which implies
1655 returned in the <literal>METHOD_RETURN</literal>). Some APIs such as CORBA also have
1656 "inout" arguments, which are both sent and received, i.e. the caller
1657 passes in a value which is modified. Mapped to D-Bus, an "inout"
1658 argument is equivalent to an "in" argument, followed by an "out"
1659 argument. You can't pass things "by reference" over the wire, so
1660 "inout" is purely an illusion of the in-process API.
1663 Given a method with zero or one return values, followed by zero or more
1664 arguments, where each argument may be "in", "out", or "inout", the
1665 caller constructs a message by appending each "in" or "inout" argument,
1666 in order. "out" arguments are not represented in the caller's message.
1669 The recipient constructs a reply by appending first the return value
1670 if any, then each "out" or "inout" argument, in order.
1671 "in" arguments are not represented in the reply message.
1674 Error replies are normally mapped to exceptions in languages that have
1678 In converting from native APIs to D-Bus, it is perhaps nice to
1679 map D-Bus naming conventions ("FooBar") to native conventions
1680 such as "fooBar" or "foo_bar" automatically. This is OK
1681 as long as you can say that the native API is one that
1682 was specifically written for D-Bus. It makes the most sense
1683 when writing object implementations that will be exported
1684 over the bus. Object proxies used to invoke remote D-Bus
1685 objects probably need the ability to call any D-Bus method,
1686 and thus a magic name mapping like this could be a problem.
1689 This specification doesn't require anything of native API bindings;
1690 the preceding is only a suggested convention for consistency
1696 <sect3 id="message-protocol-types-signal">
1697 <title>Signal Emission</title>
1699 Unlike method calls, signal emissions have no replies.
1700 A signal emission is simply a single message of type <literal>SIGNAL</literal>.
1701 It must have three header fields: <literal>PATH</literal> giving the object
1702 the signal was emitted from, plus <literal>INTERFACE</literal> and <literal>MEMBER</literal> giving
1703 the fully-qualified name of the signal. The <literal>INTERFACE</literal> header is required
1704 for signals, though it is optional for method calls.
1708 <sect3 id="message-protocol-types-errors">
1709 <title>Errors</title>
1711 Messages of type <literal>ERROR</literal> are most commonly replies
1712 to a <literal>METHOD_CALL</literal>, but may be returned in reply
1713 to any kind of message. The message bus for example
1714 will return an <literal>ERROR</literal> in reply to a signal emission if
1715 the bus does not have enough memory to send the signal.
1718 An <literal>ERROR</literal> may have any arguments, but if the first
1719 argument is a <literal>STRING</literal>, it must be an error message.
1720 The error message may be logged or shown to the user
1725 <sect3 id="message-protocol-types-notation">
1726 <title>Notation in this document</title>
1728 This document uses a simple pseudo-IDL to describe particular method
1729 calls and signals. Here is an example of a method call:
1731 org.freedesktop.DBus.StartServiceByName (in STRING name, in UINT32 flags,
1732 out UINT32 resultcode)
1734 This means <literal>INTERFACE</literal> = org.freedesktop.DBus, <literal>MEMBER</literal> = StartServiceByName,
1735 <literal>METHOD_CALL</literal> arguments are <literal>STRING</literal> and <literal>UINT32</literal>, <literal>METHOD_RETURN</literal> argument
1736 is <literal>UINT32</literal>. Remember that the <literal>MEMBER</literal> field can't contain any '.' (period)
1737 characters so it's known that the last part of the name in
1738 the "IDL" is the member name.
1741 In C++ that might end up looking like this:
1743 unsigned int org::freedesktop::DBus::StartServiceByName (const char *name,
1744 unsigned int flags);
1746 or equally valid, the return value could be done as an argument:
1748 void org::freedesktop::DBus::StartServiceByName (const char *name,
1750 unsigned int *resultcode);
1752 It's really up to the API designer how they want to make
1753 this look. You could design an API where the namespace wasn't used
1754 in C++, using STL or Qt, using varargs, or whatever you wanted.
1757 Signals are written as follows:
1759 org.freedesktop.DBus.NameLost (STRING name)
1761 Signals don't specify "in" vs. "out" because only
1762 a single direction is possible.
1765 It isn't especially encouraged to use this lame pseudo-IDL in actual
1766 API implementations; you might use the native notation for the
1767 language you're using, or you might use COM or CORBA IDL, for example.
1772 <sect2 id="message-protocol-handling-invalid">
1773 <title>Invalid Protocol and Spec Extensions</title>
1776 For security reasons, the D-Bus protocol should be strictly parsed and
1777 validated, with the exception of defined extension points. Any invalid
1778 protocol or spec violations should result in immediately dropping the
1779 connection without notice to the other end. Exceptions should be
1780 carefully considered, e.g. an exception may be warranted for a
1781 well-understood idiosyncrasy of a widely-deployed implementation. In
1782 cases where the other end of a connection is 100% trusted and known to
1783 be friendly, skipping validation for performance reasons could also make
1784 sense in certain cases.
1788 Generally speaking violations of the "must" requirements in this spec
1789 should be considered possible attempts to exploit security, and violations
1790 of the "should" suggestions should be considered legitimate (though perhaps
1791 they should generate an error in some cases).
1795 The following extension points are built in to D-Bus on purpose and must
1796 not be treated as invalid protocol. The extension points are intended
1797 for use by future versions of this spec, they are not intended for third
1798 parties. At the moment, the only way a third party could extend D-Bus
1799 without breaking interoperability would be to introduce a way to negotiate new
1800 feature support as part of the auth protocol, using EXTENSION_-prefixed
1801 commands. There is not yet a standard way to negotiate features.
1805 In the authentication protocol (see <xref linkend="auth-protocol"/>) unknown
1806 commands result in an ERROR rather than a disconnect. This enables
1807 future extensions to the protocol. Commands starting with EXTENSION_ are
1808 reserved for third parties.
1813 The authentication protocol supports pluggable auth mechanisms.
1818 The address format (see <xref linkend="addresses"/>) supports new
1824 Messages with an unknown type (something other than
1825 <literal>METHOD_CALL</literal>, <literal>METHOD_RETURN</literal>,
1826 <literal>ERROR</literal>, <literal>SIGNAL</literal>) are ignored.
1827 Unknown-type messages must still be well-formed in the same way
1828 as the known messages, however. They still have the normal
1834 Header fields with an unknown or unexpected field code must be ignored,
1835 though again they must still be well-formed.
1840 New standard interfaces (with new methods and signals) can of course be added.
1850 <sect1 id="auth-protocol">
1851 <title>Authentication Protocol</title>
1853 Before the flow of messages begins, two applications must
1854 authenticate. A simple plain-text protocol is used for
1855 authentication; this protocol is a SASL profile, and maps fairly
1856 directly from the SASL specification. The message encoding is
1857 NOT used here, only plain text messages.
1860 In examples, "C:" and "S:" indicate lines sent by the client and
1861 server respectively.
1863 <sect2 id="auth-protocol-overview">
1864 <title>Protocol Overview</title>
1866 The protocol is a line-based protocol, where each line ends with
1867 \r\n. Each line begins with an all-caps ASCII command name containing
1868 only the character range [A-Z_], a space, then any arguments for the
1869 command, then the \r\n ending the line. The protocol is
1870 case-sensitive. All bytes must be in the ASCII character set.
1872 Commands from the client to the server are as follows:
1875 <listitem><para>AUTH [mechanism] [initial-response]</para></listitem>
1876 <listitem><para>CANCEL</para></listitem>
1877 <listitem><para>BEGIN</para></listitem>
1878 <listitem><para>DATA <data in hex encoding></para></listitem>
1879 <listitem><para>ERROR [human-readable error explanation]</para></listitem>
1880 <listitem><para>NEGOTIATE_UNIX_FD</para></listitem>
1883 From server to client are as follows:
1886 <listitem><para>REJECTED <space-separated list of mechanism names></para></listitem>
1887 <listitem><para>OK <GUID in hex></para></listitem>
1888 <listitem><para>DATA <data in hex encoding></para></listitem>
1889 <listitem><para>ERROR</para></listitem>
1890 <listitem><para>AGREE_UNIX_FD</para></listitem>
1894 Unofficial extensions to the command set must begin with the letters
1895 "EXTENSION_", to avoid conflicts with future official commands.
1896 For example, "EXTENSION_COM_MYDOMAIN_DO_STUFF".
1899 <sect2 id="auth-nul-byte">
1900 <title>Special credentials-passing nul byte</title>
1902 Immediately after connecting to the server, the client must send a
1903 single nul byte. This byte may be accompanied by credentials
1904 information on some operating systems that use sendmsg() with
1905 SCM_CREDS or SCM_CREDENTIALS to pass credentials over UNIX domain
1906 sockets. However, the nul byte must be sent even on other kinds of
1907 socket, and even on operating systems that do not require a byte to be
1908 sent in order to transmit credentials. The text protocol described in
1909 this document begins after the single nul byte. If the first byte
1910 received from the client is not a nul byte, the server may disconnect
1914 A nul byte in any context other than the initial byte is an error;
1915 the protocol is ASCII-only.
1918 The credentials sent along with the nul byte may be used with the
1919 SASL mechanism EXTERNAL.
1922 <sect2 id="auth-command-auth">
1923 <title>AUTH command</title>
1925 If an AUTH command has no arguments, it is a request to list
1926 available mechanisms. The server must respond with a REJECTED
1927 command listing the mechanisms it understands, or with an error.
1930 If an AUTH command specifies a mechanism, and the server supports
1931 said mechanism, the server should begin exchanging SASL
1932 challenge-response data with the client using DATA commands.
1935 If the server does not support the mechanism given in the AUTH
1936 command, it must send either a REJECTED command listing the mechanisms
1937 it does support, or an error.
1940 If the [initial-response] argument is provided, it is intended for use
1941 with mechanisms that have no initial challenge (or an empty initial
1942 challenge), as if it were the argument to an initial DATA command. If
1943 the selected mechanism has an initial challenge and [initial-response]
1944 was provided, the server should reject authentication by sending
1948 If authentication succeeds after exchanging DATA commands,
1949 an OK command must be sent to the client.
1952 The first octet received by the server after the \r\n of the BEGIN
1953 command from the client must be the first octet of the
1954 authenticated/encrypted stream of D-Bus messages.
1957 If BEGIN is received by the server, the first octet received
1958 by the client after the \r\n of the OK command must be the
1959 first octet of the authenticated/encrypted stream of D-Bus
1963 <sect2 id="auth-command-cancel">
1964 <title>CANCEL Command</title>
1966 At any time up to sending the BEGIN command, the client may send a
1967 CANCEL command. On receiving the CANCEL command, the server must
1968 send a REJECTED command and abort the current authentication
1972 <sect2 id="auth-command-data">
1973 <title>DATA Command</title>
1975 The DATA command may come from either client or server, and simply
1976 contains a hex-encoded block of data to be interpreted
1977 according to the SASL mechanism in use.
1980 Some SASL mechanisms support sending an "empty string";
1981 FIXME we need some way to do this.
1984 <sect2 id="auth-command-begin">
1985 <title>BEGIN Command</title>
1987 The BEGIN command acknowledges that the client has received an
1988 OK command from the server, and that the stream of messages
1992 The first octet received by the server after the \r\n of the BEGIN
1993 command from the client must be the first octet of the
1994 authenticated/encrypted stream of D-Bus messages.
1997 <sect2 id="auth-command-rejected">
1998 <title>REJECTED Command</title>
2000 The REJECTED command indicates that the current authentication
2001 exchange has failed, and further exchange of DATA is inappropriate.
2002 The client would normally try another mechanism, or try providing
2003 different responses to challenges.
2005 Optionally, the REJECTED command has a space-separated list of
2006 available auth mechanisms as arguments. If a server ever provides
2007 a list of supported mechanisms, it must provide the same list
2008 each time it sends a REJECTED message. Clients are free to
2009 ignore all lists received after the first.
2012 <sect2 id="auth-command-ok">
2013 <title>OK Command</title>
2015 The OK command indicates that the client has been
2016 authenticated. The client may now proceed with negotiating
2017 Unix file descriptor passing. To do that it shall send
2018 NEGOTIATE_UNIX_FD to the server.
2021 Otherwise, the client must respond to the OK command by
2022 sending a BEGIN command, followed by its stream of messages,
2023 or by disconnecting. The server must not accept additional
2024 commands using this protocol after the BEGIN command has been
2025 received. Further communication will be a stream of D-Bus
2026 messages (optionally encrypted, as negotiated) rather than
2030 If a client sends BEGIN the first octet received by the client
2031 after the \r\n of the OK command must be the first octet of
2032 the authenticated/encrypted stream of D-Bus messages.
2035 The OK command has one argument, which is the GUID of the server.
2036 See <xref linkend="addresses"/> for more on server GUIDs.
2039 <sect2 id="auth-command-error">
2040 <title>ERROR Command</title>
2042 The ERROR command indicates that either server or client did not
2043 know a command, does not accept the given command in the current
2044 context, or did not understand the arguments to the command. This
2045 allows the protocol to be extended; a client or server can send a
2046 command present or permitted only in new protocol versions, and if
2047 an ERROR is received instead of an appropriate response, fall back
2048 to using some other technique.
2051 If an ERROR is sent, the server or client that sent the
2052 error must continue as if the command causing the ERROR had never been
2053 received. However, the the server or client receiving the error
2054 should try something other than whatever caused the error;
2055 if only canceling/rejecting the authentication.
2058 If the D-Bus protocol changes incompatibly at some future time,
2059 applications implementing the new protocol would probably be able to
2060 check for support of the new protocol by sending a new command and
2061 receiving an ERROR from applications that don't understand it. Thus the
2062 ERROR feature of the auth protocol is an escape hatch that lets us
2063 negotiate extensions or changes to the D-Bus protocol in the future.
2066 <sect2 id="auth-command-negotiate-unix-fd">
2067 <title>NEGOTIATE_UNIX_FD Command</title>
2069 The NEGOTIATE_UNIX_FD command indicates that the client
2070 supports Unix file descriptor passing. This command may only
2071 be sent after the connection is authenticated, i.e. after OK
2072 was received by the client. This command may only be sent on
2073 transports that support Unix file descriptor passing.
2076 On receiving NEGOTIATE_UNIX_FD the server must respond with
2077 either AGREE_UNIX_FD or ERROR. It shall respond the former if
2078 the transport chosen supports Unix file descriptor passing and
2079 the server supports this feature. It shall respond the latter
2080 if the transport does not support Unix file descriptor
2081 passing, the server does not support this feature, or the
2082 server decides not to enable file descriptor passing due to
2083 security or other reasons.
2086 <sect2 id="auth-command-agree-unix-fd">
2087 <title>AGREE_UNIX_FD Command</title>
2089 The AGREE_UNIX_FD command indicates that the server supports
2090 Unix file descriptor passing. This command may only be sent
2091 after the connection is authenticated, and the client sent
2092 NEGOTIATE_UNIX_FD to enable Unix file descriptor passing. This
2093 command may only be sent on transports that support Unix file
2097 On receiving AGREE_UNIX_FD the client must respond with BEGIN,
2098 followed by its stream of messages, or by disconnecting. The
2099 server must not accept additional commands using this protocol
2100 after the BEGIN command has been received. Further
2101 communication will be a stream of D-Bus messages (optionally
2102 encrypted, as negotiated) rather than this protocol.
2105 <sect2 id="auth-command-future">
2106 <title>Future Extensions</title>
2108 Future extensions to the authentication and negotiation
2109 protocol are possible. For that new commands may be
2110 introduced. If a client or server receives an unknown command
2111 it shall respond with ERROR and not consider this fatal. New
2112 commands may be introduced both before, and after
2113 authentication, i.e. both before and after the OK command.
2116 <sect2 id="auth-examples">
2117 <title>Authentication examples</title>
2121 <title>Example of successful magic cookie authentication</title>
2123 (MAGIC_COOKIE is a made up mechanism)
2125 C: AUTH MAGIC_COOKIE 3138363935333137393635383634
2131 <title>Example of finding out mechanisms then picking one</title>
2134 S: REJECTED KERBEROS_V4 SKEY
2135 C: AUTH SKEY 7ab83f32ee
2136 S: DATA 8799cabb2ea93e
2137 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
2143 <title>Example of client sends unknown command then falls back to regular auth</title>
2147 C: AUTH MAGIC_COOKIE 3736343435313230333039
2153 <title>Example of server doesn't support initial auth mechanism</title>
2155 C: AUTH MAGIC_COOKIE 3736343435313230333039
2156 S: REJECTED KERBEROS_V4 SKEY
2157 C: AUTH SKEY 7ab83f32ee
2158 S: DATA 8799cabb2ea93e
2159 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
2165 <title>Example of wrong password or the like followed by successful retry</title>
2167 C: AUTH MAGIC_COOKIE 3736343435313230333039
2168 S: REJECTED KERBEROS_V4 SKEY
2169 C: AUTH SKEY 7ab83f32ee
2170 S: DATA 8799cabb2ea93e
2171 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
2173 C: AUTH SKEY 7ab83f32ee
2174 S: DATA 8799cabb2ea93e
2175 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
2181 <title>Example of skey cancelled and restarted</title>
2183 C: AUTH MAGIC_COOKIE 3736343435313230333039
2184 S: REJECTED KERBEROS_V4 SKEY
2185 C: AUTH SKEY 7ab83f32ee
2186 S: DATA 8799cabb2ea93e
2189 C: AUTH SKEY 7ab83f32ee
2190 S: DATA 8799cabb2ea93e
2191 C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
2197 <title>Example of successful magic cookie authentication with successful negotiation of Unix FD passing</title>
2199 (MAGIC_COOKIE is a made up mechanism)
2201 C: AUTH MAGIC_COOKIE 3138363935333137393635383634
2203 C: NEGOTIATE_UNIX_FD
2209 <title>Example of successful magic cookie authentication with unsuccessful negotiation of Unix FD passing</title>
2211 (MAGIC_COOKIE is a made up mechanism)
2213 C: AUTH MAGIC_COOKIE 3138363935333137393635383634
2215 C: NEGOTIATE_UNIX_FD
2222 <sect2 id="auth-states">
2223 <title>Authentication state diagrams</title>
2226 This section documents the auth protocol in terms of
2227 a state machine for the client and the server. This is
2228 probably the most robust way to implement the protocol.
2231 <sect3 id="auth-states-client">
2232 <title>Client states</title>
2235 To more precisely describe the interaction between the
2236 protocol state machine and the authentication mechanisms the
2237 following notation is used: MECH(CHALL) means that the
2238 server challenge CHALL was fed to the mechanism MECH, which
2244 CONTINUE(RESP) means continue the auth conversation
2245 and send RESP as the response to the server;
2251 OK(RESP) means that after sending RESP to the server
2252 the client side of the auth conversation is finished
2253 and the server should return "OK";
2259 ERROR means that CHALL was invalid and could not be
2265 Both RESP and CHALL may be empty.
2269 The Client starts by getting an initial response from the
2270 default mechanism and sends AUTH MECH RESP, or AUTH MECH if
2271 the mechanism did not provide an initial response. If the
2272 mechanism returns CONTINUE, the client starts in state
2273 <emphasis>WaitingForData</emphasis>, if the mechanism
2274 returns OK the client starts in state
2275 <emphasis>WaitingForOK</emphasis>.
2279 The client should keep track of available mechanisms and
2280 which it mechanisms it has already attempted. This list is
2281 used to decide which AUTH command to send. When the list is
2282 exhausted, the client should give up and close the
2287 <title><emphasis>WaitingForData</emphasis></title>
2295 MECH(CHALL) returns CONTINUE(RESP) → send
2297 <emphasis>WaitingForData</emphasis>
2301 MECH(CHALL) returns OK(RESP) → send DATA
2302 RESP, goto <emphasis>WaitingForOK</emphasis>
2306 MECH(CHALL) returns ERROR → send ERROR
2307 [msg], goto <emphasis>WaitingForData</emphasis>
2315 Receive REJECTED [mechs] →
2316 send AUTH [next mech], goto
2317 WaitingForData or <emphasis>WaitingForOK</emphasis>
2322 Receive ERROR → send
2324 <emphasis>WaitingForReject</emphasis>
2329 Receive OK → send
2330 BEGIN, terminate auth
2331 conversation, authenticated
2336 Receive anything else → send
2338 <emphasis>WaitingForData</emphasis>
2346 <title><emphasis>WaitingForOK</emphasis></title>
2351 Receive OK → send BEGIN, terminate auth
2352 conversation, <emphasis>authenticated</emphasis>
2357 Receive REJECT [mechs] → send AUTH [next mech],
2358 goto <emphasis>WaitingForData</emphasis> or
2359 <emphasis>WaitingForOK</emphasis>
2365 Receive DATA → send CANCEL, goto
2366 <emphasis>WaitingForReject</emphasis>
2372 Receive ERROR → send CANCEL, goto
2373 <emphasis>WaitingForReject</emphasis>
2379 Receive anything else → send ERROR, goto
2380 <emphasis>WaitingForOK</emphasis>
2388 <title><emphasis>WaitingForReject</emphasis></title>
2393 Receive REJECT [mechs] → send AUTH [next mech],
2394 goto <emphasis>WaitingForData</emphasis> or
2395 <emphasis>WaitingForOK</emphasis>
2401 Receive anything else → terminate auth
2402 conversation, disconnect
2411 <sect3 id="auth-states-server">
2412 <title>Server states</title>
2415 For the server MECH(RESP) means that the client response
2416 RESP was fed to the the mechanism MECH, which returns one of
2421 CONTINUE(CHALL) means continue the auth conversation and
2422 send CHALL as the challenge to the client;
2428 OK means that the client has been successfully
2435 REJECT means that the client failed to authenticate or
2436 there was an error in RESP.
2441 The server starts out in state
2442 <emphasis>WaitingForAuth</emphasis>. If the client is
2443 rejected too many times the server must disconnect the
2448 <title><emphasis>WaitingForAuth</emphasis></title>
2454 Receive AUTH → send REJECTED [mechs], goto
2455 <emphasis>WaitingForAuth</emphasis>
2461 Receive AUTH MECH RESP
2465 MECH not valid mechanism → send REJECTED
2467 <emphasis>WaitingForAuth</emphasis>
2471 MECH(RESP) returns CONTINUE(CHALL) → send
2473 <emphasis>WaitingForData</emphasis>
2477 MECH(RESP) returns OK → send OK, goto
2478 <emphasis>WaitingForBegin</emphasis>
2482 MECH(RESP) returns REJECT → send REJECTED
2484 <emphasis>WaitingForAuth</emphasis>
2492 Receive BEGIN → terminate
2493 auth conversation, disconnect
2499 Receive ERROR → send REJECTED [mechs], goto
2500 <emphasis>WaitingForAuth</emphasis>
2506 Receive anything else → send
2508 <emphasis>WaitingForAuth</emphasis>
2517 <title><emphasis>WaitingForData</emphasis></title>
2525 MECH(RESP) returns CONTINUE(CHALL) → send
2527 <emphasis>WaitingForData</emphasis>
2531 MECH(RESP) returns OK → send OK, goto
2532 <emphasis>WaitingForBegin</emphasis>
2536 MECH(RESP) returns REJECT → send REJECTED
2538 <emphasis>WaitingForAuth</emphasis>
2546 Receive BEGIN → terminate auth conversation,
2553 Receive CANCEL → send REJECTED [mechs], goto
2554 <emphasis>WaitingForAuth</emphasis>
2560 Receive ERROR → send REJECTED [mechs], goto
2561 <emphasis>WaitingForAuth</emphasis>
2567 Receive anything else → send ERROR, goto
2568 <emphasis>WaitingForData</emphasis>
2576 <title><emphasis>WaitingForBegin</emphasis></title>
2581 Receive BEGIN → terminate auth conversation,
2582 client authenticated
2588 Receive CANCEL → send REJECTED [mechs], goto
2589 <emphasis>WaitingForAuth</emphasis>
2595 Receive ERROR → send REJECTED [mechs], goto
2596 <emphasis>WaitingForAuth</emphasis>
2602 Receive anything else → send ERROR, goto
2603 <emphasis>WaitingForBegin</emphasis>
2613 <sect2 id="auth-mechanisms">
2614 <title>Authentication mechanisms</title>
2616 This section describes some new authentication mechanisms.
2617 D-Bus also allows any standard SASL mechanism of course.
2619 <sect3 id="auth-mechanisms-sha">
2620 <title>DBUS_COOKIE_SHA1</title>
2622 The DBUS_COOKIE_SHA1 mechanism is designed to establish that a client
2623 has the ability to read a private file owned by the user being
2624 authenticated. If the client can prove that it has access to a secret
2625 cookie stored in this file, then the client is authenticated.
2626 Thus the security of DBUS_COOKIE_SHA1 depends on a secure home
2630 Throughout this description, "hex encoding" must output the digits
2631 from a to f in lower-case; the digits A to F must not be used
2632 in the DBUS_COOKIE_SHA1 mechanism.
2635 Authentication proceeds as follows:
2639 The client sends the username it would like to authenticate
2645 The server sends the name of its "cookie context" (see below); a
2646 space character; the integer ID of the secret cookie the client
2647 must demonstrate knowledge of; a space character; then a
2648 randomly-generated challenge string, all of this hex-encoded into
2654 The client locates the cookie and generates its own
2655 randomly-generated challenge string. The client then concatenates
2656 the server's decoded challenge, a ":" character, its own challenge,
2657 another ":" character, and the cookie. It computes the SHA-1 hash
2658 of this composite string as a hex digest. It concatenates the
2659 client's challenge string, a space character, and the SHA-1 hex
2660 digest, hex-encodes the result and sends it back to the server.
2665 The server generates the same concatenated string used by the
2666 client and computes its SHA-1 hash. It compares the hash with
2667 the hash received from the client; if the two hashes match, the
2668 client is authenticated.
2674 Each server has a "cookie context," which is a name that identifies a
2675 set of cookies that apply to that server. A sample context might be
2676 "org_freedesktop_session_bus". Context names must be valid ASCII,
2677 nonzero length, and may not contain the characters slash ("/"),
2678 backslash ("\"), space (" "), newline ("\n"), carriage return ("\r"),
2679 tab ("\t"), or period ("."). There is a default context,
2680 "org_freedesktop_general" that's used by servers that do not specify
2684 Cookies are stored in a user's home directory, in the directory
2685 <filename>~/.dbus-keyrings/</filename>. This directory must
2686 not be readable or writable by other users. If it is,
2687 clients and servers must ignore it. The directory
2688 contains cookie files named after the cookie context.
2691 A cookie file contains one cookie per line. Each line
2692 has three space-separated fields:
2696 The cookie ID number, which must be a non-negative integer and
2697 may not be used twice in the same file.
2702 The cookie's creation time, in UNIX seconds-since-the-epoch
2708 The cookie itself, a hex-encoded random block of bytes. The cookie
2709 may be of any length, though obviously security increases
2710 as the length increases.
2716 Only server processes modify the cookie file.
2717 They must do so with this procedure:
2721 Create a lockfile name by appending ".lock" to the name of the
2722 cookie file. The server should attempt to create this file
2723 using <literal>O_CREAT | O_EXCL</literal>. If file creation
2724 fails, the lock fails. Servers should retry for a reasonable
2725 period of time, then they may choose to delete an existing lock
2726 to keep users from having to manually delete a stale
2727 lock. <footnote><para>Lockfiles are used instead of real file
2728 locking <literal>fcntl()</literal> because real locking
2729 implementations are still flaky on network
2730 filesystems.</para></footnote>
2735 Once the lockfile has been created, the server loads the cookie
2736 file. It should then delete any cookies that are old (the
2737 timeout can be fairly short), or more than a reasonable
2738 time in the future (so that cookies never accidentally
2739 become permanent, if the clock was set far into the future
2740 at some point). If no recent keys remain, the
2741 server may generate a new key.
2746 The pruned and possibly added-to cookie file
2747 must be resaved atomically (using a temporary
2748 file which is rename()'d).
2753 The lock must be dropped by deleting the lockfile.
2759 Clients need not lock the file in order to load it,
2760 because servers are required to save the file atomically.
2765 <sect1 id="addresses">
2766 <title>Server Addresses</title>
2768 Server addresses consist of a transport name followed by a colon, and
2769 then an optional, comma-separated list of keys and values in the form key=value.
2770 Each value is escaped.
2774 <programlisting>unix:path=/tmp/dbus-test</programlisting>
2775 Which is the address to a unix socket with the path /tmp/dbus-test.
2778 Value escaping is similar to URI escaping but simpler.
2782 The set of optionally-escaped bytes is:
2783 <literal>[0-9A-Za-z_-/.\]</literal>. To escape, each
2784 <emphasis>byte</emphasis> (note, not character) which is not in the
2785 set of optionally-escaped bytes must be replaced with an ASCII
2786 percent (<literal>%</literal>) and the value of the byte in hex.
2787 The hex value must always be two digits, even if the first digit is
2788 zero. The optionally-escaped bytes may be escaped if desired.
2793 To unescape, append each byte in the value; if a byte is an ASCII
2794 percent (<literal>%</literal>) character then append the following
2795 hex value instead. It is an error if a <literal>%</literal> byte
2796 does not have two hex digits following. It is an error if a
2797 non-optionally-escaped byte is seen unescaped.
2801 The set of optionally-escaped bytes is intended to preserve address
2802 readability and convenience.
2806 A server may specify a key-value pair with the key <literal>guid</literal>
2807 and the value a hex-encoded 16-byte sequence. <xref linkend="uuids"/>
2808 describes the format of the <literal>guid</literal> field. If present,
2809 this UUID may be used to distinguish one server address from another. A
2810 server should use a different UUID for each address it listens on. For
2811 example, if a message bus daemon offers both UNIX domain socket and TCP
2812 connections, but treats clients the same regardless of how they connect,
2813 those two connections are equivalent post-connection but should have
2814 distinct UUIDs to distinguish the kinds of connection.
2818 The intent of the address UUID feature is to allow a client to avoid
2819 opening multiple identical connections to the same server, by allowing the
2820 client to check whether an address corresponds to an already-existing
2821 connection. Comparing two addresses is insufficient, because addresses
2822 can be recycled by distinct servers, and equivalent addresses may look
2823 different if simply compared as strings (for example, the host in a TCP
2824 address can be given as an IP address or as a hostname).
2828 Note that the address key is <literal>guid</literal> even though the
2829 rest of the API and documentation says "UUID," for historical reasons.
2833 [FIXME clarify if attempting to connect to each is a requirement
2834 or just a suggestion]
2835 When connecting to a server, multiple server addresses can be
2836 separated by a semi-colon. The library will then try to connect
2837 to the first address and if that fails, it'll try to connect to
2838 the next one specified, and so forth. For example
2839 <programlisting>unix:path=/tmp/dbus-test;unix:path=/tmp/dbus-test2</programlisting>
2844 <sect1 id="transports">
2845 <title>Transports</title>
2847 [FIXME we need to specify in detail each transport and its possible arguments]
2849 Current transports include: unix domain sockets (including
2850 abstract namespace on linux), launchd, systemd, TCP/IP, an executed subprocess and a debug/testing transport
2851 using in-process pipes. Future possible transports include one that
2852 tunnels over X11 protocol.
2855 <sect2 id="transports-unix-domain-sockets">
2856 <title>Unix Domain Sockets</title>
2858 Unix domain sockets can be either paths in the file system or on Linux
2859 kernels, they can be abstract which are similar to paths but
2860 do not show up in the file system.
2864 When a socket is opened by the D-Bus library it truncates the path
2865 name right before the first trailing Nul byte. This is true for both
2866 normal paths and abstract paths. Note that this is a departure from
2867 previous versions of D-Bus that would create sockets with a fixed
2868 length path name. Names which were shorter than the fixed length
2869 would be padded by Nul bytes.
2872 Unix domain sockets are not available on Windows.
2874 <sect3 id="transports-unix-domain-sockets-addresses">
2875 <title>Server Address Format</title>
2877 Unix domain socket addresses are identified by the "unix:" prefix
2878 and support the following key/value pairs:
2885 <entry>Values</entry>
2886 <entry>Description</entry>
2892 <entry>(path)</entry>
2893 <entry>path of the unix domain socket. If set, the "tmpdir" and "abstract" key must not be set.</entry>
2896 <entry>tmpdir</entry>
2897 <entry>(path)</entry>
2898 <entry>temporary directory in which a socket file with a random file name starting with 'dbus-' will be created by the server. This key can only be used in server addresses, not in client addresses. If set, the "path" and "abstract" key must not be set.</entry>
2901 <entry>abstract</entry>
2902 <entry>(string)</entry>
2903 <entry>unique string (path) in the abstract namespace. If set, the "path" or "tempdir" key must not be set.</entry>
2910 <sect2 id="transports-launchd">
2911 <title>launchd</title>
2913 launchd is an open-source server management system that replaces init, inetd
2914 and cron on Apple Mac OS X versions 10.4 and above. It provides a common session
2915 bus address for each user and deprecates the X11-enabled D-Bus launcher on OSX.
2919 launchd allocates a socket and provides it with the unix path through the
2920 DBUS_LAUNCHD_SESSION_BUS_SOCKET variable in launchd's environment. Every process
2921 spawned by launchd (or dbus-daemon, if it was started by launchd) can access
2922 it through its environment.
2923 Other processes can query for the launchd socket by executing:
2924 $ launchctl getenv DBUS_LAUNCHD_SESSION_BUS_SOCKET
2925 This is normally done by the D-Bus client library so doesn't have to be done
2929 launchd is not available on Microsoft Windows.
2931 <sect3 id="transports-launchd-addresses">
2932 <title>Server Address Format</title>
2934 launchd addresses are identified by the "launchd:" prefix
2935 and support the following key/value pairs:
2942 <entry>Values</entry>
2943 <entry>Description</entry>
2949 <entry>(environment variable)</entry>
2950 <entry>path of the unix domain socket for the launchd created dbus-daemon.</entry>
2957 <sect2 id="transports-systemd">
2958 <title>systemd</title>
2960 systemd is an open-source server management system that
2961 replaces init and inetd on newer Linux systems. It supports
2962 socket activation. The D-Bus systemd transport is used to acquire
2963 socket activation file descriptors from systemd and use them
2964 as D-Bus transport when the current process is spawned by
2965 socket activation from it.
2968 The systemd transport accepts only one or more Unix domain or
2969 TCP streams sockets passed in via socket activation.
2972 The systemd transport is not available on non-Linux operating systems.
2975 The systemd transport defines no parameter keys.
2978 <sect2 id="transports-tcp-sockets">
2979 <title>TCP Sockets</title>
2981 The tcp transport provides TCP/IP based connections between clients
2982 located on the same or different hosts.
2985 Using tcp transport without any additional secure authentification mechanismus
2986 over a network is unsecure.
2989 Windows notes: Because of the tcp stack on Windows does not provide sending
2990 credentials over a tcp connection, the EXTERNAL authentification
2991 mechanismus does not work.
2993 <sect3 id="transports-tcp-sockets-addresses">
2994 <title>Server Address Format</title>
2996 TCP/IP socket addresses are identified by the "tcp:" prefix
2997 and support the following key/value pairs:
3004 <entry>Values</entry>
3005 <entry>Description</entry>
3011 <entry>(string)</entry>
3012 <entry>dns name or ip address</entry>
3016 <entry>(number)</entry>
3017 <entry>The tcp port the server will open. A zero value let the server
3018 choose a free port provided from the underlaying operating system.
3019 libdbus is able to retrieve the real used port from the server.
3023 <entry>family</entry>
3024 <entry>(string)</entry>
3025 <entry>If set, provide the type of socket family either "ipv4" or "ipv6". If unset, the family is unspecified.</entry>
3032 <sect2 id="transports-nonce-tcp-sockets">
3033 <title>Nonce-secured TCP Sockets</title>
3035 The nonce-tcp transport provides a secured TCP transport, using a
3036 simple authentication mechanism to ensure that only clients with read
3037 access to a certain location in the filesystem can connect to the server.
3038 The server writes a secret, the nonce, to a file and an incoming client
3039 connection is only accepted if the client sends the nonce right after
3040 the connect. The nonce mechanism requires no setup and is orthogonal to
3041 the higher-level authentication mechanisms described in the
3042 Authentication section.
3046 On start, the server generates a random 16 byte nonce and writes it
3047 to a file in the user's temporary directory. The nonce file location
3048 is published as part of the server's D-Bus address using the
3049 "noncefile" key-value pair.
3051 After an accept, the server reads 16 bytes from the socket. If the
3052 read bytes do not match the nonce stored in the nonce file, the
3053 server MUST immediately drop the connection.
3054 If the nonce match the received byte sequence, the client is accepted
3055 and the transport behaves like an unsecured tcp transport.
3058 After a successful connect to the server socket, the client MUST read
3059 the nonce from the file published by the server via the noncefile=
3060 key-value pair and send it over the socket. After that, the
3061 transport behaves like an unsecured tcp transport.
3063 <sect3 id="transports-nonce-tcp-sockets-addresses">
3064 <title>Server Address Format</title>
3066 Nonce TCP/IP socket addresses uses the "nonce-tcp:" prefix
3067 and support the following key/value pairs:
3074 <entry>Values</entry>
3075 <entry>Description</entry>
3081 <entry>(string)</entry>
3082 <entry>dns name or ip address</entry>
3086 <entry>(number)</entry>
3087 <entry>The tcp port the server will open. A zero value let the server
3088 choose a free port provided from the underlaying operating system.
3089 libdbus is able to retrieve the real used port from the server.
3093 <entry>family</entry>
3094 <entry>(string)</entry>
3095 <entry>If set, provide the type of socket family either "ipv4" or "ipv6". If unset, the family is unspecified.</entry>
3098 <entry>noncefile</entry>
3099 <entry>(path)</entry>
3100 <entry>file location containing the secret</entry>
3107 <sect2 id="transports-exec">
3108 <title>Executed Subprocesses on Unix</title>
3110 This transport forks off a process and connects its standard
3111 input and standard output with an anonymous Unix domain
3112 socket. This socket is then used for communication by the
3113 transport. This transport may be used to use out-of-process
3114 forwarder programs as basis for the D-Bus protocol.
3117 The forked process will inherit the standard error output and
3118 process group from the parent process.
3121 Executed subprocesses are not available on Windows.
3123 <sect3 id="transports-exec-addresses">
3124 <title>Server Address Format</title>
3126 Executed subprocess addresses are identified by the "unixexec:" prefix
3127 and support the following key/value pairs:
3134 <entry>Values</entry>
3135 <entry>Description</entry>
3141 <entry>(path)</entry>
3142 <entry>Path of the binary to execute, either an absolute
3143 path or a binary name that is searched for in the default
3144 search path of the OS. This corresponds to the first
3145 argument of execlp(). This key is mandatory.</entry>
3148 <entry>argv0</entry>
3149 <entry>(string)</entry>
3150 <entry>The program name to use when executing the
3151 binary. If omitted the same value as specified for path=
3152 will be used. This corresponds to the second argument of
3156 <entry>argv1, argv2, ...</entry>
3157 <entry>(string)</entry>
3158 <entry>Arguments to pass to the binary. This corresponds
3159 to the third and later arguments of execlp(). If a
3160 specific argvX is not specified no further argvY for Y > X
3161 are taken into account.</entry>
3169 <sect1 id="meta-transports">
3170 <title>Meta Transports</title>
3172 Meta transports are a kind of transport with special enhancements or
3173 behavior. Currently available meta transports include: autolaunch
3176 <sect2 id="meta-transports-autolaunch">
3177 <title>Autolaunch</title>
3178 <para>The autolaunch transport provides a way for dbus clients to autodetect
3179 a running dbus session bus and to autolaunch a session bus if not present.
3181 <sect3 id="meta-transports-autolaunch-addresses">
3182 <title>Server Address Format</title>
3184 Autolaunch addresses uses the "autolaunch:" prefix and support the
3185 following key/value pairs:
3192 <entry>Values</entry>
3193 <entry>Description</entry>
3198 <entry>scope</entry>
3199 <entry>(string)</entry>
3200 <entry>scope of autolaunch (Windows only)
3204 "*install-path" - limit session bus to dbus installation path.
3205 The dbus installation path is determined from the location of
3206 the shared dbus library. If the library is located in a 'bin'
3207 subdirectory the installation root is the directory above,
3208 otherwise the directory where the library lives is taken as
3211 <install-root>/bin/[lib]dbus-1.dll
3212 <install-root>/[lib]dbus-1.dll
3218 "*user" - limit session bus to the recent user.
3223 other values - specify dedicated session bus like "release",
3235 <sect3 id="meta-transports-autolaunch-windows-implementation">
3236 <title>Windows implementation</title>
3238 On start, the server opens a platform specific transport, creates a mutex
3239 and a shared memory section containing the related session bus address.
3240 This mutex will be inspected by the dbus client library to detect a
3241 running dbus session bus. The access to the mutex and the shared memory
3242 section are protected by global locks.
3245 In the recent implementation the autolaunch transport uses a tcp transport
3246 on localhost with a port choosen from the operating system. This detail may
3247 change in the future.
3250 Disclaimer: The recent implementation is in an early state and may not
3251 work in all cirumstances and/or may have security issues. Because of this
3252 the implementation is not documentated yet.
3259 <title>UUIDs</title>
3261 A working D-Bus implementation uses universally-unique IDs in two places.
3262 First, each server address has a UUID identifying the address,
3263 as described in <xref linkend="addresses"/>. Second, each operating
3264 system kernel instance running a D-Bus client or server has a UUID
3265 identifying that kernel, retrieved by invoking the method
3266 org.freedesktop.DBus.Peer.GetMachineId() (see <xref
3267 linkend="standard-interfaces-peer"/>).
3270 The term "UUID" in this document is intended literally, i.e. an
3271 identifier that is universally unique. It is not intended to refer to
3272 RFC4122, and in fact the D-Bus UUID is not compatible with that RFC.
3275 The UUID must contain 128 bits of data and be hex-encoded. The
3276 hex-encoded string may not contain hyphens or other non-hex-digit
3277 characters, and it must be exactly 32 characters long. To generate a
3278 UUID, the current reference implementation concatenates 96 bits of random
3279 data followed by the 32-bit time in seconds since the UNIX epoch (in big
3283 It would also be acceptable and probably better to simply generate 128
3284 bits of random data, as long as the random number generator is of high
3285 quality. The timestamp could conceivably help if the random bits are not
3286 very random. With a quality random number generator, collisions are
3287 extremely unlikely even with only 96 bits, so it's somewhat academic.
3290 Implementations should, however, stick to random data for the first 96 bits
3295 <sect1 id="standard-interfaces">
3296 <title>Standard Interfaces</title>
3298 See <xref linkend="message-protocol-types-notation"/> for details on
3299 the notation used in this section. There are some standard interfaces
3300 that may be useful across various D-Bus applications.
3302 <sect2 id="standard-interfaces-peer">
3303 <title><literal>org.freedesktop.DBus.Peer</literal></title>
3305 The <literal>org.freedesktop.DBus.Peer</literal> interface
3308 org.freedesktop.DBus.Peer.Ping ()
3309 org.freedesktop.DBus.Peer.GetMachineId (out STRING machine_uuid)
3313 On receipt of the <literal>METHOD_CALL</literal> message
3314 <literal>org.freedesktop.DBus.Peer.Ping</literal>, an application should do
3315 nothing other than reply with a <literal>METHOD_RETURN</literal> as
3316 usual. It does not matter which object path a ping is sent to. The
3317 reference implementation handles this method automatically.
3320 On receipt of the <literal>METHOD_CALL</literal> message
3321 <literal>org.freedesktop.DBus.Peer.GetMachineId</literal>, an application should
3322 reply with a <literal>METHOD_RETURN</literal> containing a hex-encoded
3323 UUID representing the identity of the machine the process is running on.
3324 This UUID must be the same for all processes on a single system at least
3325 until that system next reboots. It should be the same across reboots
3326 if possible, but this is not always possible to implement and is not
3328 It does not matter which object path a GetMachineId is sent to. The
3329 reference implementation handles this method automatically.
3332 The UUID is intended to be per-instance-of-the-operating-system, so may represent
3333 a virtual machine running on a hypervisor, rather than a physical machine.
3334 Basically if two processes see the same UUID, they should also see the same
3335 shared memory, UNIX domain sockets, process IDs, and other features that require
3336 a running OS kernel in common between the processes.
3339 The UUID is often used where other programs might use a hostname. Hostnames
3340 can change without rebooting, however, or just be "localhost" - so the UUID
3344 <xref linkend="uuids"/> explains the format of the UUID.
3348 <sect2 id="standard-interfaces-introspectable">
3349 <title><literal>org.freedesktop.DBus.Introspectable</literal></title>
3351 This interface has one method:
3353 org.freedesktop.DBus.Introspectable.Introspect (out STRING xml_data)
3357 Objects instances may implement
3358 <literal>Introspect</literal> which returns an XML description of
3359 the object, including its interfaces (with signals and methods), objects
3360 below it in the object path tree, and its properties.
3363 <xref linkend="introspection-format"/> describes the format of this XML string.
3366 <sect2 id="standard-interfaces-properties">
3367 <title><literal>org.freedesktop.DBus.Properties</literal></title>
3369 Many native APIs will have a concept of object <firstterm>properties</firstterm>
3370 or <firstterm>attributes</firstterm>. These can be exposed via the
3371 <literal>org.freedesktop.DBus.Properties</literal> interface.
3375 org.freedesktop.DBus.Properties.Get (in STRING interface_name,
3376 in STRING property_name,
3378 org.freedesktop.DBus.Properties.Set (in STRING interface_name,
3379 in STRING property_name,
3381 org.freedesktop.DBus.Properties.GetAll (in STRING interface_name,
3382 out DICT<STRING,VARIANT> props);
3386 It is conventional to give D-Bus properties names consisting of
3387 capitalized words without punctuation ("CamelCase"), like
3388 <link linkend="message-protocol-names-member">member names</link>.
3389 For instance, the GObject property
3390 <literal>connection-status</literal> or the Qt property
3391 <literal>connectionStatus</literal> could be represented on D-Bus
3392 as <literal>ConnectionStatus</literal>.
3395 Strictly speaking, D-Bus property names are not required to follow
3396 the same naming restrictions as member names, but D-Bus property
3397 names that would not be valid member names (in particular,
3398 GObject-style dash-separated property names) can cause interoperability
3399 problems and should be avoided.
3402 The available properties and whether they are writable can be determined
3403 by calling <literal>org.freedesktop.DBus.Introspectable.Introspect</literal>,
3404 see <xref linkend="standard-interfaces-introspectable"/>.
3407 An empty string may be provided for the interface name; in this case,
3408 if there are multiple properties on an object with the same name,
3409 the results are undefined (picking one by according to an arbitrary
3410 deterministic rule, or returning an error, are the reasonable
3414 If one or more properties change on an object, the
3415 <literal>org.freedesktop.DBus.Properties.PropertiesChanged</literal>
3416 signal may be emitted (this signal was added in 0.14):
3420 org.freedesktop.DBus.Properties.PropertiesChanged (STRING interface_name,
3421 DICT<STRING,VARIANT> changed_properties,
3422 ARRAY<STRING> invalidated_properties);
3426 where <literal>changed_properties</literal> is a dictionary
3427 containing the changed properties with the new values and
3428 <literal>invalidated_properties</literal> is an array of
3429 properties that changed but the value is not conveyed.
3432 Whether the <literal>PropertiesChanged</literal> signal is
3433 supported can be determined by calling
3434 <literal>org.freedesktop.DBus.Introspectable.Introspect</literal>. Note
3435 that the signal may be supported for an object but it may
3436 differ how whether and how it is used on a per-property basis
3437 (for e.g. performance or security reasons). Each property (or
3438 the parent interface) must be annotated with the
3439 <literal>org.freedesktop.DBus.Property.EmitsChangedSignal</literal>
3440 annotation to convey this (usually the default value
3441 <literal>true</literal> is sufficient meaning that the
3442 annotation does not need to be used). See <xref
3443 linkend="introspection-format"/> for details on this
3448 <sect2 id="standard-interfaces-objectmanager">
3449 <title><literal>org.freedesktop.DBus.ObjectManager</literal></title>
3451 An API can optionally make use of this interface for one or
3452 more sub-trees of objects. The root of each sub-tree implements
3453 this interface so other applications can get all objects,
3454 interfaces and properties in a single method call. It is
3455 appropriate to use this interface if users of the tree of
3456 objects are expected to be interested in all interfaces of all
3457 objects in the tree; a more granular API should be used if
3458 users of the objects are expected to be interested in a small
3459 subset of the objects, a small subset of their interfaces, or
3463 The method that applications can use to get all objects and
3464 properties is <literal>GetManagedObjects</literal>:
3468 org.freedesktop.DBus.ObjectManager.GetManagedObjects (out DICT<OBJPATH,DICT<STRING,DICT<STRING,VARIANT>>> objpath_interfaces_and_properties);
3472 The return value of this method is a dict whose keys are
3473 object paths. All returned object paths are children of the
3474 object path implementing this interface, i.e. their object
3475 paths start with the ObjectManager's object path plus '/'.
3478 Each value is a dict whose keys are interfaces names. Each
3479 value in this inner dict is the same dict that would be
3480 returned by the <link
3481 linkend="standard-interfaces-properties">org.freedesktop.DBus.Properties.GetAll()</link>
3482 method for that combination of object path and interface. If
3483 an interface has no properties, the empty dict is returned.
3486 Changes are emitted using the following two signals:
3490 org.freedesktop.DBus.ObjectManager.InterfacesAdded (OBJPATH object_path,
3491 DICT<STRING,DICT<STRING,VARIANT>> interfaces_and_properties);
3492 org.freedesktop.DBus.ObjectManager.InterfacesRemoved (OBJPATH object_path,
3493 ARRAY<STRING> interfaces);
3497 The <literal>InterfacesAdded</literal> signal is emitted when
3498 either a new object is added or when an existing object gains
3499 one or more interfaces. The
3500 <literal>InterfacesRemoved</literal> signal is emitted
3501 whenever an object is removed or it loses one or more
3502 interfaces. The second parameter of the
3503 <literal>InterfacesAdded</literal> signal contains a dict with
3504 the interfaces and properties (if any) that have been added to
3505 the given object path. Similarly, the second parameter of the
3506 <literal>InterfacesRemoved</literal> signal contains an array
3507 of the interfaces that were removed. Note that changes on
3508 properties on existing interfaces are not reported using this
3509 interface - an application should also monitor the existing <link
3510 linkend="standard-interfaces-properties">PropertiesChanged</link>
3511 signal on each object.
3514 Applications SHOULD NOT export objects that are children of an
3515 object (directly or otherwise) implementing this interface but
3516 which are not returned in the reply from the
3517 <literal>GetManagedObjects()</literal> method of this
3518 interface on the given object.
3521 The intent of the <literal>ObjectManager</literal> interface
3522 is to make it easy to write a robust client
3523 implementation. The trivial client implementation only needs
3524 to make two method calls:
3528 org.freedesktop.DBus.AddMatch (bus_proxy,
3529 "type='signal',name='org.example.App',path_namespace='/org/example/App'");
3530 objects = org.freedesktop.DBus.ObjectManager.GetManagedObjects (app_proxy);
3534 on the message bus and the remote application's
3535 <literal>ObjectManager</literal>, respectively. Whenever a new
3536 remote object is created (or an existing object gains a new
3537 interface), the <literal>InterfacesAdded</literal> signal is
3538 emitted, and since this signal contains all properties for the
3539 interfaces, no calls to the
3540 <literal>org.freedesktop.Properties</literal> interface on the
3541 remote object are needed. Additionally, since the initial
3542 <literal>AddMatch()</literal> rule already includes signal
3543 messages from the newly created child object, no new
3544 <literal>AddMatch()</literal> call is needed.
3549 The <literal>org.freedesktop.DBus.ObjectManager</literal>
3550 interface was added in version 0.17 of the D-Bus
3557 <sect1 id="introspection-format">
3558 <title>Introspection Data Format</title>
3560 As described in <xref linkend="standard-interfaces-introspectable"/>,
3561 objects may be introspected at runtime, returning an XML string
3562 that describes the object. The same XML format may be used in
3563 other contexts as well, for example as an "IDL" for generating
3564 static language bindings.
3567 Here is an example of introspection data:
3569 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
3570 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
3571 <node name="/org/freedesktop/sample_object">
3572 <interface name="org.freedesktop.SampleInterface">
3573 <method name="Frobate">
3574 <arg name="foo" type="i" direction="in"/>
3575 <arg name="bar" type="s" direction="out"/>
3576 <arg name="baz" type="a{us}" direction="out"/>
3577 <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
3579 <method name="Bazify">
3580 <arg name="bar" type="(iiu)" direction="in"/>
3581 <arg name="bar" type="v" direction="out"/>
3583 <method name="Mogrify">
3584 <arg name="bar" type="(iiav)" direction="in"/>
3586 <signal name="Changed">
3587 <arg name="new_value" type="b"/>
3589 <property name="Bar" type="y" access="readwrite"/>
3591 <node name="child_of_sample_object"/>
3592 <node name="another_child_of_sample_object"/>
3597 A more formal DTD and spec needs writing, but here are some quick notes.
3601 Only the root <node> element can omit the node name, as it's
3602 known to be the object that was introspected. If the root
3603 <node> does have a name attribute, it must be an absolute
3604 object path. If child <node> have object paths, they must be
3610 If a child <node> has any sub-elements, then they
3611 must represent a complete introspection of the child.
3612 If a child <node> is empty, then it may or may
3613 not have sub-elements; the child must be introspected
3614 in order to find out. The intent is that if an object
3615 knows that its children are "fast" to introspect
3616 it can go ahead and return their information, but
3617 otherwise it can omit it.
3622 The direction element on <arg> may be omitted,
3623 in which case it defaults to "in" for method calls
3624 and "out" for signals. Signals only allow "out"
3625 so while direction may be specified, it's pointless.
3630 The possible directions are "in" and "out",
3631 unlike CORBA there is no "inout"
3636 The possible property access flags are
3637 "readwrite", "read", and "write"
3642 Multiple interfaces can of course be listed for
3648 The "name" attribute on arguments is optional.
3654 Method, interface, property, and signal elements may have
3655 "annotations", which are generic key/value pairs of metadata.
3656 They are similar conceptually to Java's annotations and C# attributes.
3657 Well-known annotations:
3664 <entry>Values (separated by ,)</entry>
3665 <entry>Description</entry>
3670 <entry>org.freedesktop.DBus.Deprecated</entry>
3671 <entry>true,false</entry>
3672 <entry>Whether or not the entity is deprecated; defaults to false</entry>
3675 <entry>org.freedesktop.DBus.GLib.CSymbol</entry>
3676 <entry>(string)</entry>
3677 <entry>The C symbol; may be used for methods and interfaces</entry>
3680 <entry>org.freedesktop.DBus.Method.NoReply</entry>
3681 <entry>true,false</entry>
3682 <entry>If set, don't expect a reply to the method call; defaults to false.</entry>
3685 <entry>org.freedesktop.DBus.Property.EmitsChangedSignal</entry>
3686 <entry>true,invalidates,false</entry>
3689 If set to <literal>false</literal>, the
3690 <literal>org.freedesktop.DBus.Properties.PropertiesChanged</literal>
3692 linkend="standard-interfaces-properties"/> is not
3693 guaranteed to be emitted if the property changes.
3696 If set to <literal>invalidates</literal> the signal
3697 is emitted but the value is not included in the
3701 If set to <literal>true</literal> the signal is
3702 emitted with the value included.
3705 The value for the annotation defaults to
3706 <literal>true</literal> if the enclosing interface
3707 element does not specify the annotation. Otherwise it
3708 defaults to the value specified in the enclosing
3717 <sect1 id="message-bus">
3718 <title>Message Bus Specification</title>
3719 <sect2 id="message-bus-overview">
3720 <title>Message Bus Overview</title>
3722 The message bus accepts connections from one or more applications.
3723 Once connected, applications can exchange messages with other
3724 applications that are also connected to the bus.
3727 In order to route messages among connections, the message bus keeps a
3728 mapping from names to connections. Each connection has one
3729 unique-for-the-lifetime-of-the-bus name automatically assigned.
3730 Applications may request additional names for a connection. Additional
3731 names are usually "well-known names" such as
3732 "org.freedesktop.TextEditor". When a name is bound to a connection,
3733 that connection is said to <firstterm>own</firstterm> the name.
3736 The bus itself owns a special name, <literal>org.freedesktop.DBus</literal>.
3737 This name routes messages to the bus, allowing applications to make
3738 administrative requests. For example, applications can ask the bus
3739 to assign a name to a connection.
3742 Each name may have <firstterm>queued owners</firstterm>. When an
3743 application requests a name for a connection and the name is already in
3744 use, the bus will optionally add the connection to a queue waiting for
3745 the name. If the current owner of the name disconnects or releases
3746 the name, the next connection in the queue will become the new owner.
3750 This feature causes the right thing to happen if you start two text
3751 editors for example; the first one may request "org.freedesktop.TextEditor",
3752 and the second will be queued as a possible owner of that name. When
3753 the first exits, the second will take over.
3757 Applications may send <firstterm>unicast messages</firstterm> to
3758 a specific recipient or to the message bus itself, or
3759 <firstterm>broadcast messages</firstterm> to all interested recipients.
3760 See <xref linkend="message-bus-routing"/> for details.
3764 <sect2 id="message-bus-names">
3765 <title>Message Bus Names</title>
3767 Each connection has at least one name, assigned at connection time and
3768 returned in response to the
3769 <literal>org.freedesktop.DBus.Hello</literal> method call. This
3770 automatically-assigned name is called the connection's <firstterm>unique
3771 name</firstterm>. Unique names are never reused for two different
3772 connections to the same bus.
3775 Ownership of a unique name is a prerequisite for interaction with
3776 the message bus. It logically follows that the unique name is always
3777 the first name that an application comes to own, and the last
3778 one that it loses ownership of.
3781 Unique connection names must begin with the character ':' (ASCII colon
3782 character); bus names that are not unique names must not begin
3783 with this character. (The bus must reject any attempt by an application
3784 to manually request a name beginning with ':'.) This restriction
3785 categorically prevents "spoofing"; messages sent to a unique name
3786 will always go to the expected connection.
3789 When a connection is closed, all the names that it owns are deleted (or
3790 transferred to the next connection in the queue if any).
3793 A connection can request additional names to be associated with it using
3794 the <literal>org.freedesktop.DBus.RequestName</literal> message. <xref
3795 linkend="message-protocol-names-bus"/> describes the format of a valid
3796 name. These names can be released again using the
3797 <literal>org.freedesktop.DBus.ReleaseName</literal> message.
3800 <sect3 id="bus-messages-request-name">
3801 <title><literal>org.freedesktop.DBus.RequestName</literal></title>
3805 UINT32 RequestName (in STRING name, in UINT32 flags)
3812 <entry>Argument</entry>
3814 <entry>Description</entry>
3820 <entry>STRING</entry>
3821 <entry>Name to request</entry>
3825 <entry>UINT32</entry>
3826 <entry>Flags</entry>
3836 <entry>Argument</entry>
3838 <entry>Description</entry>
3844 <entry>UINT32</entry>
3845 <entry>Return value</entry>
3852 This method call should be sent to
3853 <literal>org.freedesktop.DBus</literal> and asks the message bus to
3854 assign the given name to the method caller. Each name maintains a
3855 queue of possible owners, where the head of the queue is the primary
3856 or current owner of the name. Each potential owner in the queue
3857 maintains the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and
3858 DBUS_NAME_FLAG_DO_NOT_QUEUE settings from its latest RequestName
3859 call. When RequestName is invoked the following occurs:
3863 If the method caller is currently the primary owner of the name,
3864 the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and DBUS_NAME_FLAG_DO_NOT_QUEUE
3865 values are updated with the values from the new RequestName call,
3866 and nothing further happens.
3872 If the current primary owner (head of the queue) has
3873 DBUS_NAME_FLAG_ALLOW_REPLACEMENT set, and the RequestName
3874 invocation has the DBUS_NAME_FLAG_REPLACE_EXISTING flag, then
3875 the caller of RequestName replaces the current primary owner at
3876 the head of the queue and the current primary owner moves to the
3877 second position in the queue. If the caller of RequestName was
3878 in the queue previously its flags are updated with the values from
3879 the new RequestName in addition to moving it to the head of the queue.
3885 If replacement is not possible, and the method caller is
3886 currently in the queue but not the primary owner, its flags are
3887 updated with the values from the new RequestName call.
3893 If replacement is not possible, and the method caller is
3894 currently not in the queue, the method caller is appended to the
3901 If any connection in the queue has DBUS_NAME_FLAG_DO_NOT_QUEUE
3902 set and is not the primary owner, it is removed from the
3903 queue. This can apply to the previous primary owner (if it
3904 was replaced) or the method caller (if it updated the
3905 DBUS_NAME_FLAG_DO_NOT_QUEUE flag while still stuck in the
3906 queue, or if it was just added to the queue with that flag set).
3912 Note that DBUS_NAME_FLAG_REPLACE_EXISTING results in "jumping the
3913 queue," even if another application already in the queue had specified
3914 DBUS_NAME_FLAG_REPLACE_EXISTING. This comes up if a primary owner
3915 that does not allow replacement goes away, and the next primary owner
3916 does allow replacement. In this case, queued items that specified
3917 DBUS_NAME_FLAG_REPLACE_EXISTING <emphasis>do not</emphasis>
3918 automatically replace the new primary owner. In other words,
3919 DBUS_NAME_FLAG_REPLACE_EXISTING is not saved, it is only used at the
3920 time RequestName is called. This is deliberate to avoid an infinite loop
3921 anytime two applications are both DBUS_NAME_FLAG_ALLOW_REPLACEMENT
3922 and DBUS_NAME_FLAG_REPLACE_EXISTING.
3925 The flags argument contains any of the following values logically ORed
3932 <entry>Conventional Name</entry>
3933 <entry>Value</entry>
3934 <entry>Description</entry>
3939 <entry>DBUS_NAME_FLAG_ALLOW_REPLACEMENT</entry>
3943 If an application A specifies this flag and succeeds in
3944 becoming the owner of the name, and another application B
3945 later calls RequestName with the
3946 DBUS_NAME_FLAG_REPLACE_EXISTING flag, then application A
3947 will lose ownership and receive a
3948 <literal>org.freedesktop.DBus.NameLost</literal> signal, and
3949 application B will become the new owner. If DBUS_NAME_FLAG_ALLOW_REPLACEMENT
3950 is not specified by application A, or DBUS_NAME_FLAG_REPLACE_EXISTING
3951 is not specified by application B, then application B will not replace
3952 application A as the owner.
3957 <entry>DBUS_NAME_FLAG_REPLACE_EXISTING</entry>
3961 Try to replace the current owner if there is one. If this
3962 flag is not set the application will only become the owner of
3963 the name if there is no current owner. If this flag is set,
3964 the application will replace the current owner if
3965 the current owner specified DBUS_NAME_FLAG_ALLOW_REPLACEMENT.
3970 <entry>DBUS_NAME_FLAG_DO_NOT_QUEUE</entry>
3974 Without this flag, if an application requests a name that is
3975 already owned, the application will be placed in a queue to
3976 own the name when the current owner gives it up. If this
3977 flag is given, the application will not be placed in the
3978 queue, the request for the name will simply fail. This flag
3979 also affects behavior when an application is replaced as
3980 name owner; by default the application moves back into the
3981 waiting queue, unless this flag was provided when the application
3982 became the name owner.
3990 The return code can be one of the following values:
3996 <entry>Conventional Name</entry>
3997 <entry>Value</entry>
3998 <entry>Description</entry>
4003 <entry>DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER</entry>
4004 <entry>1</entry> <entry>The caller is now the primary owner of
4005 the name, replacing any previous owner. Either the name had no
4006 owner before, or the caller specified
4007 DBUS_NAME_FLAG_REPLACE_EXISTING and the current owner specified
4008 DBUS_NAME_FLAG_ALLOW_REPLACEMENT.</entry>
4011 <entry>DBUS_REQUEST_NAME_REPLY_IN_QUEUE</entry>
4014 <entry>The name already had an owner,
4015 DBUS_NAME_FLAG_DO_NOT_QUEUE was not specified, and either
4016 the current owner did not specify
4017 DBUS_NAME_FLAG_ALLOW_REPLACEMENT or the requesting
4018 application did not specify DBUS_NAME_FLAG_REPLACE_EXISTING.
4022 <entry>DBUS_REQUEST_NAME_REPLY_EXISTS</entry> <entry>3</entry>
4023 <entry>The name already has an owner,
4024 DBUS_NAME_FLAG_DO_NOT_QUEUE was specified, and either
4025 DBUS_NAME_FLAG_ALLOW_REPLACEMENT was not specified by the
4026 current owner, or DBUS_NAME_FLAG_REPLACE_EXISTING was not
4027 specified by the requesting application.</entry>
4030 <entry>DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER</entry>
4032 <entry>The application trying to request ownership of a name is already the owner of it.</entry>
4040 <sect3 id="bus-messages-release-name">
4041 <title><literal>org.freedesktop.DBus.ReleaseName</literal></title>
4045 UINT32 ReleaseName (in STRING name)
4052 <entry>Argument</entry>
4054 <entry>Description</entry>
4060 <entry>STRING</entry>
4061 <entry>Name to release</entry>
4071 <entry>Argument</entry>
4073 <entry>Description</entry>
4079 <entry>UINT32</entry>
4080 <entry>Return value</entry>
4087 This method call should be sent to
4088 <literal>org.freedesktop.DBus</literal> and asks the message bus to
4089 release the method caller's claim to the given name. If the caller is
4090 the primary owner, a new primary owner will be selected from the
4091 queue if any other owners are waiting. If the caller is waiting in
4092 the queue for the name, the caller will removed from the queue and
4093 will not be made an owner of the name if it later becomes available.
4094 If there are no other owners in the queue for the name, it will be
4095 removed from the bus entirely.
4097 The return code can be one of the following values:
4103 <entry>Conventional Name</entry>
4104 <entry>Value</entry>
4105 <entry>Description</entry>
4110 <entry>DBUS_RELEASE_NAME_REPLY_RELEASED</entry>
4111 <entry>1</entry> <entry>The caller has released his claim on
4112 the given name. Either the caller was the primary owner of
4113 the name, and the name is now unused or taken by somebody
4114 waiting in the queue for the name, or the caller was waiting
4115 in the queue for the name and has now been removed from the
4119 <entry>DBUS_RELEASE_NAME_REPLY_NON_EXISTENT</entry>
4121 <entry>The given name does not exist on this bus.</entry>
4124 <entry>DBUS_RELEASE_NAME_REPLY_NOT_OWNER</entry>
4126 <entry>The caller was not the primary owner of this name,
4127 and was also not waiting in the queue to own this name.</entry>
4135 <sect3 id="bus-messages-list-queued-owners">
4136 <title><literal>org.freedesktop.DBus.ListQueuedOwners</literal></title>
4140 ARRAY of STRING ListQueuedOwners (in STRING name)
4147 <entry>Argument</entry>
4149 <entry>Description</entry>
4155 <entry>STRING</entry>
4156 <entry>The well-known bus name to query, such as
4157 <literal>com.example.cappuccino</literal></entry>
4167 <entry>Argument</entry>
4169 <entry>Description</entry>
4175 <entry>ARRAY of STRING</entry>
4176 <entry>The unique bus names of connections currently queued
4177 for the name</entry>
4184 This method call should be sent to
4185 <literal>org.freedesktop.DBus</literal> and lists the connections
4186 currently queued for a bus name (see
4187 <xref linkend="term-queued-owner"/>).
4192 <sect2 id="message-bus-routing">
4193 <title>Message Bus Message Routing</title>
4196 Messages may have a <literal>DESTINATION</literal> field (see <xref
4197 linkend="message-protocol-header-fields"/>), resulting in a
4198 <firstterm>unicast message</firstterm>. If the
4199 <literal>DESTINATION</literal> field is present, it specifies a message
4200 recipient by name. Method calls and replies normally specify this field.
4201 The message bus must send messages (of any type) with the
4202 <literal>DESTINATION</literal> field set to the specified recipient,
4203 regardless of whether the recipient has set up a match rule matching
4208 When the message bus receives a signal, if the
4209 <literal>DESTINATION</literal> field is absent, it is considered to
4210 be a <firstterm>broadcast signal</firstterm>, and is sent to all
4211 applications with <firstterm>message matching rules</firstterm> that
4212 match the message. Most signal messages are broadcasts.
4216 Unicast signal messages (those with a <literal>DESTINATION</literal>
4217 field) are not commonly used, but they are treated like any unicast
4218 message: they are delivered to the specified receipient,
4219 regardless of its match rules. One use for unicast signals is to
4220 avoid a race condition in which a signal is emitted before the intended
4221 recipient can call <xref linkend="bus-messages-add-match"/> to
4222 receive that signal: if the signal is sent directly to that recipient
4223 using a unicast message, it does not need to add a match rule at all,
4224 and there is no race condition. Another use for unicast signals,
4225 on message buses whose security policy prevents eavesdropping, is to
4226 send sensitive information which should only be visible to one
4231 When the message bus receives a method call, if the
4232 <literal>DESTINATION</literal> field is absent, the call is taken to be
4233 a standard one-to-one message and interpreted by the message bus
4234 itself. For example, sending an
4235 <literal>org.freedesktop.DBus.Peer.Ping</literal> message with no
4236 <literal>DESTINATION</literal> will cause the message bus itself to
4237 reply to the ping immediately; the message bus will not make this
4238 message visible to other applications.
4242 Continuing the <literal>org.freedesktop.DBus.Peer.Ping</literal> example, if
4243 the ping message were sent with a <literal>DESTINATION</literal> name of
4244 <literal>com.yoyodyne.Screensaver</literal>, then the ping would be
4245 forwarded, and the Yoyodyne Corporation screensaver application would be
4246 expected to reply to the ping.
4250 Message bus implementations may impose a security policy which
4251 prevents certain messages from being sent or received.
4252 When a message cannot be sent or received due to a security
4253 policy, the message bus should send an error reply, unless the
4254 original message had the <literal>NO_REPLY</literal> flag.
4257 <sect3 id="message-bus-routing-eavesdropping">
4258 <title>Eavesdropping</title>
4260 Receiving a unicast message whose <literal>DESTINATION</literal>
4261 indicates a different recipient is called
4262 <firstterm>eavesdropping</firstterm>. On a message bus which acts as
4263 a security boundary (like the standard system bus), the security
4264 policy should usually prevent eavesdropping, since unicast messages
4265 are normally kept private and may contain security-sensitive
4270 Eavesdropping is mainly useful for debugging tools, such as
4271 the <literal>dbus-monitor</literal> tool in the reference
4272 implementation of D-Bus. Tools which eavesdrop on the message bus
4273 should be careful to avoid sending a reply or error in response to
4274 messages intended for a different client.
4278 Clients may attempt to eavesdrop by adding match rules
4279 (see <xref linkend="message-bus-routing-match-rules"/>) containing
4280 the <literal>eavesdrop='true'</literal> match. If the message bus'
4281 security policy does not allow eavesdropping, the match rule can
4282 still be added, but will not have any practical effect. For
4283 compatibility with older message bus implementations, if adding such
4284 a match rule results in an error reply, the client may fall back to
4285 adding the same rule with the <literal>eavesdrop</literal> match
4290 <sect3 id="message-bus-routing-match-rules">
4291 <title>Match Rules</title>
4293 An important part of the message bus routing protocol is match
4294 rules. Match rules describe the messages that should be sent to a
4295 client, based on the contents of the message. Broadcast signals
4296 are only sent to clients which have a suitable match rule: this
4297 avoids waking up client processes to deal with signals that are
4298 not relevant to that client.
4301 Messages that list a client as their <literal>DESTINATION</literal>
4302 do not need to match the client's match rules, and are sent to that
4303 client regardless. As a result, match rules are mainly used to
4304 receive a subset of broadcast signals.
4307 Match rules can also be used for eavesdropping
4308 (see <xref linkend="message-bus-routing-eavesdropping"/>),
4309 if the security policy of the message bus allows it.
4312 Match rules are added using the AddMatch bus method
4313 (see <xref linkend="bus-messages-add-match"/>). Rules are
4314 specified as a string of comma separated key/value pairs.
4315 Excluding a key from the rule indicates a wildcard match.
4316 For instance excluding the the member from a match rule but
4317 adding a sender would let all messages from that sender through.
4318 An example of a complete rule would be
4319 "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='Foo',path='/bar/foo',destination=':452345.34',arg2='bar'"
4322 The following table describes the keys that can be used to create
4324 The following table summarizes the D-Bus types.
4330 <entry>Possible Values</entry>
4331 <entry>Description</entry>
4336 <entry><literal>type</literal></entry>
4337 <entry>'signal', 'method_call', 'method_return', 'error'</entry>
4338 <entry>Match on the message type. An example of a type match is type='signal'</entry>
4341 <entry><literal>sender</literal></entry>
4342 <entry>A bus or unique name (see <xref linkend="term-bus-name"/>
4343 and <xref linkend="term-unique-name"/> respectively)
4345 <entry>Match messages sent by a particular sender. An example of a sender match
4346 is sender='org.freedesktop.Hal'</entry>
4349 <entry><literal>interface</literal></entry>
4350 <entry>An interface name (see <xref linkend="message-protocol-names-interface"/>)</entry>
4351 <entry>Match messages sent over or to a particular interface. An example of an
4352 interface match is interface='org.freedesktop.Hal.Manager'.
4353 If a message omits the interface header, it must not match any rule
4354 that specifies this key.</entry>
4357 <entry><literal>member</literal></entry>
4358 <entry>Any valid method or signal name</entry>
4359 <entry>Matches messages which have the give method or signal name. An example of
4360 a member match is member='NameOwnerChanged'</entry>
4363 <entry><literal>path</literal></entry>
4364 <entry>An object path (see <xref linkend="message-protocol-marshaling-object-path"/>)</entry>
4365 <entry>Matches messages which are sent from or to the given object. An example of a
4366 path match is path='/org/freedesktop/Hal/Manager'</entry>
4369 <entry><literal>path_namespace</literal></entry>
4370 <entry>An object path</entry>
4373 Matches messages which are sent from or to an
4374 object for which the object path is either the
4375 given value, or that value followed by one or
4376 more path components.
4381 <literal>path_namespace='/com/example/foo'</literal>
4382 would match signals sent by
4383 <literal>/com/example/foo</literal>
4385 <literal>/com/example/foo/bar</literal>,
4387 <literal>/com/example/foobar</literal>.
4391 Using both <literal>path</literal> and
4392 <literal>path_namespace</literal> in the same match
4393 rule is not allowed.
4398 This match key was added in version 0.16 of the
4399 D-Bus specification and implemented by the bus
4400 daemon in dbus 1.5.0 and later.
4406 <entry><literal>destination</literal></entry>
4407 <entry>A unique name (see <xref linkend="term-unique-name"/>)</entry>
4408 <entry>Matches messages which are being sent to the given unique name. An
4409 example of a destination match is destination=':1.0'</entry>
4412 <entry><literal>arg[0, 1, 2, 3, ...]</literal></entry>
4413 <entry>Any string</entry>
4414 <entry>Arg matches are special and are used for further restricting the
4415 match based on the arguments in the body of a message. Only arguments of type
4416 STRING can be matched in this way. An example of an argument match
4417 would be arg3='Foo'. Only argument indexes from 0 to 63 should be
4421 <entry><literal>arg[0, 1, 2, 3, ...]path</literal></entry>
4422 <entry>Any string</entry>
4424 <para>Argument path matches provide a specialised form of wildcard matching for
4425 path-like namespaces. They can match arguments whose type is either STRING or
4426 OBJECT_PATH. As with normal argument matches,
4427 if the argument is exactly equal to the string given in the match
4428 rule then the rule is satisfied. Additionally, there is also a
4429 match when either the string given in the match rule or the
4430 appropriate message argument ends with '/' and is a prefix of the
4431 other. An example argument path match is arg0path='/aa/bb/'. This
4432 would match messages with first arguments of '/', '/aa/',
4433 '/aa/bb/', '/aa/bb/cc/' and '/aa/bb/cc'. It would not match
4434 messages with first arguments of '/aa/b', '/aa' or even '/aa/bb'.</para>
4436 <para>This is intended for monitoring “directories” in file system-like
4437 hierarchies, as used in the <citetitle>dconf</citetitle> configuration
4438 system. An application interested in all nodes in a particular hierarchy would
4439 monitor <literal>arg0path='/ca/example/foo/'</literal>. Then the service could
4440 emit a signal with zeroth argument <literal>"/ca/example/foo/bar"</literal> to
4441 represent a modification to the “bar” property, or a signal with zeroth
4442 argument <literal>"/ca/example/"</literal> to represent atomic modification of
4443 many properties within that directory, and the interested application would be
4444 notified in both cases.</para>
4447 This match key was added in version 0.12 of the
4448 D-Bus specification, implemented for STRING
4449 arguments by the bus daemon in dbus 1.2.0 and later,
4450 and implemented for OBJECT_PATH arguments in dbus 1.5.0
4457 <entry><literal>arg0namespace</literal></entry>
4458 <entry>Like a bus name, except that the string is not
4459 required to contain a '.' (period)</entry>
4461 <para>Match messages whose first argument is of type STRING, and is a bus name
4462 or interface name within the specified namespace. This is primarily intended
4463 for watching name owner changes for a group of related bus names, rather than
4464 for a single name or all name changes.</para>
4466 <para>Because every valid interface name is also a valid
4467 bus name, this can also be used for messages whose
4468 first argument is an interface name.</para>
4470 <para>For example, the match rule
4471 <literal>member='NameOwnerChanged',arg0namespace='com.example.backend'</literal>
4472 matches name owner changes for bus names such as
4473 <literal>com.example.backend.foo</literal>,
4474 <literal>com.example.backend.foo.bar</literal>, and
4475 <literal>com.example.backend</literal> itself.</para>
4477 <para>See also <xref linkend='bus-messages-name-owner-changed'/>.</para>
4480 This match key was added in version 0.16 of the
4481 D-Bus specification and implemented by the bus
4482 daemon in dbus 1.5.0 and later.
4488 <entry><literal>eavesdrop</literal></entry>
4489 <entry><literal>'true'</literal>, <literal>'false'</literal></entry>
4490 <entry>Since D-Bus 1.5.6, match rules do not
4491 match messages which have a <literal>DESTINATION</literal>
4492 field unless the match rule specifically
4494 (see <xref linkend="message-bus-routing-eavesdropping"/>)
4495 by specifying <literal>eavesdrop='true'</literal>
4496 in the match rule. <literal>eavesdrop='false'</literal>
4497 restores the default behaviour. Messages are
4498 delivered to their <literal>DESTINATION</literal>
4499 regardless of match rules, so this match does not
4500 affect normal delivery of unicast messages.
4501 If the message bus has a security policy which forbids
4502 eavesdropping, this match may still be used without error,
4503 but will not have any practical effect.
4504 In older versions of D-Bus, this match was not allowed
4505 in match rules, and all match rules behaved as if
4506 <literal>eavesdrop='true'</literal> had been used.
4515 <sect2 id="message-bus-starting-services">
4516 <title>Message Bus Starting Services</title>
4518 The message bus can start applications on behalf of other applications.
4519 In CORBA terms, this would be called <firstterm>activation</firstterm>.
4520 An application that can be started in this way is called a
4521 <firstterm>service</firstterm>.
4524 With D-Bus, starting a service is normally done by name. That is,
4525 applications ask the message bus to start some program that will own a
4526 well-known name, such as <literal>org.freedesktop.TextEditor</literal>.
4527 This implies a contract documented along with the name
4528 <literal>org.freedesktop.TextEditor</literal> for which objects
4529 the owner of that name will provide, and what interfaces those
4533 To find an executable corresponding to a particular name, the bus daemon
4534 looks for <firstterm>service description files</firstterm>. Service
4535 description files define a mapping from names to executables. Different
4536 kinds of message bus will look for these files in different places, see
4537 <xref linkend="message-bus-types"/>.
4540 Service description files have the ".service" file
4541 extension. The message bus will only load service description files
4542 ending with .service; all other files will be ignored. The file format
4543 is similar to that of <ulink
4544 url="http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html">desktop
4545 entries</ulink>. All service description files must be in UTF-8
4546 encoding. To ensure that there will be no name collisions, service files
4547 must be namespaced using the same mechanism as messages and service
4552 [FIXME the file format should be much better specified than "similar to
4553 .desktop entries" esp. since desktop entries are already
4554 badly-specified. ;-)]
4555 These sections from the specification apply to service files as well:
4558 <listitem><para>General syntax</para></listitem>
4559 <listitem><para>Comment format</para></listitem>
4563 <title>Example service description file</title>
4565 # Sample service description file
4567 Names=org.freedesktop.ConfigurationDatabase;org.gnome.GConf;
4568 Exec=/usr/libexec/gconfd-2
4573 When an application asks to start a service by name, the bus daemon tries to
4574 find a service that will own that name. It then tries to spawn the
4575 executable associated with it. If this fails, it will report an
4576 error. [FIXME what happens if two .service files offer the same service;
4577 what kind of error is reported, should we have a way for the client to
4581 The executable launched will have the environment variable
4582 <literal>DBUS_STARTER_ADDRESS</literal> set to the address of the
4583 message bus so it can connect and request the appropriate names.
4586 The executable being launched may want to know whether the message bus
4587 starting it is one of the well-known message buses (see <xref
4588 linkend="message-bus-types"/>). To facilitate this, the bus must also set
4589 the <literal>DBUS_STARTER_BUS_TYPE</literal> environment variable if it is one
4590 of the well-known buses. The currently-defined values for this variable
4591 are <literal>system</literal> for the systemwide message bus,
4592 and <literal>session</literal> for the per-login-session message
4593 bus. The new executable must still connect to the address given
4594 in <literal>DBUS_STARTER_ADDRESS</literal>, but may assume that the
4595 resulting connection is to the well-known bus.
4598 [FIXME there should be a timeout somewhere, either specified
4599 in the .service file, by the client, or just a global value
4600 and if the client being activated fails to connect within that
4601 timeout, an error should be sent back.]
4604 <sect3 id="message-bus-starting-services-scope">
4605 <title>Message Bus Service Scope</title>
4607 The "scope" of a service is its "per-", such as per-session,
4608 per-machine, per-home-directory, or per-display. The reference
4609 implementation doesn't yet support starting services in a different
4610 scope from the message bus itself. So e.g. if you start a service
4611 on the session bus its scope is per-session.
4614 We could add an optional scope to a bus name. For example, for
4615 per-(display,session pair), we could have a unique ID for each display
4616 generated automatically at login and set on screen 0 by executing a
4617 special "set display ID" binary. The ID would be stored in a
4618 <literal>_DBUS_DISPLAY_ID</literal> property and would be a string of
4619 random bytes. This ID would then be used to scope names.
4620 Starting/locating a service could be done by ID-name pair rather than
4624 Contrast this with a per-display scope. To achieve that, we would
4625 want a single bus spanning all sessions using a given display.
4626 So we might set a <literal>_DBUS_DISPLAY_BUS_ADDRESS</literal>
4627 property on screen 0 of the display, pointing to this bus.
4632 <sect2 id="message-bus-types">
4633 <title>Well-known Message Bus Instances</title>
4635 Two standard message bus instances are defined here, along with how
4636 to locate them and where their service files live.
4638 <sect3 id="message-bus-types-login">
4639 <title>Login session message bus</title>
4641 Each time a user logs in, a <firstterm>login session message
4642 bus</firstterm> may be started. All applications in the user's login
4643 session may interact with one another using this message bus.
4646 The address of the login session message bus is given
4647 in the <literal>DBUS_SESSION_BUS_ADDRESS</literal> environment
4648 variable. If that variable is not set, applications may
4649 also try to read the address from the X Window System root
4650 window property <literal>_DBUS_SESSION_BUS_ADDRESS</literal>.
4651 The root window property must have type <literal>STRING</literal>.
4652 The environment variable should have precedence over the
4653 root window property.
4655 <para>The address of the login session message bus is given in the
4656 <literal>DBUS_SESSION_BUS_ADDRESS</literal> environment variable. If
4657 DBUS_SESSION_BUS_ADDRESS is not set, or if it's set to the string
4658 "autolaunch:", the system should use platform-specific methods of
4659 locating a running D-Bus session server, or starting one if a running
4660 instance cannot be found. Note that this mechanism is not recommended
4661 for attempting to determine if a daemon is running. It is inherently
4662 racy to attempt to make this determination, since the bus daemon may
4663 be started just before or just after the determination is made.
4664 Therefore, it is recommended that applications do not try to make this
4665 determination for their functionality purposes, and instead they
4666 should attempt to start the server.</para>
4668 <sect4 id="message-bus-types-login-x-windows">
4669 <title>X Windowing System</title>
4671 For the X Windowing System, the application must locate the
4672 window owner of the selection represented by the atom formed by
4676 <para>the literal string "_DBUS_SESSION_BUS_SELECTION_"</para>
4680 <para>the current user's username</para>
4684 <para>the literal character '_' (underscore)</para>
4688 <para>the machine's ID</para>
4694 The following properties are defined for the window that owns
4696 <informaltable frame="all">
4705 <para>meaning</para>
4711 <para>_DBUS_SESSION_BUS_ADDRESS</para>
4715 <para>the actual address of the server socket</para>
4721 <para>_DBUS_SESSION_BUS_PID</para>
4725 <para>the PID of the server process</para>
4734 At least the _DBUS_SESSION_BUS_ADDRESS property MUST be
4735 present in this window.
4739 If the X selection cannot be located or if reading the
4740 properties from the window fails, the implementation MUST conclude
4741 that there is no D-Bus server running and proceed to start a new
4742 server. (See below on concurrency issues)
4746 Failure to connect to the D-Bus server address thus obtained
4747 MUST be treated as a fatal connection error and should be reported
4752 As an alternative, an implementation MAY find the information
4753 in the following file located in the current user's home directory,
4754 in subdirectory .dbus/session-bus/:
4757 <para>the machine's ID</para>
4761 <para>the literal character '-' (dash)</para>
4765 <para>the X display without the screen number, with the
4766 following prefixes removed, if present: ":", "localhost:"
4767 ."localhost.localdomain:". That is, a display of
4768 "localhost:10.0" produces just the number "10"</para>
4774 The contents of this file NAME=value assignment pairs and
4775 lines starting with # are comments (no comments are allowed
4776 otherwise). The following variable names are defined:
4783 <para>Variable</para>
4787 <para>meaning</para>
4793 <para>DBUS_SESSION_BUS_ADDRESS</para>
4797 <para>the actual address of the server socket</para>
4803 <para>DBUS_SESSION_BUS_PID</para>
4807 <para>the PID of the server process</para>
4813 <para>DBUS_SESSION_BUS_WINDOWID</para>
4817 <para>the window ID</para>
4826 At least the DBUS_SESSION_BUS_ADDRESS variable MUST be present
4831 Failure to open this file MUST be interpreted as absence of a
4832 running server. Therefore, the implementation MUST proceed to
4833 attempting to launch a new bus server if the file cannot be
4838 However, success in opening this file MUST NOT lead to the
4839 conclusion that the server is running. Thus, a failure to connect to
4840 the bus address obtained by the alternative method MUST NOT be
4841 considered a fatal error. If the connection cannot be established,
4842 the implementation MUST proceed to check the X selection settings or
4843 to start the server on its own.
4847 If the implementation concludes that the D-Bus server is not
4848 running it MUST attempt to start a new server and it MUST also
4849 ensure that the daemon started as an effect of the "autolaunch"
4850 mechanism provides the lookup mechanisms described above, so
4851 subsequent calls can locate the newly started server. The
4852 implementation MUST also ensure that if two or more concurrent
4853 initiations happen, only one server remains running and all other
4854 initiations are able to obtain the address of this server and
4855 connect to it. In other words, the implementation MUST ensure that
4856 the X selection is not present when it attempts to set it, without
4857 allowing another process to set the selection between the
4858 verification and the setting (e.g., by using XGrabServer /
4865 On Unix systems, the session bus should search for .service files
4866 in <literal>$XDG_DATA_DIRS/dbus-1/services</literal> as defined
4868 <ulink url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG Base Directory Specification</ulink>.
4869 Implementations may also search additional locations, which
4870 should be searched with lower priority than anything in
4871 XDG_DATA_HOME, XDG_DATA_DIRS or their respective defaults;
4872 for example, the reference implementation also
4873 looks in <literal>${datadir}/dbus-1/services</literal> as
4874 set at compile time.
4877 As described in the XDG Base Directory Specification, software
4878 packages should install their session .service files to their
4879 configured <literal>${datadir}/dbus-1/services</literal>,
4880 where <literal>${datadir}</literal> is as defined by the GNU
4881 coding standards. System administrators or users can arrange
4882 for these service files to be read by setting XDG_DATA_DIRS or by
4883 symlinking them into the default locations.
4887 <sect3 id="message-bus-types-system">
4888 <title>System message bus</title>
4890 A computer may have a <firstterm>system message bus</firstterm>,
4891 accessible to all applications on the system. This message bus may be
4892 used to broadcast system events, such as adding new hardware devices,
4893 changes in the printer queue, and so forth.
4896 The address of the system message bus is given
4897 in the <literal>DBUS_SYSTEM_BUS_ADDRESS</literal> environment
4898 variable. If that variable is not set, applications should try
4899 to connect to the well-known address
4900 <literal>unix:path=/var/run/dbus/system_bus_socket</literal>.
4903 The D-Bus reference implementation actually honors the
4904 <literal>$(localstatedir)</literal> configure option
4905 for this address, on both client and server side.
4910 On Unix systems, the system bus should default to searching
4911 for .service files in
4912 <literal>/usr/local/share/dbus-1/system-services</literal>,
4913 <literal>/usr/share/dbus-1/system-services</literal> and
4914 <literal>/lib/dbus-1/system-services</literal>, with that order
4915 of precedence. It may also search other implementation-specific
4916 locations, but should not vary these locations based on environment
4920 The system bus is security-sensitive and is typically executed
4921 by an init system with a clean environment. Its launch helper
4922 process is particularly security-sensitive, and specifically
4923 clears its own environment.
4928 Software packages should install their system .service
4929 files to their configured
4930 <literal>${datadir}/dbus-1/system-services</literal>,
4931 where <literal>${datadir}</literal> is as defined by the GNU
4932 coding standards. System administrators can arrange
4933 for these service files to be read by editing the system bus'
4934 configuration file or by symlinking them into the default
4940 <sect2 id="message-bus-messages">
4941 <title>Message Bus Messages</title>
4943 The special message bus name <literal>org.freedesktop.DBus</literal>
4944 responds to a number of additional messages.
4947 <sect3 id="bus-messages-hello">
4948 <title><literal>org.freedesktop.DBus.Hello</literal></title>
4959 <entry>Argument</entry>
4961 <entry>Description</entry>
4967 <entry>STRING</entry>
4968 <entry>Unique name assigned to the connection</entry>
4975 Before an application is able to send messages to other applications
4976 it must send the <literal>org.freedesktop.DBus.Hello</literal> message
4977 to the message bus to obtain a unique name. If an application without
4978 a unique name tries to send a message to another application, or a
4979 message to the message bus itself that isn't the
4980 <literal>org.freedesktop.DBus.Hello</literal> message, it will be
4981 disconnected from the bus.
4984 There is no corresponding "disconnect" request; if a client wishes to
4985 disconnect from the bus, it simply closes the socket (or other
4986 communication channel).
4989 <sect3 id="bus-messages-list-names">
4990 <title><literal>org.freedesktop.DBus.ListNames</literal></title>
4994 ARRAY of STRING ListNames ()
5001 <entry>Argument</entry>
5003 <entry>Description</entry>
5009 <entry>ARRAY of STRING</entry>
5010 <entry>Array of strings where each string is a bus name</entry>
5017 Returns a list of all currently-owned names on the bus.
5020 <sect3 id="bus-messages-list-activatable-names">
5021 <title><literal>org.freedesktop.DBus.ListActivatableNames</literal></title>
5025 ARRAY of STRING ListActivatableNames ()
5032 <entry>Argument</entry>
5034 <entry>Description</entry>
5040 <entry>ARRAY of STRING</entry>
5041 <entry>Array of strings where each string is a bus name</entry>
5048 Returns a list of all names that can be activated on the bus.
5051 <sect3 id="bus-messages-name-exists">
5052 <title><literal>org.freedesktop.DBus.NameHasOwner</literal></title>
5056 BOOLEAN NameHasOwner (in STRING name)
5063 <entry>Argument</entry>
5065 <entry>Description</entry>
5071 <entry>STRING</entry>
5072 <entry>Name to check</entry>
5082 <entry>Argument</entry>
5084 <entry>Description</entry>
5090 <entry>BOOLEAN</entry>
5091 <entry>Return value, true if the name exists</entry>
5098 Checks if the specified name exists (currently has an owner).
5102 <sect3 id="bus-messages-name-owner-changed">
5103 <title><literal>org.freedesktop.DBus.NameOwnerChanged</literal></title>
5107 NameOwnerChanged (STRING name, STRING old_owner, STRING new_owner)
5114 <entry>Argument</entry>
5116 <entry>Description</entry>
5122 <entry>STRING</entry>
5123 <entry>Name with a new owner</entry>
5127 <entry>STRING</entry>
5128 <entry>Old owner or empty string if none</entry>
5132 <entry>STRING</entry>
5133 <entry>New owner or empty string if none</entry>
5140 This signal indicates that the owner of a name has changed.
5141 It's also the signal to use to detect the appearance of
5142 new names on the bus.
5145 <sect3 id="bus-messages-name-lost">
5146 <title><literal>org.freedesktop.DBus.NameLost</literal></title>
5150 NameLost (STRING name)
5157 <entry>Argument</entry>
5159 <entry>Description</entry>
5165 <entry>STRING</entry>
5166 <entry>Name which was lost</entry>
5173 This signal is sent to a specific application when it loses
5174 ownership of a name.
5178 <sect3 id="bus-messages-name-acquired">
5179 <title><literal>org.freedesktop.DBus.NameAcquired</literal></title>
5183 NameAcquired (STRING name)
5190 <entry>Argument</entry>
5192 <entry>Description</entry>
5198 <entry>STRING</entry>
5199 <entry>Name which was acquired</entry>
5206 This signal is sent to a specific application when it gains
5207 ownership of a name.
5211 <sect3 id="bus-messages-start-service-by-name">
5212 <title><literal>org.freedesktop.DBus.StartServiceByName</literal></title>
5216 UINT32 StartServiceByName (in STRING name, in UINT32 flags)
5223 <entry>Argument</entry>
5225 <entry>Description</entry>
5231 <entry>STRING</entry>
5232 <entry>Name of the service to start</entry>
5236 <entry>UINT32</entry>
5237 <entry>Flags (currently not used)</entry>
5247 <entry>Argument</entry>
5249 <entry>Description</entry>
5255 <entry>UINT32</entry>
5256 <entry>Return value</entry>
5261 Tries to launch the executable associated with a name. For more information, see <xref linkend="message-bus-starting-services"/>.
5265 The return value can be one of the following values:
5270 <entry>Identifier</entry>
5271 <entry>Value</entry>
5272 <entry>Description</entry>
5277 <entry>DBUS_START_REPLY_SUCCESS</entry>
5279 <entry>The service was successfully started.</entry>
5282 <entry>DBUS_START_REPLY_ALREADY_RUNNING</entry>
5284 <entry>A connection already owns the given name.</entry>
5293 <sect3 id="bus-messages-update-activation-environment">
5294 <title><literal>org.freedesktop.DBus.UpdateActivationEnvironment</literal></title>
5298 UpdateActivationEnvironment (in ARRAY of DICT<STRING,STRING> environment)
5305 <entry>Argument</entry>
5307 <entry>Description</entry>
5313 <entry>ARRAY of DICT<STRING,STRING></entry>
5314 <entry>Environment to add or update</entry>
5319 Normally, session bus activated services inherit the environment of the bus daemon. This method adds to or modifies that environment when activating services.
5322 Some bus instances, such as the standard system bus, may disable access to this method for some or all callers.
5325 Note, both the environment variable names and values must be valid UTF-8. There's no way to update the activation environment with data that is invalid UTF-8.
5330 <sect3 id="bus-messages-get-name-owner">
5331 <title><literal>org.freedesktop.DBus.GetNameOwner</literal></title>
5335 STRING GetNameOwner (in STRING name)
5342 <entry>Argument</entry>
5344 <entry>Description</entry>
5350 <entry>STRING</entry>
5351 <entry>Name to get the owner of</entry>
5361 <entry>Argument</entry>
5363 <entry>Description</entry>
5369 <entry>STRING</entry>
5370 <entry>Return value, a unique connection name</entry>
5375 Returns the unique connection name of the primary owner of the name
5376 given. If the requested name doesn't have an owner, returns a
5377 <literal>org.freedesktop.DBus.Error.NameHasNoOwner</literal> error.
5381 <sect3 id="bus-messages-get-connection-unix-user">
5382 <title><literal>org.freedesktop.DBus.GetConnectionUnixUser</literal></title>
5386 UINT32 GetConnectionUnixUser (in STRING bus_name)
5393 <entry>Argument</entry>
5395 <entry>Description</entry>
5401 <entry>STRING</entry>
5402 <entry>Unique or well-known bus name of the connection to
5403 query, such as <literal>:12.34</literal> or
5404 <literal>com.example.tea</literal></entry>
5414 <entry>Argument</entry>
5416 <entry>Description</entry>
5422 <entry>UINT32</entry>
5423 <entry>Unix user ID</entry>
5428 Returns the Unix user ID of the process connected to the server. If
5429 unable to determine it (for instance, because the process is not on the
5430 same machine as the bus daemon), an error is returned.
5434 <sect3 id="bus-messages-get-connection-unix-process-id">
5435 <title><literal>org.freedesktop.DBus.GetConnectionUnixProcessID</literal></title>
5439 UINT32 GetConnectionUnixProcessID (in STRING bus_name)
5446 <entry>Argument</entry>
5448 <entry>Description</entry>
5454 <entry>STRING</entry>
5455 <entry>Unique or well-known bus name of the connection to
5456 query, such as <literal>:12.34</literal> or
5457 <literal>com.example.tea</literal></entry>
5467 <entry>Argument</entry>
5469 <entry>Description</entry>
5475 <entry>UINT32</entry>
5476 <entry>Unix process id</entry>
5481 Returns the Unix process ID of the process connected to the server. If
5482 unable to determine it (for instance, because the process is not on the
5483 same machine as the bus daemon), an error is returned.
5487 <sect3 id="bus-messages-add-match">
5488 <title><literal>org.freedesktop.DBus.AddMatch</literal></title>
5492 AddMatch (in STRING rule)
5499 <entry>Argument</entry>
5501 <entry>Description</entry>
5507 <entry>STRING</entry>
5508 <entry>Match rule to add to the connection</entry>
5513 Adds a match rule to match messages going through the message bus (see <xref linkend='message-bus-routing-match-rules'/>).
5514 If the bus does not have enough resources the <literal>org.freedesktop.DBus.Error.OOM</literal>
5518 <sect3 id="bus-messages-remove-match">
5519 <title><literal>org.freedesktop.DBus.RemoveMatch</literal></title>
5523 RemoveMatch (in STRING rule)
5530 <entry>Argument</entry>
5532 <entry>Description</entry>
5538 <entry>STRING</entry>
5539 <entry>Match rule to remove from the connection</entry>
5544 Removes the first rule that matches (see <xref linkend='message-bus-routing-match-rules'/>).
5545 If the rule is not found the <literal>org.freedesktop.DBus.Error.MatchRuleNotFound</literal>
5550 <sect3 id="bus-messages-get-id">
5551 <title><literal>org.freedesktop.DBus.GetId</literal></title>
5555 GetId (out STRING id)
5562 <entry>Argument</entry>
5564 <entry>Description</entry>
5570 <entry>STRING</entry>
5571 <entry>Unique ID identifying the bus daemon</entry>
5576 Gets the unique ID of the bus. The unique ID here is shared among all addresses the
5577 bus daemon is listening on (TCP, UNIX domain socket, etc.) and its format is described in
5578 <xref linkend="uuids"/>. Each address the bus is listening on also has its own unique
5579 ID, as described in <xref linkend="addresses"/>. The per-bus and per-address IDs are not related.
5580 There is also a per-machine ID, described in <xref linkend="standard-interfaces-peer"/> and returned
5581 by org.freedesktop.DBus.Peer.GetMachineId().
5582 For a desktop session bus, the bus ID can be used as a way to uniquely identify a user's session.
5590 <appendix id="implementation-notes">
5591 <title>Implementation notes</title>
5592 <sect1 id="implementation-notes-subsection">
5600 <glossary><title>Glossary</title>
5602 This glossary defines some of the terms used in this specification.
5605 <glossentry id="term-bus-name"><glossterm>Bus Name</glossterm>
5608 The message bus maintains an association between names and
5609 connections. (Normally, there's one connection per application.) A
5610 bus name is simply an identifier used to locate connections. For
5611 example, the hypothetical <literal>com.yoyodyne.Screensaver</literal>
5612 name might be used to send a message to a screensaver from Yoyodyne
5613 Corporation. An application is said to <firstterm>own</firstterm> a
5614 name if the message bus has associated the application's connection
5615 with the name. Names may also have <firstterm>queued
5616 owners</firstterm> (see <xref linkend="term-queued-owner"/>).
5617 The bus assigns a unique name to each connection,
5618 see <xref linkend="term-unique-name"/>. Other names
5619 can be thought of as "well-known names" and are
5620 used to find applications that offer specific functionality.
5624 See <xref linkend="message-protocol-names-bus"/> for details of
5625 the syntax and naming conventions for bus names.
5630 <glossentry id="term-message"><glossterm>Message</glossterm>
5633 A message is the atomic unit of communication via the D-Bus
5634 protocol. It consists of a <firstterm>header</firstterm> and a
5635 <firstterm>body</firstterm>; the body is made up of
5636 <firstterm>arguments</firstterm>.
5641 <glossentry id="term-message-bus"><glossterm>Message Bus</glossterm>
5644 The message bus is a special application that forwards
5645 or routes messages between a group of applications
5646 connected to the message bus. It also manages
5647 <firstterm>names</firstterm> used for routing
5653 <glossentry id="term-name"><glossterm>Name</glossterm>
5656 See <xref linkend="term-bus-name"/>. "Name" may
5657 also be used to refer to some of the other names
5658 in D-Bus, such as interface names.
5663 <glossentry id="namespace"><glossterm>Namespace</glossterm>
5666 Used to prevent collisions when defining new interfaces, bus names
5667 etc. The convention used is the same one Java uses for defining
5668 classes: a reversed domain name.
5669 See <xref linkend="message-protocol-names-bus"/>,
5670 <xref linkend="message-protocol-names-interface"/>,
5671 <xref linkend="message-protocol-names-error"/>,
5672 <xref linkend="message-protocol-marshaling-object-path"/>.
5677 <glossentry id="term-object"><glossterm>Object</glossterm>
5680 Each application contains <firstterm>objects</firstterm>, which have
5681 <firstterm>interfaces</firstterm> and
5682 <firstterm>methods</firstterm>. Objects are referred to by a name,
5683 called a <firstterm>path</firstterm>.
5688 <glossentry id="one-to-one"><glossterm>One-to-One</glossterm>
5691 An application talking directly to another application, without going
5692 through a message bus. One-to-one connections may be "peer to peer" or
5693 "client to server." The D-Bus protocol has no concept of client
5694 vs. server after a connection has authenticated; the flow of messages
5695 is symmetrical (full duplex).
5700 <glossentry id="term-path"><glossterm>Path</glossterm>
5703 Object references (object names) in D-Bus are organized into a
5704 filesystem-style hierarchy, so each object is named by a path. As in
5705 LDAP, there's no difference between "files" and "directories"; a path
5706 can refer to an object, while still having child objects below it.
5711 <glossentry id="term-queued-owner"><glossterm>Queued Name Owner</glossterm>
5714 Each bus name has a primary owner; messages sent to the name go to the
5715 primary owner. However, certain names also maintain a queue of
5716 secondary owners "waiting in the wings." If the primary owner releases
5717 the name, then the first secondary owner in the queue automatically
5718 becomes the new owner of the name.
5723 <glossentry id="term-service"><glossterm>Service</glossterm>
5726 A service is an executable that can be launched by the bus daemon.
5727 Services normally guarantee some particular features, for example they
5728 may guarantee that they will request a specific name such as
5729 "org.freedesktop.Screensaver", have a singleton object
5730 "/org/freedesktop/Application", and that object will implement the
5731 interface "org.freedesktop.ScreensaverControl".
5736 <glossentry id="term-service-description-files"><glossterm>Service Description Files</glossterm>
5739 ".service files" tell the bus about service applications that can be
5740 launched (see <xref linkend="term-service"/>). Most importantly they
5741 provide a mapping from bus names to services that will request those
5742 names when they start up.
5747 <glossentry id="term-unique-name"><glossterm>Unique Connection Name</glossterm>
5750 The special name automatically assigned to each connection by the
5751 message bus. This name will never change owner, and will be unique
5752 (never reused during the lifetime of the message bus).
5753 It will begin with a ':' character.