]> git.proxmox.com Git - mirror_qemu.git/blob - ui/dbus-display1.xml
net/vhost-net: do not assert on null pointer return from tap_get_vhost_net()
[mirror_qemu.git] / ui / dbus-display1.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <node>
3 <!--
4 org.qemu.Display1.VM:
5
6 This interface is implemented on ``/org/qemu/Display1/VM``.
7 -->
8 <interface name="org.qemu.Display1.VM">
9 <!--
10 Name:
11
12 The name of the VM.
13 -->
14 <property name="Name" type="s" access="read"/>
15
16 <!--
17 UUID:
18
19 The UUID of the VM.
20 -->
21 <property name="UUID" type="s" access="read"/>
22
23 <!--
24 ConsoleIDs:
25
26 The list of consoles available on ``/org/qemu/Display1/Console_$id``.
27 -->
28 <property name="ConsoleIDs" type="au" access="read"/>
29 </interface>
30
31 <!--
32 org.qemu.Display1.Console:
33
34 This interface is implemented on ``/org/qemu/Display1/Console_$id``. You
35 may discover available consoles through introspection or with the
36 :dbus:prop:`org.qemu.Display1.VM.ConsoleIDs` property.
37
38 A console is attached to a video device head. It may be "Graphic" or
39 "Text" (see :dbus:prop:`Type` and other properties).
40
41 Interactions with a console may be done with
42 :dbus:iface:`org.qemu.Display1.Keyboard` and
43 :dbus:iface:`org.qemu.Display1.Mouse` interfaces when available.
44 -->
45 <interface name="org.qemu.Display1.Console">
46 <!--
47 RegisterListener:
48 @listener: a Unix socket FD, for peer-to-peer D-Bus communication.
49
50 Register a console listener, which will receive display updates, until
51 it is disconnected.
52
53 Multiple listeners may be registered simultaneously.
54
55 The listener is expected to implement the
56 :dbus:iface:`org.qemu.Display1.Listener` interface.
57 -->
58 <method name="RegisterListener">
59 <arg type="h" name="listener" direction="in"/>
60 </method>
61
62 <!--
63 SetUIInfo:
64 @width_mm: the physical display width in millimeters.
65 @height_mm: the physical display height in millimeters.
66 @xoff: horizontal offset, in pixels.
67 @yoff: vertical offset, in pixels.
68 @width: console width, in pixels.
69 @height: console height, in pixels.
70
71 Modify the dimensions and display settings.
72 -->
73 <method name="SetUIInfo">
74 <arg name="width_mm" type="q" direction="in"/>
75 <arg name="height_mm" type="q" direction="in"/>
76 <arg name="xoff" type="i" direction="in"/>
77 <arg name="yoff" type="i" direction="in"/>
78 <arg name="width" type="u" direction="in"/>
79 <arg name="height" type="u" direction="in"/>
80 </method>
81
82 <!--
83 Label:
84
85 A user-friendly name for the console (for ex: "VGA").
86 -->
87 <property name="Label" type="s" access="read"/>
88
89 <!--
90 Head:
91
92 Graphical device head number.
93 -->
94 <property name="Head" type="u" access="read"/>
95
96 <!--
97 Type:
98
99 Console type ("Graphic" or "Text").
100 -->
101 <property name="Type" type="s" access="read"/>
102
103 <!--
104 Width:
105
106 Console width, in pixels.
107 -->
108 <property name="Width" type="u" access="read"/>
109
110 <!--
111 Height:
112
113 Console height, in pixels.
114 -->
115 <property name="Height" type="u" access="read"/>
116
117 <!--
118 DeviceAddress:
119
120 The device address (ex: "pci/0000/02.0").
121 -->
122 <property name="DeviceAddress" type="s" access="read"/>
123 </interface>
124
125 <!--
126 org.qemu.Display1.Keyboard:
127
128 This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
129 :dbus:iface:`~org.qemu.Display1.Console`).
130 -->
131 <interface name="org.qemu.Display1.Keyboard">
132 <!--
133 Press:
134 @keycode: QEMU key number (xtkbd + special re-encoding of high bit)
135
136 Send a key press event.
137 -->
138 <method name="Press">
139 <arg type="u" name="keycode" direction="in"/>
140 </method>
141
142 <!--
143 Release:
144 @keycode: QEMU key number (xtkbd + special re-encoding of high bit)
145
146 Send a key release event.
147 -->
148 <method name="Release">
149 <arg type="u" name="keycode" direction="in"/>
150 </method>
151
152 <!--
153 Modifiers:
154
155 The active keyboard modifiers::
156
157 Scroll = 1 << 0
158 Num = 1 << 1
159 Caps = 1 << 2
160 -->
161 <property name="Modifiers" type="u" access="read"/>
162 </interface>
163
164 <!--
165 org.qemu.Display1.Mouse:
166
167 This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
168 :dbus:iface:`~org.qemu.Display1.Console` documentation).
169
170 .. _dbus-button-values:
171
172 **Button values**::
173
174 Left = 0
175 Middle = 1
176 Right = 2
177 Wheel-up = 3
178 Wheel-down = 4
179 Side = 5
180 Extra = 6
181 -->
182 <interface name="org.qemu.Display1.Mouse">
183 <!--
184 Press:
185 @button: :ref:`button value<dbus-button-values>`.
186
187 Send a mouse button press event.
188 -->
189 <method name="Press">
190 <arg type="u" name="button" direction="in"/>
191 </method>
192
193 <!--
194 Release:
195 @button: :ref:`button value<dbus-button-values>`.
196
197 Send a mouse button release event.
198 -->
199 <method name="Release">
200 <arg type="u" name="button" direction="in"/>
201 </method>
202
203 <!--
204 SetAbsPosition:
205 @x: X position, in pixels.
206 @y: Y position, in pixels.
207
208 Set the mouse pointer position.
209
210 Returns an error if not :dbus:prop:`IsAbsolute`.
211 -->
212 <method name="SetAbsPosition">
213 <arg type="u" name="x" direction="in"/>
214 <arg type="u" name="y" direction="in"/>
215 </method>
216
217 <!--
218 RelMotion:
219 @dx: X-delta, in pixels.
220 @dy: Y-delta, in pixels.
221
222 Move the mouse pointer position, relative to the current position.
223
224 Returns an error if :dbus:prop:`IsAbsolute`.
225 -->
226 <method name="RelMotion">
227 <arg type="i" name="dx" direction="in"/>
228 <arg type="i" name="dy" direction="in"/>
229 </method>
230
231 <!--
232 IsAbsolute:
233
234 Whether the mouse is using absolute movements.
235 -->
236 <property name="IsAbsolute" type="b" access="read"/>
237 </interface>
238
239 <!--
240 org.qemu.Display1.Listener:
241
242 This client-side interface must be available on
243 ``/org/qemu/Display1/Listener`` when registering the peer-to-peer
244 connection with :dbus:meth:`~org.qemu.Display1.Console.Register`.
245 -->
246 <interface name="org.qemu.Display1.Listener">
247 <!--
248 Scanout:
249 @width: display width, in pixels.
250 @height: display height, in pixels.
251 @stride: data stride, in bytes.
252 @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
253 @data: image data.
254
255 Resize and update the display content.
256
257 The data to transfer for the display update may be large. The preferred
258 scanout method is :dbus:meth:`ScanoutDMABUF`, used whenever possible.
259 -->
260 <method name="Scanout">
261 <arg type="u" name="width" direction="in"/>
262 <arg type="u" name="height" direction="in"/>
263 <arg type="u" name="stride" direction="in"/>
264 <arg type="u" name="pixman_format" direction="in"/>
265 <arg type="ay" name="data" direction="in">
266 <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
267 </arg>
268 </method>
269
270 <!--
271 Update:
272 @x: X update position, in pixels.
273 @y: Y update position, in pixels.
274 @width: update width, in pixels.
275 @height: update height, in pixels.
276 @stride: data stride, in bytes.
277 @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
278 @data: display image data.
279
280 Update the display content.
281
282 This method is only called after a :dbus:meth:`Scanout` call.
283 -->
284 <method name="Update">
285 <arg type="i" name="x" direction="in"/>
286 <arg type="i" name="y" direction="in"/>
287 <arg type="i" name="width" direction="in"/>
288 <arg type="i" name="height" direction="in"/>
289 <arg type="u" name="stride" direction="in"/>
290 <arg type="u" name="pixman_format" direction="in"/>
291 <arg type="ay" name="data" direction="in">
292 <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
293 </arg>
294 </method>
295
296 <!--
297 ScanoutDMABUF:
298 @dmabuf: the DMABUF file descriptor.
299 @width: display width, in pixels.
300 @height: display height, in pixels.
301 @stride: stride, in bytes.
302 @fourcc: DMABUF fourcc.
303 @modifier: DMABUF modifier.
304 @y0_top: whether Y position 0 is the top or not.
305
306 Resize and update the display content with a DMABUF.
307 -->
308 <method name="ScanoutDMABUF">
309 <arg type="h" name="dmabuf" direction="in"/>
310 <arg type="u" name="width" direction="in"/>
311 <arg type="u" name="height" direction="in"/>
312 <arg type="u" name="stride" direction="in"/>
313 <arg type="u" name="fourcc" direction="in"/>
314 <!-- xywh? -->
315 <arg type="t" name="modifier" direction="in"/>
316 <arg type="b" name="y0_top" direction="in"/>
317 </method>
318
319 <!--
320 UpdateDMABUF:
321 @x: the X update position, in pixels.
322 @y: the Y update position, in pixels.
323 @width: the update width, in pixels.
324 @height: the update height, in pixels.
325
326 Update the display content with the current DMABUF and the given region.
327 -->
328 <method name="UpdateDMABUF">
329 <arg type="i" name="x" direction="in"/>
330 <arg type="i" name="y" direction="in"/>
331 <arg type="i" name="width" direction="in"/>
332 <arg type="i" name="height" direction="in"/>
333 </method>
334
335 <!--
336 Disable:
337
338 Disable the display (turn it off).
339 -->
340 <method name="Disable">
341 </method>
342
343 <!--
344 MouseSet:
345 @x: X mouse position, in pixels.
346 @y: Y mouse position, in pixels.
347 @on: whether the mouse is visible or not.
348
349 Set the mouse position and visibility.
350 -->
351 <method name="MouseSet">
352 <arg type="i" name="x" direction="in"/>
353 <arg type="i" name="y" direction="in"/>
354 <arg type="i" name="on" direction="in"/>
355 </method>
356
357 <!--
358 CursorDefine:
359 @width: cursor width, in pixels.
360 @height: cursor height, in pixels.
361 @hot_x: hot-spot X position, in pixels.
362 @hot_y: hot-spot Y position, in pixels.
363 @data: the cursor data.
364
365 Set the mouse cursor shape and hot-spot. The "data" must be ARGB, 32-bit
366 per pixel.
367 -->
368 <method name="CursorDefine">
369 <arg type="i" name="width" direction="in"/>
370 <arg type="i" name="height" direction="in"/>
371 <arg type="i" name="hot_x" direction="in"/>
372 <arg type="i" name="hot_y" direction="in"/>
373 <arg type="ay" name="data" direction="in">
374 <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
375 </arg>
376 </method>
377 </interface>
378
379 <!--
380 org.qemu.Display1.Clipboard:
381
382 This interface must be implemented by both the client and the server on
383 ``/org/qemu/Display1/Clipboard`` to support clipboard sharing between
384 the client and the guest.
385
386 Once :dbus:meth:`Register`'ed, method calls may be sent and received in both
387 directions. Unregistered callers will get error replies.
388
389 .. _dbus-clipboard-selection:
390
391 **Selection values**::
392
393 Clipboard = 0
394 Primary = 1
395 Secondary = 2
396
397 .. _dbus-clipboard-serial:
398
399 **Serial counter**
400
401 To solve potential clipboard races, clipboard grabs have an associated
402 serial counter. It is set to 0 on registration, and incremented by 1 for
403 each grab. The peer with the highest serial is the clipboard grab owner.
404
405 When a grab with a lower serial is received, it should be discarded.
406
407 When a grab is attempted with the same serial number as the current grab,
408 the one coming from the client should have higher priority, and the client
409 should gain clipboard grab ownership.
410 -->
411 <interface name="org.qemu.Display1.Clipboard">
412 <!--
413 Register:
414
415 Register a clipboard session and reinitialize the serial counter.
416
417 The client must register itself, and is granted an exclusive
418 access for handling the clipboard.
419
420 The server can reinitialize the session as well (to reset the counter).
421 -->
422 <method name="Register"/>
423
424 <!--
425 Unregister:
426
427 Unregister the clipboard session.
428 -->
429 <method name="Unregister"/>
430 <!--
431 Grab:
432 @selection: a :ref:`selection value<dbus-clipboard-selection>`.
433 @serial: the current grab :ref:`serial<dbus-clipboard-serial>`.
434 @mimes: the list of available content MIME types.
435
436 Grab the clipboard, claiming current clipboard content.
437 -->
438 <method name="Grab">
439 <arg type="u" name="selection"/>
440 <arg type="u" name="serial"/>
441 <arg type="as" name="mimes"/>
442 </method>
443
444 <!--
445 Release:
446 @selection: a :ref:`selection value<dbus-clipboard-selection>`.
447
448 Release the clipboard (does nothing if not the current owner).
449 -->
450 <method name="Release">
451 <arg type="u" name="selection"/>
452 </method>
453
454 <!--
455 Request:
456 @selection: a :ref:`selection value<dbus-clipboard-selection>`
457 @mimes: requested MIME types (by order of preference).
458 @reply_mime: the returned data MIME type.
459 @data: the clipboard data.
460
461 Request the clipboard content.
462
463 Return an error if the clipboard is empty, or the requested MIME types
464 are unavailable.
465 -->
466 <method name="Request">
467 <arg type="u" name="selection"/>
468 <arg type="as" name="mimes"/>
469 <arg type="s" name="reply_mime" direction="out"/>
470 <arg type="ay" name="data" direction="out">
471 <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
472 </arg>
473 </method>
474 </interface>
475
476 <!--
477 org.qemu.Display1.Audio:
478
479 Audio backend may be available on ``/org/qemu/Display1/Audio``.
480 -->
481 <interface name="org.qemu.Display1.Audio">
482 <!--
483 RegisterOutListener:
484 @listener: a Unix socket FD, for peer-to-peer D-Bus communication.
485
486 Register an audio backend playback handler.
487
488 Multiple listeners may be registered simultaneously.
489
490 The listener is expected to implement the
491 :dbus:iface:`org.qemu.Display1.AudioOutListener` interface.
492 -->
493 <method name="RegisterOutListener">
494 <arg type="h" name="listener" direction="in"/>
495 </method>
496
497 <!--
498 RegisterInListener:
499 @listener: a Unix socket FD, for peer-to-peer D-Bus communication.
500
501 Register an audio backend record handler.
502
503 Multiple listeners may be registered simultaneously.
504
505 The listener is expected to implement the
506 :dbus:iface:`org.qemu.Display1.AudioInListener` interface.
507 -->
508 <method name="RegisterInListener">
509 <arg type="h" name="listener" direction="in"/>
510 </method>
511 </interface>
512
513 <!--
514 org.qemu.Display1.AudioOutListener:
515
516 This client-side interface must be available on
517 ``/org/qemu/Display1/AudioOutListener`` when registering the peer-to-peer
518 connection with :dbus:meth:`~org.qemu.Display1.Audio.RegisterOutListener`.
519 -->
520 <interface name="org.qemu.Display1.AudioOutListener">
521 <!--
522 Init:
523 @id: the stream ID.
524 @bits: PCM bits per sample.
525 @is_signed: whether the PCM data is signed.
526 @is_float: PCM floating point format.
527 @freq: the PCM frequency in Hz.
528 @nchannels: the number of channels.
529 @bytes_per_frame: the bytes per frame.
530 @bytes_per_second: the bytes per second.
531 @be: whether using big-endian format.
532
533 Initializes a PCM playback stream.
534 -->
535 <method name="Init">
536 <arg name="id" type="t" direction="in"/>
537 <arg name="bits" type="y" direction="in"/>
538 <arg name="is_signed" type="b" direction="in"/>
539 <arg name="is_float" type="b" direction="in"/>
540 <arg name="freq" type="u" direction="in"/>
541 <arg name="nchannels" type="y" direction="in"/>
542 <arg name="bytes_per_frame" type="u" direction="in"/>
543 <arg name="bytes_per_second" type="u" direction="in"/>
544 <arg name="be" type="b" direction="in"/>
545 </method>
546
547 <!--
548 Fini:
549 @id: the stream ID.
550
551 Finish & close a playback stream.
552 -->
553 <method name="Fini">
554 <arg name="id" type="t" direction="in"/>
555 </method>
556
557 <!--
558 SetEnabled:
559 @id: the stream ID.
560
561 Resume or suspend the playback stream.
562 -->
563 <method name="SetEnabled">
564 <arg name="id" type="t" direction="in"/>
565 <arg name="enabled" type="b" direction="in"/>
566 </method>
567
568 <!--
569 SetVolume:
570 @id: the stream ID.
571 @mute: whether the stream is muted.
572 @volume: the volume per-channel.
573
574 Set the stream volume and mute state (volume without unit, 0-255).
575 -->
576 <method name="SetVolume">
577 <arg name="id" type="t" direction="in"/>
578 <arg name="mute" type="b" direction="in"/>
579 <arg name="volume" type="ay" direction="in">
580 <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
581 </arg>
582 </method>
583
584 <!--
585 Write:
586 @id: the stream ID.
587 @data: the PCM data.
588
589 PCM stream to play.
590 -->
591 <method name="Write">
592 <arg name="id" type="t" direction="in"/>
593 <arg type="ay" name="data" direction="in">
594 <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
595 </arg>
596 </method>
597 </interface>
598
599 <!--
600 org.qemu.Display1.AudioInListener:
601
602 This client-side interface must be available on
603 ``/org/qemu/Display1/AudioInListener`` when registering the peer-to-peer
604 connection with :dbus:meth:`~org.qemu.Display1.Audio.RegisterInListener`.
605 -->
606 <interface name="org.qemu.Display1.AudioInListener">
607 <!--
608 Init:
609 @id: the stream ID.
610 @bits: PCM bits per sample.
611 @is_signed: whether the PCM data is signed.
612 @is_float: PCM floating point format.
613 @freq: the PCM frequency in Hz.
614 @nchannels: the number of channels.
615 @bytes_per_frame: the bytes per frame.
616 @bytes_per_second: the bytes per second.
617 @be: whether using big-endian format.
618
619 Initializes a PCM record stream.
620 -->
621 <method name="Init">
622 <arg name="id" type="t" direction="in"/>
623 <arg name="bits" type="y" direction="in"/>
624 <arg name="is_signed" type="b" direction="in"/>
625 <arg name="is_float" type="b" direction="in"/>
626 <arg name="freq" type="u" direction="in"/>
627 <arg name="nchannels" type="y" direction="in"/>
628 <arg name="bytes_per_frame" type="u" direction="in"/>
629 <arg name="bytes_per_second" type="u" direction="in"/>
630 <arg name="be" type="b" direction="in"/>
631 </method>
632
633 <!--
634 Fini:
635 @id: the stream ID.
636
637 Finish & close a record stream.
638 -->
639 <method name="Fini">
640 <arg name="id" type="t" direction="in"/>
641 </method>
642
643 <!--
644 SetEnabled:
645 @id: the stream ID.
646
647 Resume or suspend the record stream.
648 -->
649 <method name="SetEnabled">
650 <arg name="id" type="t" direction="in"/>
651 <arg name="enabled" type="b" direction="in"/>
652 </method>
653
654 <!--
655 SetVolume:
656 @id: the stream ID.
657 @mute: whether the stream is muted.
658 @volume: the volume per-channel.
659
660 Set the stream volume and mute state (volume without unit, 0-255).
661 -->
662 <method name="SetVolume">
663 <arg name="id" type="t" direction="in"/>
664 <arg name="mute" type="b" direction="in"/>
665 <arg name="volume" type="ay" direction="in">
666 <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
667 </arg>
668 </method>
669
670 <!--
671 Read:
672 @id: the stream ID.
673 @size: the amount to read, in bytes.
674 @data: the recorded data (which may be less than requested).
675
676 Read "size" bytes from the record stream.
677 -->
678 <method name="Read">
679 <arg name="id" type="t" direction="in"/>
680 <arg name="size" type="t" direction="in"/>
681 <arg type="ay" name="data" direction="out">
682 <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
683 </arg>
684 </method>
685 </interface>
686
687 <!--
688 org.qemu.Display1.Chardev:
689
690 Character devices may be available on ``/org/qemu/Display1/Chardev_$id``.
691
692 They may be used for different kind of streams, which are identified via
693 their FQDN :dbus:prop:`Name`.
694
695 .. _dbus-chardev-fqdn:
696
697 Here are some known reserved kind names (the ``org.qemu`` prefix is
698 reserved by QEMU):
699
700 org.qemu.console.serial.0
701 A serial console stream.
702
703 org.qemu.monitor.hmp.0
704 A QEMU HMP human monitor.
705
706 org.qemu.monitor.qmp.0
707 A QEMU QMP monitor.
708
709 org.qemu.usbredir
710 A usbredir stream.
711 -->
712 <interface name="org.qemu.Display1.Chardev">
713 <!--
714 Register:
715 @stream: a Unix FD to redirect the stream to.
716
717 Register a file-descriptor for the stream handling.
718
719 The current handler, if any, will be replaced.
720 -->
721 <method name="Register">
722 <arg type="h" name="stream" direction="in"/>
723 </method>
724
725 <!--
726 SendBreak:
727
728 Send a break event to the character device.
729 -->
730 <method name="SendBreak"/>
731
732 <!--
733 Name:
734
735 The FQDN name to identify the kind of stream. See :ref:`reserved
736 names<dbus-chardev-fqdn>`.
737 -->
738 <property name="Name" type="s" access="read"/>
739
740 <!--
741 FEOpened:
742
743 Whether the front-end side is opened.
744 -->
745 <property name="FEOpened" type="b" access="read"/>
746
747 <!--
748 Echo:
749
750 Whether the input should be echo'ed (for serial streams).
751 -->
752 <property name="Echo" type="b" access="read"/>
753
754 <!--
755 Owner:
756
757 The D-Bus unique name of the registered handler.
758 -->
759 <property name="Owner" type="s" access="read"/>
760 </interface>
761 </node>