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> 762