Mercurial > emacs
comparison doc/misc/dbus.texi @ 86942:2fa0494ae318
* dbus.texi: New file.
author | Michael Albinus <michael.albinus@gmx.de> |
---|---|
date | Sun, 02 Dec 2007 16:28:13 +0000 |
parents | |
children | 9ae2c39a9be6 |
comparison
equal
deleted
inserted
replaced
86941:cbc23e728425 | 86942:2fa0494ae318 |
---|---|
1 \input texinfo @c -*-texinfo-*- | |
2 @setfilename ../../info/dbus | |
3 @c %**start of header | |
4 @settitle Using of D-Bus | |
5 @c @setchapternewpage odd | |
6 @c %**end of header | |
7 | |
8 @copying | |
9 Copyright @copyright{} 2007 Free Software Foundation, Inc. | |
10 | |
11 @quotation | |
12 Permission is granted to copy, distribute and/or modify this document | |
13 under the terms of the GNU Free Documentation License, Version 1.2 or | |
14 any later version published by the Free Software Foundation; with no | |
15 Invariant Sections, with the Front-Cover texts being ``A GNU | |
16 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the | |
17 license is included in the section entitled ``GNU Free Documentation | |
18 License'' in the Emacs manual. | |
19 | |
20 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify | |
21 this GNU Manual, like GNU software. Copies published by the Free | |
22 Software Foundation raise funds for GNU development.'' | |
23 | |
24 This document is part of a collection distributed under the GNU Free | |
25 Documentation License. If you want to distribute this document | |
26 separately from the collection, you can do so by adding a copy of the | |
27 license to the document, as described in section 6 of the license. | |
28 @end quotation | |
29 @end copying | |
30 | |
31 @dircategory Emacs | |
32 @direntry | |
33 * D-Bus: (dbus). Using D-Bus in Emacs. | |
34 @end direntry | |
35 | |
36 @node Top, Overview, (dir), (dir) | |
37 @top D-Bus integration in Emacs | |
38 | |
39 This manual documents an API for usage of D-Bus in | |
40 Emacs.@footnote{D-Bus is not enabled by default. You must run | |
41 @command{./configure --with-dbus} in Emacs' top level directory, | |
42 before you compile Emacs.} D-Bus is a message bus system, a simple | |
43 way for applications to talk to one another. An overview of D-Bus can | |
44 be found at @uref{http://dbus.freedesktop.org/}. | |
45 | |
46 @insertcopying | |
47 | |
48 @menu | |
49 * Overview:: An overview of D-Bus. | |
50 * Inspection:: Inspection of the bus names. | |
51 * Type Conversion:: Mapping Lisp types and D-Bus types. | |
52 * Synchronous Methods:: Calling methods in a blocking way. | |
53 * Signals:: Sending and receiving signals. | |
54 * Errors and Events:: Errors and events. | |
55 * GNU Free Documentation License:: The license for this documentation. | |
56 @end menu | |
57 | |
58 @node Overview | |
59 @chapter An overview of D-Bus | |
60 @cindex overview | |
61 | |
62 D-Bus is an inter-process communication mechanism for applications | |
63 residing on the same host. The communication is based on | |
64 @dfn{messages}. Data in the messages is carried in a structured way, | |
65 it is not just a byte stream. | |
66 | |
67 The communication is connection oriented to two kinds of message | |
68 buses: a so called @dfn{system bus}, and a @dfn{session bus}. On a | |
69 given machine, there is always one single system bus for miscellaneous | |
70 system-wide communication, like changing of hardware configuration. | |
71 On the other hand, the session bus is always related to a single | |
72 user's session. | |
73 | |
74 Every client application, which is connected to a bus, registers under | |
75 a @dfn{unique name} at the bus. This name is used for identifying the | |
76 client application. Such a unique name starts always with a colon, | |
77 and looks like @samp{:1.42}. | |
78 | |
79 Additionally, a client application can register itself to a so called | |
80 @dfn{known name}, which is a series of identifiers separated by dots, | |
81 e.g. @samp{org.gnu.Emacs}. If several applications register to the | |
82 same known name, these registrations are queued, and only the first | |
83 application which has registered for the known name is reachable via | |
84 this name. If this application disconnects from the bus, the next | |
85 queued unique name becomes the owner of this known name. | |
86 | |
87 An application can install one or several objects under its name. | |
88 Such objects are identified by an @dfn{object path}, which looks | |
89 similar to paths in a filesystem. An example of such an object path | |
90 could be @samp{/org/gnu/Emacs/}. | |
91 | |
92 Applications might send a request to an object, that means sending a | |
93 message with some data as input parameters, and receiving a message | |
94 from that object with the result of this message, the output | |
95 parameters. Such a request is called @dfn{method} in D-Bus. | |
96 | |
97 The other form of communication are @dfn{signals}. The underlying | |
98 message is emitted from an object and will be received by all other | |
99 applications which have registered for such a signal. | |
100 | |
101 All methods and signals an object supports are called @dfn{interface} | |
102 of the object. Interfaces are specified under a hierarchical name in | |
103 D-Bus; an object can support several interfaces. Such an interface | |
104 name could be @samp{org.gnu.Emacs.TextEditor} or | |
105 @samp{org.gnu.Emacs.FileManager}. | |
106 | |
107 | |
108 @node Inspection | |
109 @chapter Inspection of the bus names. | |
110 @cindex inspection | |
111 | |
112 There are several basic functions which inspect the buses for | |
113 registered names. Internally they use the basic interface | |
114 @samp{org.freedesktop.DBus}, which is supported by all objects of a bus. | |
115 | |
116 @defun dbus-list-activatable-names | |
117 | |
118 This function returns the D-Bus service names, which can be activated. | |
119 An activatable service is described in a service registration file. | |
120 Under GNU/Linux, such files are located at | |
121 @file{/usr/share/dbus-1/services/}. | |
122 | |
123 The result is a list of strings, which is @code{nil} when there are no | |
124 activatable service names at all. | |
125 @end defun | |
126 | |
127 @defun dbus-list-names bus | |
128 | |
129 All service names, which are registered at D-Bus @var{bus}, are | |
130 returned. The result is a list of strings, which is @code{nil} when | |
131 there are no registered service names at all. Well known names are | |
132 strings like @samp{org.freedesktop.DBus}. Names starting with | |
133 @samp{:} are unique names for services. | |
134 | |
135 @var{bus} must be either the symbol @code{:system} or the symbol | |
136 @code{:session}. | |
137 @end defun | |
138 | |
139 @defun dbus-list-known-names bus | |
140 | |
141 Retrieves all services which correspond to a known name in @var{bus}. | |
142 A service has a known name if it doesn't start with @samp{:}. The | |
143 result is a list of strings, which is @code{nil} when there are no | |
144 known names at all. | |
145 | |
146 @var{bus} must be either the symbol @code{:system} or the symbol | |
147 @code{:session}. | |
148 @end defun | |
149 | |
150 @defun dbus-list-queued-owners bus service | |
151 | |
152 For a given service, registered at D-Bus @var{bus} under the name | |
153 @var{service}, all queued unique names are returned. The result is a | |
154 list of strings, or @code{nil} when there are no queued names for | |
155 @var{service} at all. | |
156 | |
157 @var{bus} must be either the symbol @code{:system} or the symbol | |
158 @code{:session}. @var{service} must be a known service name as | |
159 string. | |
160 @end defun | |
161 | |
162 @defun dbus-get-name-owner bus service | |
163 | |
164 For a given service, registered at D-Bus @var{bus} under the name | |
165 @var{service}, the unique name of the name owner is returned. The result is a | |
166 string, or @code{nil} when there exist no name owner of @var{service}. | |
167 | |
168 @var{bus} must be either the symbol @code{:system} or the symbol | |
169 @code{:session}. @var{service} must be a known service name as | |
170 string. | |
171 @end defun | |
172 | |
173 @defun dbus-get-unique-name bus | |
174 | |
175 The unique name, under which Emacs is registered at D-Bus @var{bus}, | |
176 is returned as string. | |
177 | |
178 @var{bus} must be either the symbol @code{:system} or the symbol | |
179 @code{:session}. | |
180 @end defun | |
181 | |
182 @defun dbus-introspect bus service path | |
183 | |
184 Objects can publish there interfaces to the D-Bus. This function | |
185 returns all interfaces of @var{service}, registered at object path | |
186 @var{path} at bus @var{bus}. | |
187 | |
188 @var{bus} must be either the symbol @code{:system} or the symbol | |
189 @code{:session}. @var{service} must be a known service name, and | |
190 @var{path} must be a valid object path. The last two parameters are | |
191 strings. The result, the introspection data, is a string in XML | |
192 format. Example: | |
193 | |
194 @example | |
195 (dbus-introspect | |
196 :system "org.freedesktop.Hal" | |
197 "/org/freedesktop/Hal/devices/computer") | |
198 | |
199 @result{} <!DOCTYPE node PUBLIC | |
200 "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" | |
201 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> | |
202 <node> | |
203 <interface name="org.freedesktop.Hal.Device"> | |
204 <method name="GetAllProperties"> | |
205 <arg name="properties" direction="out" type="a@{sv@}"/> | |
206 </method> | |
207 ... | |
208 <signal name="PropertyModified"> | |
209 <arg name="num_updates" type="i"/> | |
210 <arg name="updates" type="a(sbb)"/> | |
211 </signal> | |
212 </interface> | |
213 ... | |
214 </node> | |
215 @end example | |
216 | |
217 This example informs us, that the service @code{org.freedesktop.Hal} | |
218 at object path @code{/org/freedesktop/Hal/devices/computer} offers the | |
219 interface @code{org.freedesktop.Hal.Device} (and 2 other interfaces | |
220 not documented here). This interface contains the method | |
221 @code{GetAllProperties}, which needs no input parameters, but returns | |
222 as output parameter an array of dictionary entries (key-value pairs). | |
223 Every dictionary entry has a string as key, and a variant as value. | |
224 | |
225 The interface offers also a signal, which returns 2 parameters: an | |
226 integer, and an array consisting of elements which are a struct of a | |
227 string and 2 boolean values. | |
228 | |
229 Such type descriptions are called @dfn{signature} in D-Bus. For a | |
230 discussion of D-Bus types and their Lisp representation see @ref{Type | |
231 Conversion}.@footnote{D-Bus signatures are explained in the D-Bus | |
232 specification | |
233 @uref{http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-signatures}. | |
234 The interfaces of the service @code{org.freedesktop.Hal} are described | |
235 at | |
236 @uref{http://people.freedesktop.org/~david/hal-spec/hal-spec.html#interfaces}.} | |
237 @end defun | |
238 | |
239 | |
240 @node Type Conversion | |
241 @chapter Mapping Lisp types and D-Bus types. | |
242 @cindex type conversion | |
243 | |
244 D-Bus method calls and signals accept usually several arguments as | |
245 parameters, either as input parameter, or as output parameter. Every | |
246 argument belongs to a D-Bus type. | |
247 | |
248 Such arguments must be mapped between the the value encoded as a D-Bus | |
249 type, and the corresponding type of Lisp objects. The mapping is | |
250 applied Lisp object @expansion{} D-Bus type for input parameters, and | |
251 D-Bus type @expansion{} Lisp object for output parameters. | |
252 | |
253 | |
254 @section Input parameters. | |
255 | |
256 Input parameters for D-Bus methods and signals occur as arguments of a | |
257 Lisp function call. Only some primitive Lisp types are supported in | |
258 the current implementation. The following mapping to D-Bus types is | |
259 applied, when the corresponding D-Bus message is created: | |
260 | |
261 @example | |
262 @multitable {@code{t} and @code{nil}} {@expansion{}} {DBUS_TYPE_BOOLEAN} | |
263 @item Lisp type @tab @tab D-Bus type | |
264 @item | |
265 @item @code{t} and @code{nil} @tab @expansion{} @tab DBUS_TYPE_BOOLEAN | |
266 @item number @tab @expansion{} @tab DBUS_TYPE_UINT32 | |
267 @item integer @tab @expansion{} @tab DBUS_TYPE_INT32 | |
268 @item float @tab @expansion{} @tab DBUS_TYPE_DOUBLE | |
269 @item string @tab @expansion{} @tab DBUS_TYPE_STRING | |
270 @end multitable | |
271 @end example | |
272 | |
273 @noindent | |
274 Other Lisp types, especially lists, are not supported (yet). | |
275 | |
276 | |
277 @section Output parameters. | |
278 | |
279 Output parameters of D-Bus methods and signals are mapped to Lisp | |
280 objects. This mapping is more powerful than the one for input | |
281 parameters, i.e. more types are supported by the current | |
282 implementation. | |
283 | |
284 @example | |
285 @multitable {DBUS_TYPE_OBJECT_PATH} {@expansion{}} {@code{t} or @code{nil}} | |
286 @item D-Bus type @tab @tab Lisp type | |
287 @item | |
288 @item DBUS_TYPE_BOOLEAN @tab @expansion{} @tab @code{t} or @code{nil} | |
289 @item DBUS_TYPE_UINT32 @tab @expansion{} @tab number | |
290 @item DBUS_TYPE_INT32 @tab @expansion{} @tab number | |
291 @item DBUS_TYPE_DOUBLE @tab @expansion{} @tab float | |
292 @item DBUS_TYPE_STRING @tab @expansion{} @tab string | |
293 @item DBUS_TYPE_OBJECT_PATH @tab @expansion{} @tab string | |
294 @item DBUS_TYPE_ARRAY @tab @expansion{} @tab list | |
295 @item DBUS_TYPE_VARIANT @tab @expansion{} @tab list | |
296 @item DBUS_TYPE_STRUCT @tab @expansion{} @tab list | |
297 @item DBUS_TYPE_DICT_ENTRY @tab @expansion{} @tab list | |
298 @end multitable | |
299 @end example | |
300 | |
301 The resulting list of the last 4 D-Bus compound types contains as | |
302 elements the elements of the D-Bus container, mapped according to the | |
303 same rules. | |
304 | |
305 The signal @code{PropertyModified}, discussed as example in | |
306 @ref{Inspection}, would offer as Lisp data the following object | |
307 (@var{BOOL} stands here for either @code{nil} or @code{t}): | |
308 | |
309 @lisp | |
310 (@var{NUMBER} ((@var{STRING} @var{BOOL} @var{BOOL}) (@var{STRING} @var{BOOL} @var{BOOL}) ...)) | |
311 @end lisp | |
312 | |
313 | |
314 @node Synchronous Methods | |
315 @chapter Calling methods in a blocking way. | |
316 @cindex method calls, synchronous | |
317 @cindex synchronous method calls | |
318 | |
319 Methods can be called synchronously (@dfn{blocking}) or asynchronously | |
320 (@dfn{non-blocking}). Currently, just synchronous methods are | |
321 implemented. | |
322 | |
323 At D-Bus level, a method call consist of two messages: one message | |
324 which carries the input parameters to the object owning the method to | |
325 be called, and a reply message returning the resulting output | |
326 parameters from the object. | |
327 | |
328 @defun dbus-call-method bus method service path interface &rest args | |
329 | |
330 This function calls @var{method} on the D-Bus @var{bus}. @var{bus} is | |
331 either the symbol @code{:system} or the symbol @code{:session}. | |
332 | |
333 @var{service} is the D-Bus service name to be used. @var{path} is the | |
334 D-Bus object path, @var{service} is registered at. @var{interface} is | |
335 an interface offered by @var{service}. It must provide @var{method}. | |
336 | |
337 All other arguments args are passed to @var{method} as arguments. | |
338 They are converted into D-Bus types as described in @ref{Type | |
339 Conversion}. | |
340 | |
341 The function returns the resulting values of @var{method} as a list of | |
342 Lisp objects, according to the type conversion rules described in | |
343 @ref{Type Conversion}. Example: | |
344 | |
345 @example | |
346 (dbus-call-method | |
347 :session "GetKeyField" "org.gnome.seahorse" | |
348 "/org/gnome/seahorse/keys/openpgp" "org.gnome.seahorse.Keys" | |
349 "openpgp:657984B8C7A966DD" "simple-name") | |
350 | |
351 @result{} (t ("Philip R. Zimmermann")) | |
352 @end example | |
353 | |
354 If the result of the method call is just one value, the converted Lisp | |
355 object is returned instead of a list containing this single Lisp | |
356 object. Example: | |
357 | |
358 @example | |
359 (dbus-call-method | |
360 :system "GetPropertyString" "org.freedesktop.Hal" | |
361 "/org/freedesktop/Hal/devices/computer" "org.freedesktop.Hal.Device" | |
362 "system.kernel.machine") | |
363 | |
364 @result{} "i686" | |
365 @end example | |
366 | |
367 With the @code{dbus-introspect} function it is possible to explore the | |
368 interfaces of @samp{org.freedesktop.Hal} service. It offers the | |
369 interfaces @samp{org.freedesktop.Hal.Manager} for the object at the | |
370 path @samp{/org/freedesktop/Hal/Manager} as well as the interface | |
371 @samp{org.freedesktop.Hal.Device} for all objects prefixed with the | |
372 path @samp{/org/freedesktop/Hal/devices}. With the methods | |
373 @samp{GetAllDevices} and @samp{GetAllProperties}, it is simple to | |
374 emulate the @code{lshal} command on GNU/Linux systems: | |
375 | |
376 @example | |
377 (dolist (device | |
378 (dbus-call-method | |
379 :system "GetAllDevices" "org.freedesktop.Hal" | |
380 "/org/freedesktop/Hal/Manager" | |
381 "org.freedesktop.Hal.Manager")) | |
382 (message "\nudi = %s" device) | |
383 (dolist (properties | |
384 (dbus-call-method | |
385 :system "GetAllProperties" "org.freedesktop.Hal" | |
386 device "org.freedesktop.Hal.Device")) | |
387 (message " %s = %S" | |
388 (car properties) (or (caar (cdr properties)) "")))) | |
389 | |
390 @result{} udi = /org/freedesktop/Hal/devices/computer | |
391 info.addons = ("hald-addon-acpi") | |
392 info.bus = "unknown" | |
393 info.product = "Computer" | |
394 info.subsystem = "unknown" | |
395 info.udi = "/org/freedesktop/Hal/devices/computer" | |
396 linux.sysfs_path_device = "(none)" | |
397 power_management.acpi.linux.version = "20051216" | |
398 power_management.can_suspend_to_disk = t | |
399 power_management.can_suspend_to_ram = "" | |
400 power_management.type = "acpi" | |
401 smbios.bios.release_date = "11/07/2001" | |
402 system.chassis.manufacturer = "COMPAL" | |
403 system.chassis.type = "Notebook" | |
404 system.firmware.release_date = "03/19/2005" | |
405 ... | |
406 @end example | |
407 @end defun | |
408 | |
409 | |
410 @node Signals | |
411 @chapter Sending and receiving signals. | |
412 @cindex signals | |
413 | |
414 Signals are broadcast messages. They carry input parameters, which | |
415 are received by all objects which have registered for such a signal. | |
416 | |
417 @defun dbus-send-signal bus signal service path interface &rest args | |
418 | |
419 This function is similar to @code{dbus-call-method}. The difference | |
420 is, that there are no returning output parameters. | |
421 | |
422 The function emits @var{signal} on the D-Bus @var{bus}. @var{bus} is | |
423 either the symbol @code{:system} or the symbol @code{:session}. It | |
424 doesn't matter whether another object has registered for @var{signal}. | |
425 | |
426 @var{service} is the D-Bus service name of the object the signal is | |
427 emitted from. @var{path} is the corresponding D-Bus object path, | |
428 @var{service} is registered at. @var{interface} is an interface | |
429 offered by @var{service}. It must provide @var{signal}. | |
430 | |
431 All other arguments args are passed to @var{signal} as arguments. | |
432 They are converted into D-Bus types as described in @ref{Type | |
433 Conversion}. Example: | |
434 | |
435 @example | |
436 (dbus-send-signal | |
437 :session "FileModified" "org.gnu.Emacs" "/org/gnu/Emacs" | |
438 "org.gnu.Emacs.FileManager" "/home/albinus/.emacs") | |
439 @end example | |
440 @end defun | |
441 | |
442 @defun dbus-register-signal bus signal service path interface handler | |
443 | |
444 With this function, an application registers for @var{signal} on the | |
445 D-Bus @var{bus}. | |
446 | |
447 @var{bus} is either the symbol @code{:system} or the symbol | |
448 @code{:session}. | |
449 | |
450 @var{service} is the D-Bus service name of the object the signal is | |
451 emitted from. @var{path} is the corresponding D-Bus object path, | |
452 @var{service} is registered at. @var{interface} is an interface | |
453 offered by @var{service}. It must provide @var{signal}. | |
454 | |
455 @var{handler} is a Lisp function to be called when the @var{signal} is | |
456 received. It must accept as arguments the output parameters | |
457 @var{signal} is sending. Example: | |
458 | |
459 @example | |
460 (defun my-dbus-signal-handler (device) | |
461 (message "Device %s added" device)) | |
462 | |
463 (dbus-register-signal | |
464 :system "DeviceAdded" "org.freedesktop.Hal" | |
465 "/org/freedesktop/Hal/Manager" "org.freedesktop.Hal.Manager" | |
466 'my-dbus-signal-handler) | |
467 | |
468 @result{} :system.org.freedesktop.Hal.Manager.DeviceAdded | |
469 @end example | |
470 | |
471 As we know from the inspection data of interface | |
472 @code{org.freedesktop.Hal.Manager}, the signal @code{DeviceAdded} | |
473 provides one single parameter, which is mapped into a Lisp string. | |
474 The callback function @code{my-dbus-signal-handler} must define one | |
475 single string argument therefore. Plugging an USB device to your | |
476 machine, when registered for signal @code{DeviceAdded}, will show you | |
477 which objects the GNU/Linux @code{hal} daemon adds. | |
478 | |
479 @code{dbus-register-signal} returns a Lisp symbol, which can be used | |
480 as argument in @code{dbus-unregister-signal} for removing the | |
481 registration for @var{signal}. | |
482 @end defun | |
483 | |
484 @defun dbus-unregister-signal object | |
485 | |
486 Unregister @var{object} from the the D-Bus. @var{object} must be the | |
487 result of a preceding @code{dbus-register-signal} call. | |
488 @end defun | |
489 | |
490 | |
491 @node Errors and Events | |
492 @chapter Errors and events. | |
493 @cindex errors | |
494 @cindex events | |
495 | |
496 All errors raised by D-Bus are signaled with the error symbol | |
497 @code{dbus-error}. As usual, such an error can be trapped with a | |
498 @code{condition-case} form. If possible, error messages from D-Bus | |
499 are appended to the @code{dbus-error}. | |
500 | |
501 Incoming D-Bus messages are handled as Emacs event (see @pxref{Misc | |
502 Events, , , elisp}). The generated event has this form: | |
503 | |
504 @example | |
505 (dbus-event @var{symbol} @var{service} @var{path} &rest @var{args}) | |
506 @end example | |
507 | |
508 @var{symbol} is the interned Lisp symbol which has been generated | |
509 during signal registration (see @pxref{Signals}). Its function cell | |
510 is the argument @var{handler}, the callback function which was | |
511 provided by @code{dbus-register-signal}. When a @code{dbus-event} | |
512 event arrives, @var{handler} is called with @var{args} as arguments. | |
513 | |
514 @var{service} and @var{path} are the unique name and the object path | |
515 of the D-Bus object emitting the signal. | |
516 | |
517 In order to inspect the @code{dbus-event} data, you could extend the | |
518 definition of the callback function in @ref{Signals}: | |
519 | |
520 @example | |
521 (defun my-dbus-signal-handler (&rest args) | |
522 (message "my-dbus-signal-handler: %S" last-input-event)) | |
523 @end example | |
524 | |
525 There exist convenience functions which could be called inside a | |
526 callback function in order to retrieve the information from the event. | |
527 | |
528 @defun dbus-event-bus-name event | |
529 | |
530 Returns the bus name @var{event} is coming from. | |
531 The result is either the symbol @code{:system} or the symbol @code{:session}. | |
532 @end defun | |
533 | |
534 @defun dbus-event-service-name event | |
535 | |
536 Returns the unique name of the D-Bus object @var{event} is coming from. | |
537 @end defun | |
538 | |
539 @defun dbus-event-path-name event | |
540 | |
541 Returns the object path of the D-Bus object @var{event} is coming from. | |
542 @end defun | |
543 | |
544 @defun dbus-event-interface-name event | |
545 | |
546 Returns the interface name of of the D-Bus object @var{event} is coming from. | |
547 @end defun | |
548 | |
549 @defun dbus-event-member-name event | |
550 | |
551 Returns the member name of of the D-Bus object @var{event} is coming | |
552 from. It is either a signal name or a method name. | |
553 @end defun | |
554 | |
555 | |
556 @node GNU Free Documentation License | |
557 @appendix GNU Free Documentation License | |
558 @include doclicense.texi | |
559 | |
560 @contents | |
561 @c End of dbus.texi | |
562 @bye |