xref: /qemu/qapi/ui.json (revision b6fd5434de9cdf356fde37f55f52d121361e3297)
1608cfed6SMarkus Armbruster# -*- Mode: Python -*-
2f7160f32SAndrea Bolognani# vim: filetype=python
3608cfed6SMarkus Armbruster#
4608cfed6SMarkus Armbruster
5608cfed6SMarkus Armbruster##
6608cfed6SMarkus Armbruster# = Remote desktop
7608cfed6SMarkus Armbruster##
8608cfed6SMarkus Armbruster
930e863e5SKevin Wolf{ 'include': 'common.json' }
10608cfed6SMarkus Armbruster{ 'include': 'sockets.json' }
11608cfed6SMarkus Armbruster
12608cfed6SMarkus Armbruster##
13608cfed6SMarkus Armbruster# @set_password:
14608cfed6SMarkus Armbruster#
15608cfed6SMarkus Armbruster# Sets the password of a remote display session.
16608cfed6SMarkus Armbruster#
17e050e426SPeter Maydell# @protocol: - 'vnc' to modify the VNC server password
18e050e426SPeter Maydell#            - 'spice' to modify the Spice server password
19608cfed6SMarkus Armbruster#
20608cfed6SMarkus Armbruster# @password: the new password
21608cfed6SMarkus Armbruster#
22608cfed6SMarkus Armbruster# @connected: how to handle existing clients when changing the
23449be9dfSPeter Maydell#             password.  If nothing is specified, defaults to 'keep'
24449be9dfSPeter Maydell#             'fail' to fail the command if clients are connected
25449be9dfSPeter Maydell#             'disconnect' to disconnect existing clients
26449be9dfSPeter Maydell#             'keep' to maintain existing clients
27608cfed6SMarkus Armbruster#
28e050e426SPeter Maydell# Returns: - Nothing on success
29e050e426SPeter Maydell#          - If Spice is not enabled, DeviceNotFound
30608cfed6SMarkus Armbruster#
319bc6e893SMarkus Armbruster# Since: 0.14
32608cfed6SMarkus Armbruster#
33608cfed6SMarkus Armbruster# Example:
34608cfed6SMarkus Armbruster#
35608cfed6SMarkus Armbruster# -> { "execute": "set_password", "arguments": { "protocol": "vnc",
36608cfed6SMarkus Armbruster#                                                "password": "secret" } }
37608cfed6SMarkus Armbruster# <- { "return": {} }
38608cfed6SMarkus Armbruster#
39608cfed6SMarkus Armbruster##
40608cfed6SMarkus Armbruster{ 'command': 'set_password',
41608cfed6SMarkus Armbruster  'data': {'protocol': 'str', 'password': 'str', '*connected': 'str'} }
42608cfed6SMarkus Armbruster
43608cfed6SMarkus Armbruster##
44608cfed6SMarkus Armbruster# @expire_password:
45608cfed6SMarkus Armbruster#
46608cfed6SMarkus Armbruster# Expire the password of a remote display server.
47608cfed6SMarkus Armbruster#
48449be9dfSPeter Maydell# @protocol: the name of the remote display protocol 'vnc' or 'spice'
49608cfed6SMarkus Armbruster#
50608cfed6SMarkus Armbruster# @time: when to expire the password.
51608cfed6SMarkus Armbruster#
52e050e426SPeter Maydell#        - 'now' to expire the password immediately
53e050e426SPeter Maydell#        - 'never' to cancel password expiration
54e050e426SPeter Maydell#        - '+INT' where INT is the number of seconds from now (integer)
55e050e426SPeter Maydell#        - 'INT' where INT is the absolute time in seconds
56e050e426SPeter Maydell#
57e050e426SPeter Maydell# Returns: - Nothing on success
58e050e426SPeter Maydell#          - If @protocol is 'spice' and Spice is not active, DeviceNotFound
59608cfed6SMarkus Armbruster#
609bc6e893SMarkus Armbruster# Since: 0.14
61608cfed6SMarkus Armbruster#
62608cfed6SMarkus Armbruster# Notes: Time is relative to the server and currently there is no way to
63608cfed6SMarkus Armbruster#        coordinate server time with client time.  It is not recommended to
64608cfed6SMarkus Armbruster#        use the absolute time version of the @time parameter unless you're
65608cfed6SMarkus Armbruster#        sure you are on the same machine as the QEMU instance.
66608cfed6SMarkus Armbruster#
67608cfed6SMarkus Armbruster# Example:
68608cfed6SMarkus Armbruster#
69608cfed6SMarkus Armbruster# -> { "execute": "expire_password", "arguments": { "protocol": "vnc",
70608cfed6SMarkus Armbruster#                                                   "time": "+60" } }
71608cfed6SMarkus Armbruster# <- { "return": {} }
72608cfed6SMarkus Armbruster#
73608cfed6SMarkus Armbruster##
74608cfed6SMarkus Armbruster{ 'command': 'expire_password', 'data': {'protocol': 'str', 'time': 'str'} }
75608cfed6SMarkus Armbruster
76608cfed6SMarkus Armbruster##
77608cfed6SMarkus Armbruster# @screendump:
78608cfed6SMarkus Armbruster#
79608cfed6SMarkus Armbruster# Write a PPM of the VGA screen to a file.
80608cfed6SMarkus Armbruster#
81608cfed6SMarkus Armbruster# @filename: the path of a new PPM file to store the image
82608cfed6SMarkus Armbruster#
83f771c544SThomas Huth# @device: ID of the display device that should be dumped. If this parameter
84f771c544SThomas Huth#          is missing, the primary display will be used. (Since 2.12)
85f771c544SThomas Huth#
86f771c544SThomas Huth# @head: head to use in case the device supports multiple heads. If this
87f771c544SThomas Huth#        parameter is missing, head #0 will be used. Also note that the head
88f771c544SThomas Huth#        can only be specified in conjunction with the device ID. (Since 2.12)
89f771c544SThomas Huth#
90608cfed6SMarkus Armbruster# Returns: Nothing on success
91608cfed6SMarkus Armbruster#
929bc6e893SMarkus Armbruster# Since: 0.14
93608cfed6SMarkus Armbruster#
94608cfed6SMarkus Armbruster# Example:
95608cfed6SMarkus Armbruster#
96608cfed6SMarkus Armbruster# -> { "execute": "screendump",
97608cfed6SMarkus Armbruster#      "arguments": { "filename": "/tmp/image" } }
98608cfed6SMarkus Armbruster# <- { "return": {} }
99608cfed6SMarkus Armbruster#
100608cfed6SMarkus Armbruster##
101f771c544SThomas Huth{ 'command': 'screendump',
1020d9b90ceSMarc-André Lureau  'data': {'filename': 'str', '*device': 'str', '*head': 'int'},
1030d9b90ceSMarc-André Lureau  'coroutine': true }
104608cfed6SMarkus Armbruster
105608cfed6SMarkus Armbruster##
106608cfed6SMarkus Armbruster# == Spice
107608cfed6SMarkus Armbruster##
108608cfed6SMarkus Armbruster
109608cfed6SMarkus Armbruster##
110608cfed6SMarkus Armbruster# @SpiceBasicInfo:
111608cfed6SMarkus Armbruster#
112608cfed6SMarkus Armbruster# The basic information for SPICE network connection
113608cfed6SMarkus Armbruster#
114608cfed6SMarkus Armbruster# @host: IP address
115608cfed6SMarkus Armbruster#
116608cfed6SMarkus Armbruster# @port: port number
117608cfed6SMarkus Armbruster#
118608cfed6SMarkus Armbruster# @family: address family
119608cfed6SMarkus Armbruster#
120608cfed6SMarkus Armbruster# Since: 2.1
121608cfed6SMarkus Armbruster##
122608cfed6SMarkus Armbruster{ 'struct': 'SpiceBasicInfo',
123608cfed6SMarkus Armbruster  'data': { 'host': 'str',
124608cfed6SMarkus Armbruster            'port': 'str',
125514337c1SMarc-André Lureau            'family': 'NetworkAddressFamily' },
1268a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
127608cfed6SMarkus Armbruster
128608cfed6SMarkus Armbruster##
129608cfed6SMarkus Armbruster# @SpiceServerInfo:
130608cfed6SMarkus Armbruster#
131608cfed6SMarkus Armbruster# Information about a SPICE server
132608cfed6SMarkus Armbruster#
133608cfed6SMarkus Armbruster# @auth: authentication method
134608cfed6SMarkus Armbruster#
135608cfed6SMarkus Armbruster# Since: 2.1
136608cfed6SMarkus Armbruster##
137608cfed6SMarkus Armbruster{ 'struct': 'SpiceServerInfo',
138608cfed6SMarkus Armbruster  'base': 'SpiceBasicInfo',
139514337c1SMarc-André Lureau  'data': { '*auth': 'str' },
1408a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
141608cfed6SMarkus Armbruster
142608cfed6SMarkus Armbruster##
143608cfed6SMarkus Armbruster# @SpiceChannel:
144608cfed6SMarkus Armbruster#
145608cfed6SMarkus Armbruster# Information about a SPICE client channel.
146608cfed6SMarkus Armbruster#
147608cfed6SMarkus Armbruster# @connection-id: SPICE connection id number.  All channels with the same id
148608cfed6SMarkus Armbruster#                 belong to the same SPICE session.
149608cfed6SMarkus Armbruster#
150608cfed6SMarkus Armbruster# @channel-type: SPICE channel type number.  "1" is the main control
151608cfed6SMarkus Armbruster#                channel, filter for this one if you want to track spice
152608cfed6SMarkus Armbruster#                sessions only
153608cfed6SMarkus Armbruster#
154608cfed6SMarkus Armbruster# @channel-id: SPICE channel ID number.  Usually "0", might be different when
155608cfed6SMarkus Armbruster#              multiple channels of the same type exist, such as multiple
156608cfed6SMarkus Armbruster#              display channels in a multihead setup
157608cfed6SMarkus Armbruster#
158608cfed6SMarkus Armbruster# @tls: true if the channel is encrypted, false otherwise.
159608cfed6SMarkus Armbruster#
1609bc6e893SMarkus Armbruster# Since: 0.14
161608cfed6SMarkus Armbruster##
162608cfed6SMarkus Armbruster{ 'struct': 'SpiceChannel',
163608cfed6SMarkus Armbruster  'base': 'SpiceBasicInfo',
164608cfed6SMarkus Armbruster  'data': {'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int',
165514337c1SMarc-André Lureau           'tls': 'bool'},
1668a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
167608cfed6SMarkus Armbruster
168608cfed6SMarkus Armbruster##
169608cfed6SMarkus Armbruster# @SpiceQueryMouseMode:
170608cfed6SMarkus Armbruster#
171608cfed6SMarkus Armbruster# An enumeration of Spice mouse states.
172608cfed6SMarkus Armbruster#
173608cfed6SMarkus Armbruster# @client: Mouse cursor position is determined by the client.
174608cfed6SMarkus Armbruster#
175608cfed6SMarkus Armbruster# @server: Mouse cursor position is determined by the server.
176608cfed6SMarkus Armbruster#
177608cfed6SMarkus Armbruster# @unknown: No information is available about mouse mode used by
178608cfed6SMarkus Armbruster#           the spice server.
179608cfed6SMarkus Armbruster#
180608cfed6SMarkus Armbruster# Note: spice/enums.h has a SpiceMouseMode already, hence the name.
181608cfed6SMarkus Armbruster#
182608cfed6SMarkus Armbruster# Since: 1.1
183608cfed6SMarkus Armbruster##
184608cfed6SMarkus Armbruster{ 'enum': 'SpiceQueryMouseMode',
185514337c1SMarc-André Lureau  'data': [ 'client', 'server', 'unknown' ],
1868a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
187608cfed6SMarkus Armbruster
188608cfed6SMarkus Armbruster##
189608cfed6SMarkus Armbruster# @SpiceInfo:
190608cfed6SMarkus Armbruster#
191608cfed6SMarkus Armbruster# Information about the SPICE session.
192608cfed6SMarkus Armbruster#
193608cfed6SMarkus Armbruster# @enabled: true if the SPICE server is enabled, false otherwise
194608cfed6SMarkus Armbruster#
195608cfed6SMarkus Armbruster# @migrated: true if the last guest migration completed and spice
196608cfed6SMarkus Armbruster#            migration had completed as well. false otherwise. (since 1.4)
197608cfed6SMarkus Armbruster#
198608cfed6SMarkus Armbruster# @host: The hostname the SPICE server is bound to.  This depends on
199608cfed6SMarkus Armbruster#        the name resolution on the host and may be an IP address.
200608cfed6SMarkus Armbruster#
201608cfed6SMarkus Armbruster# @port: The SPICE server's port number.
202608cfed6SMarkus Armbruster#
203608cfed6SMarkus Armbruster# @compiled-version: SPICE server version.
204608cfed6SMarkus Armbruster#
205608cfed6SMarkus Armbruster# @tls-port: The SPICE server's TLS port number.
206608cfed6SMarkus Armbruster#
207608cfed6SMarkus Armbruster# @auth: the current authentication type used by the server
208e050e426SPeter Maydell#
209e050e426SPeter Maydell#        - 'none'  if no authentication is being used
210e050e426SPeter Maydell#        - 'spice' uses SASL or direct TLS authentication, depending on command
211608cfed6SMarkus Armbruster#          line options
212608cfed6SMarkus Armbruster#
213608cfed6SMarkus Armbruster# @mouse-mode: The mode in which the mouse cursor is displayed currently. Can
214608cfed6SMarkus Armbruster#              be determined by the client or the server, or unknown if spice
215608cfed6SMarkus Armbruster#              server doesn't provide this information. (since: 1.1)
216608cfed6SMarkus Armbruster#
217608cfed6SMarkus Armbruster# @channels: a list of @SpiceChannel for each active spice channel
218608cfed6SMarkus Armbruster#
2199bc6e893SMarkus Armbruster# Since: 0.14
220608cfed6SMarkus Armbruster##
221608cfed6SMarkus Armbruster{ 'struct': 'SpiceInfo',
222608cfed6SMarkus Armbruster  'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
223608cfed6SMarkus Armbruster           '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
224514337c1SMarc-André Lureau           'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']},
2258a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
226608cfed6SMarkus Armbruster
227608cfed6SMarkus Armbruster##
228608cfed6SMarkus Armbruster# @query-spice:
229608cfed6SMarkus Armbruster#
230608cfed6SMarkus Armbruster# Returns information about the current SPICE server
231608cfed6SMarkus Armbruster#
232608cfed6SMarkus Armbruster# Returns: @SpiceInfo
233608cfed6SMarkus Armbruster#
2349bc6e893SMarkus Armbruster# Since: 0.14
235608cfed6SMarkus Armbruster#
236608cfed6SMarkus Armbruster# Example:
237608cfed6SMarkus Armbruster#
238608cfed6SMarkus Armbruster# -> { "execute": "query-spice" }
239608cfed6SMarkus Armbruster# <- { "return": {
240608cfed6SMarkus Armbruster#          "enabled": true,
241608cfed6SMarkus Armbruster#          "auth": "spice",
242608cfed6SMarkus Armbruster#          "port": 5920,
243608cfed6SMarkus Armbruster#          "tls-port": 5921,
244608cfed6SMarkus Armbruster#          "host": "0.0.0.0",
245608cfed6SMarkus Armbruster#          "channels": [
246608cfed6SMarkus Armbruster#             {
247608cfed6SMarkus Armbruster#                "port": "54924",
248608cfed6SMarkus Armbruster#                "family": "ipv4",
249608cfed6SMarkus Armbruster#                "channel-type": 1,
250608cfed6SMarkus Armbruster#                "connection-id": 1804289383,
251608cfed6SMarkus Armbruster#                "host": "127.0.0.1",
252608cfed6SMarkus Armbruster#                "channel-id": 0,
253608cfed6SMarkus Armbruster#                "tls": true
254608cfed6SMarkus Armbruster#             },
255608cfed6SMarkus Armbruster#             {
256608cfed6SMarkus Armbruster#                "port": "36710",
257608cfed6SMarkus Armbruster#                "family": "ipv4",
258608cfed6SMarkus Armbruster#                "channel-type": 4,
259608cfed6SMarkus Armbruster#                "connection-id": 1804289383,
260608cfed6SMarkus Armbruster#                "host": "127.0.0.1",
261608cfed6SMarkus Armbruster#                "channel-id": 0,
262608cfed6SMarkus Armbruster#                "tls": false
263608cfed6SMarkus Armbruster#             },
264608cfed6SMarkus Armbruster#             [ ... more channels follow ... ]
265608cfed6SMarkus Armbruster#          ]
266608cfed6SMarkus Armbruster#       }
267608cfed6SMarkus Armbruster#    }
268608cfed6SMarkus Armbruster#
269608cfed6SMarkus Armbruster##
270514337c1SMarc-André Lureau{ 'command': 'query-spice', 'returns': 'SpiceInfo',
2718a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
272608cfed6SMarkus Armbruster
273608cfed6SMarkus Armbruster##
274608cfed6SMarkus Armbruster# @SPICE_CONNECTED:
275608cfed6SMarkus Armbruster#
276608cfed6SMarkus Armbruster# Emitted when a SPICE client establishes a connection
277608cfed6SMarkus Armbruster#
278608cfed6SMarkus Armbruster# @server: server information
279608cfed6SMarkus Armbruster#
280608cfed6SMarkus Armbruster# @client: client information
281608cfed6SMarkus Armbruster#
2829bc6e893SMarkus Armbruster# Since: 0.14
283608cfed6SMarkus Armbruster#
284608cfed6SMarkus Armbruster# Example:
285608cfed6SMarkus Armbruster#
286608cfed6SMarkus Armbruster# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
287608cfed6SMarkus Armbruster#      "event": "SPICE_CONNECTED",
288608cfed6SMarkus Armbruster#      "data": {
289608cfed6SMarkus Armbruster#        "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
290608cfed6SMarkus Armbruster#        "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
291608cfed6SMarkus Armbruster#    }}
292608cfed6SMarkus Armbruster#
293608cfed6SMarkus Armbruster##
294608cfed6SMarkus Armbruster{ 'event': 'SPICE_CONNECTED',
295608cfed6SMarkus Armbruster  'data': { 'server': 'SpiceBasicInfo',
296514337c1SMarc-André Lureau            'client': 'SpiceBasicInfo' },
2978a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
298608cfed6SMarkus Armbruster
299608cfed6SMarkus Armbruster##
300608cfed6SMarkus Armbruster# @SPICE_INITIALIZED:
301608cfed6SMarkus Armbruster#
302608cfed6SMarkus Armbruster# Emitted after initial handshake and authentication takes place (if any)
303608cfed6SMarkus Armbruster# and the SPICE channel is up and running
304608cfed6SMarkus Armbruster#
305608cfed6SMarkus Armbruster# @server: server information
306608cfed6SMarkus Armbruster#
307608cfed6SMarkus Armbruster# @client: client information
308608cfed6SMarkus Armbruster#
3099bc6e893SMarkus Armbruster# Since: 0.14
310608cfed6SMarkus Armbruster#
311608cfed6SMarkus Armbruster# Example:
312608cfed6SMarkus Armbruster#
313608cfed6SMarkus Armbruster# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
314608cfed6SMarkus Armbruster#      "event": "SPICE_INITIALIZED",
315608cfed6SMarkus Armbruster#      "data": {"server": {"auth": "spice", "port": "5921",
316608cfed6SMarkus Armbruster#                          "family": "ipv4", "host": "127.0.0.1"},
317608cfed6SMarkus Armbruster#               "client": {"port": "49004", "family": "ipv4", "channel-type": 3,
318608cfed6SMarkus Armbruster#                          "connection-id": 1804289383, "host": "127.0.0.1",
319608cfed6SMarkus Armbruster#                          "channel-id": 0, "tls": true}
320608cfed6SMarkus Armbruster#    }}
321608cfed6SMarkus Armbruster#
322608cfed6SMarkus Armbruster##
323608cfed6SMarkus Armbruster{ 'event': 'SPICE_INITIALIZED',
324608cfed6SMarkus Armbruster  'data': { 'server': 'SpiceServerInfo',
325514337c1SMarc-André Lureau            'client': 'SpiceChannel' },
3268a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
327608cfed6SMarkus Armbruster
328608cfed6SMarkus Armbruster##
329608cfed6SMarkus Armbruster# @SPICE_DISCONNECTED:
330608cfed6SMarkus Armbruster#
331608cfed6SMarkus Armbruster# Emitted when the SPICE connection is closed
332608cfed6SMarkus Armbruster#
333608cfed6SMarkus Armbruster# @server: server information
334608cfed6SMarkus Armbruster#
335608cfed6SMarkus Armbruster# @client: client information
336608cfed6SMarkus Armbruster#
3379bc6e893SMarkus Armbruster# Since: 0.14
338608cfed6SMarkus Armbruster#
339608cfed6SMarkus Armbruster# Example:
340608cfed6SMarkus Armbruster#
341608cfed6SMarkus Armbruster# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
342608cfed6SMarkus Armbruster#      "event": "SPICE_DISCONNECTED",
343608cfed6SMarkus Armbruster#      "data": {
344608cfed6SMarkus Armbruster#        "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
345608cfed6SMarkus Armbruster#        "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
346608cfed6SMarkus Armbruster#    }}
347608cfed6SMarkus Armbruster#
348608cfed6SMarkus Armbruster##
349608cfed6SMarkus Armbruster{ 'event': 'SPICE_DISCONNECTED',
350608cfed6SMarkus Armbruster  'data': { 'server': 'SpiceBasicInfo',
351514337c1SMarc-André Lureau            'client': 'SpiceBasicInfo' },
3528a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
353608cfed6SMarkus Armbruster
354608cfed6SMarkus Armbruster##
355608cfed6SMarkus Armbruster# @SPICE_MIGRATE_COMPLETED:
356608cfed6SMarkus Armbruster#
357608cfed6SMarkus Armbruster# Emitted when SPICE migration has completed
358608cfed6SMarkus Armbruster#
359608cfed6SMarkus Armbruster# Since: 1.3
360608cfed6SMarkus Armbruster#
361608cfed6SMarkus Armbruster# Example:
362608cfed6SMarkus Armbruster#
363608cfed6SMarkus Armbruster# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
364608cfed6SMarkus Armbruster#      "event": "SPICE_MIGRATE_COMPLETED" }
365608cfed6SMarkus Armbruster#
366608cfed6SMarkus Armbruster##
367514337c1SMarc-André Lureau{ 'event': 'SPICE_MIGRATE_COMPLETED',
3688a9f1e1dSMarc-André Lureau  'if': 'CONFIG_SPICE' }
369608cfed6SMarkus Armbruster
370608cfed6SMarkus Armbruster##
371608cfed6SMarkus Armbruster# == VNC
372608cfed6SMarkus Armbruster##
373608cfed6SMarkus Armbruster
374608cfed6SMarkus Armbruster##
375608cfed6SMarkus Armbruster# @VncBasicInfo:
376608cfed6SMarkus Armbruster#
377608cfed6SMarkus Armbruster# The basic information for vnc network connection
378608cfed6SMarkus Armbruster#
379608cfed6SMarkus Armbruster# @host: IP address
380608cfed6SMarkus Armbruster#
381608cfed6SMarkus Armbruster# @service: The service name of the vnc port. This may depend on the host
382608cfed6SMarkus Armbruster#           system's service database so symbolic names should not be relied
383608cfed6SMarkus Armbruster#           on.
384608cfed6SMarkus Armbruster#
385608cfed6SMarkus Armbruster# @family: address family
386608cfed6SMarkus Armbruster#
387608cfed6SMarkus Armbruster# @websocket: true in case the socket is a websocket (since 2.3).
388608cfed6SMarkus Armbruster#
389608cfed6SMarkus Armbruster# Since: 2.1
390608cfed6SMarkus Armbruster##
391608cfed6SMarkus Armbruster{ 'struct': 'VncBasicInfo',
392608cfed6SMarkus Armbruster  'data': { 'host': 'str',
393608cfed6SMarkus Armbruster            'service': 'str',
394608cfed6SMarkus Armbruster            'family': 'NetworkAddressFamily',
39505eb4a25SMarc-André Lureau            'websocket': 'bool' },
3968a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
397608cfed6SMarkus Armbruster
398608cfed6SMarkus Armbruster##
399608cfed6SMarkus Armbruster# @VncServerInfo:
400608cfed6SMarkus Armbruster#
401608cfed6SMarkus Armbruster# The network connection information for server
402608cfed6SMarkus Armbruster#
403608cfed6SMarkus Armbruster# @auth: authentication method used for
404608cfed6SMarkus Armbruster#        the plain (non-websocket) VNC server
405608cfed6SMarkus Armbruster#
406608cfed6SMarkus Armbruster# Since: 2.1
407608cfed6SMarkus Armbruster##
408608cfed6SMarkus Armbruster{ 'struct': 'VncServerInfo',
409608cfed6SMarkus Armbruster  'base': 'VncBasicInfo',
41005eb4a25SMarc-André Lureau  'data': { '*auth': 'str' },
4118a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
412608cfed6SMarkus Armbruster
413608cfed6SMarkus Armbruster##
414608cfed6SMarkus Armbruster# @VncClientInfo:
415608cfed6SMarkus Armbruster#
416608cfed6SMarkus Armbruster# Information about a connected VNC client.
417608cfed6SMarkus Armbruster#
418608cfed6SMarkus Armbruster# @x509_dname: If x509 authentication is in use, the Distinguished
419608cfed6SMarkus Armbruster#              Name of the client.
420608cfed6SMarkus Armbruster#
421608cfed6SMarkus Armbruster# @sasl_username: If SASL authentication is in use, the SASL username
422608cfed6SMarkus Armbruster#                 used for authentication.
423608cfed6SMarkus Armbruster#
4249bc6e893SMarkus Armbruster# Since: 0.14
425608cfed6SMarkus Armbruster##
426608cfed6SMarkus Armbruster{ 'struct': 'VncClientInfo',
427608cfed6SMarkus Armbruster  'base': 'VncBasicInfo',
42805eb4a25SMarc-André Lureau  'data': { '*x509_dname': 'str', '*sasl_username': 'str' },
4298a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
430608cfed6SMarkus Armbruster
431608cfed6SMarkus Armbruster##
432608cfed6SMarkus Armbruster# @VncInfo:
433608cfed6SMarkus Armbruster#
434608cfed6SMarkus Armbruster# Information about the VNC session.
435608cfed6SMarkus Armbruster#
436608cfed6SMarkus Armbruster# @enabled: true if the VNC server is enabled, false otherwise
437608cfed6SMarkus Armbruster#
438608cfed6SMarkus Armbruster# @host: The hostname the VNC server is bound to.  This depends on
439608cfed6SMarkus Armbruster#        the name resolution on the host and may be an IP address.
440608cfed6SMarkus Armbruster#
441e050e426SPeter Maydell# @family: - 'ipv6' if the host is listening for IPv6 connections
442e050e426SPeter Maydell#          - 'ipv4' if the host is listening for IPv4 connections
443e050e426SPeter Maydell#          - 'unix' if the host is listening on a unix domain socket
444e050e426SPeter Maydell#          - 'unknown' otherwise
445608cfed6SMarkus Armbruster#
446608cfed6SMarkus Armbruster# @service: The service name of the server's port.  This may depends
447608cfed6SMarkus Armbruster#           on the host system's service database so symbolic names should not
448608cfed6SMarkus Armbruster#           be relied on.
449608cfed6SMarkus Armbruster#
450608cfed6SMarkus Armbruster# @auth: the current authentication type used by the server
451e050e426SPeter Maydell#
452e050e426SPeter Maydell#        - 'none' if no authentication is being used
453e050e426SPeter Maydell#        - 'vnc' if VNC authentication is being used
454e050e426SPeter Maydell#        - 'vencrypt+plain' if VEncrypt is used with plain text authentication
455e050e426SPeter Maydell#        - 'vencrypt+tls+none' if VEncrypt is used with TLS and no authentication
456e050e426SPeter Maydell#        - 'vencrypt+tls+vnc' if VEncrypt is used with TLS and VNC authentication
457e050e426SPeter Maydell#        - 'vencrypt+tls+plain' if VEncrypt is used with TLS and plain text auth
458e050e426SPeter Maydell#        - 'vencrypt+x509+none' if VEncrypt is used with x509 and no auth
459e050e426SPeter Maydell#        - 'vencrypt+x509+vnc' if VEncrypt is used with x509 and VNC auth
460e050e426SPeter Maydell#        - 'vencrypt+x509+plain' if VEncrypt is used with x509 and plain text auth
461e050e426SPeter Maydell#        - 'vencrypt+tls+sasl' if VEncrypt is used with TLS and SASL auth
462e050e426SPeter Maydell#        - 'vencrypt+x509+sasl' if VEncrypt is used with x509 and SASL auth
463608cfed6SMarkus Armbruster#
464608cfed6SMarkus Armbruster# @clients: a list of @VncClientInfo of all currently connected clients
465608cfed6SMarkus Armbruster#
4669bc6e893SMarkus Armbruster# Since: 0.14
467608cfed6SMarkus Armbruster##
468608cfed6SMarkus Armbruster{ 'struct': 'VncInfo',
469608cfed6SMarkus Armbruster  'data': {'enabled': 'bool', '*host': 'str',
470608cfed6SMarkus Armbruster           '*family': 'NetworkAddressFamily',
47105eb4a25SMarc-André Lureau           '*service': 'str', '*auth': 'str', '*clients': ['VncClientInfo']},
4728a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
473608cfed6SMarkus Armbruster
474608cfed6SMarkus Armbruster##
475608cfed6SMarkus Armbruster# @VncPrimaryAuth:
476608cfed6SMarkus Armbruster#
477608cfed6SMarkus Armbruster# vnc primary authentication method.
478608cfed6SMarkus Armbruster#
479608cfed6SMarkus Armbruster# Since: 2.3
480608cfed6SMarkus Armbruster##
481608cfed6SMarkus Armbruster{ 'enum': 'VncPrimaryAuth',
482608cfed6SMarkus Armbruster  'data': [ 'none', 'vnc', 'ra2', 'ra2ne', 'tight', 'ultra',
48305eb4a25SMarc-André Lureau            'tls', 'vencrypt', 'sasl' ],
4848a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
485608cfed6SMarkus Armbruster
486608cfed6SMarkus Armbruster##
487608cfed6SMarkus Armbruster# @VncVencryptSubAuth:
488608cfed6SMarkus Armbruster#
489608cfed6SMarkus Armbruster# vnc sub authentication method with vencrypt.
490608cfed6SMarkus Armbruster#
491608cfed6SMarkus Armbruster# Since: 2.3
492608cfed6SMarkus Armbruster##
493608cfed6SMarkus Armbruster{ 'enum': 'VncVencryptSubAuth',
494608cfed6SMarkus Armbruster  'data': [ 'plain',
495608cfed6SMarkus Armbruster            'tls-none',  'x509-none',
496608cfed6SMarkus Armbruster            'tls-vnc',   'x509-vnc',
497608cfed6SMarkus Armbruster            'tls-plain', 'x509-plain',
49805eb4a25SMarc-André Lureau            'tls-sasl',  'x509-sasl' ],
4998a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
500608cfed6SMarkus Armbruster
501608cfed6SMarkus Armbruster##
502608cfed6SMarkus Armbruster# @VncServerInfo2:
503608cfed6SMarkus Armbruster#
504608cfed6SMarkus Armbruster# The network connection information for server
505608cfed6SMarkus Armbruster#
506608cfed6SMarkus Armbruster# @auth: The current authentication type used by the servers
507608cfed6SMarkus Armbruster#
508608cfed6SMarkus Armbruster# @vencrypt: The vencrypt sub authentication type used by the
509608cfed6SMarkus Armbruster#            servers, only specified in case auth == vencrypt.
510608cfed6SMarkus Armbruster#
511608cfed6SMarkus Armbruster# Since: 2.9
512608cfed6SMarkus Armbruster##
513608cfed6SMarkus Armbruster{ 'struct': 'VncServerInfo2',
514608cfed6SMarkus Armbruster  'base': 'VncBasicInfo',
515608cfed6SMarkus Armbruster  'data': { 'auth'      : 'VncPrimaryAuth',
51605eb4a25SMarc-André Lureau            '*vencrypt' : 'VncVencryptSubAuth' },
5178a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
518608cfed6SMarkus Armbruster
519608cfed6SMarkus Armbruster##
520608cfed6SMarkus Armbruster# @VncInfo2:
521608cfed6SMarkus Armbruster#
522608cfed6SMarkus Armbruster# Information about a vnc server
523608cfed6SMarkus Armbruster#
524608cfed6SMarkus Armbruster# @id: vnc server name.
525608cfed6SMarkus Armbruster#
526608cfed6SMarkus Armbruster# @server: A list of @VncBasincInfo describing all listening sockets.
527608cfed6SMarkus Armbruster#          The list can be empty (in case the vnc server is disabled).
528608cfed6SMarkus Armbruster#          It also may have multiple entries: normal + websocket,
529608cfed6SMarkus Armbruster#          possibly also ipv4 + ipv6 in the future.
530608cfed6SMarkus Armbruster#
531608cfed6SMarkus Armbruster# @clients: A list of @VncClientInfo of all currently connected clients.
532608cfed6SMarkus Armbruster#           The list can be empty, for obvious reasons.
533608cfed6SMarkus Armbruster#
534608cfed6SMarkus Armbruster# @auth: The current authentication type used by the non-websockets servers
535608cfed6SMarkus Armbruster#
536608cfed6SMarkus Armbruster# @vencrypt: The vencrypt authentication type used by the servers,
537608cfed6SMarkus Armbruster#            only specified in case auth == vencrypt.
538608cfed6SMarkus Armbruster#
539608cfed6SMarkus Armbruster# @display: The display device the vnc server is linked to.
540608cfed6SMarkus Armbruster#
541608cfed6SMarkus Armbruster# Since: 2.3
542608cfed6SMarkus Armbruster##
543608cfed6SMarkus Armbruster{ 'struct': 'VncInfo2',
544608cfed6SMarkus Armbruster  'data': { 'id'        : 'str',
545608cfed6SMarkus Armbruster            'server'    : ['VncServerInfo2'],
546608cfed6SMarkus Armbruster            'clients'   : ['VncClientInfo'],
547608cfed6SMarkus Armbruster            'auth'      : 'VncPrimaryAuth',
548608cfed6SMarkus Armbruster            '*vencrypt' : 'VncVencryptSubAuth',
54905eb4a25SMarc-André Lureau            '*display'  : 'str' },
5508a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
551608cfed6SMarkus Armbruster
552608cfed6SMarkus Armbruster##
553608cfed6SMarkus Armbruster# @query-vnc:
554608cfed6SMarkus Armbruster#
555608cfed6SMarkus Armbruster# Returns information about the current VNC server
556608cfed6SMarkus Armbruster#
557608cfed6SMarkus Armbruster# Returns: @VncInfo
558608cfed6SMarkus Armbruster#
5599bc6e893SMarkus Armbruster# Since: 0.14
560608cfed6SMarkus Armbruster#
561608cfed6SMarkus Armbruster# Example:
562608cfed6SMarkus Armbruster#
563608cfed6SMarkus Armbruster# -> { "execute": "query-vnc" }
564608cfed6SMarkus Armbruster# <- { "return": {
565608cfed6SMarkus Armbruster#          "enabled":true,
566608cfed6SMarkus Armbruster#          "host":"0.0.0.0",
567608cfed6SMarkus Armbruster#          "service":"50402",
568608cfed6SMarkus Armbruster#          "auth":"vnc",
569608cfed6SMarkus Armbruster#          "family":"ipv4",
570608cfed6SMarkus Armbruster#          "clients":[
571608cfed6SMarkus Armbruster#             {
572608cfed6SMarkus Armbruster#                "host":"127.0.0.1",
573608cfed6SMarkus Armbruster#                "service":"50401",
574608cfed6SMarkus Armbruster#                "family":"ipv4"
575608cfed6SMarkus Armbruster#             }
576608cfed6SMarkus Armbruster#          ]
577608cfed6SMarkus Armbruster#       }
578608cfed6SMarkus Armbruster#    }
579608cfed6SMarkus Armbruster#
580608cfed6SMarkus Armbruster##
58105eb4a25SMarc-André Lureau{ 'command': 'query-vnc', 'returns': 'VncInfo',
5828a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
583608cfed6SMarkus Armbruster##
584608cfed6SMarkus Armbruster# @query-vnc-servers:
585608cfed6SMarkus Armbruster#
586608cfed6SMarkus Armbruster# Returns a list of vnc servers.  The list can be empty.
587608cfed6SMarkus Armbruster#
588608cfed6SMarkus Armbruster# Returns: a list of @VncInfo2
589608cfed6SMarkus Armbruster#
590608cfed6SMarkus Armbruster# Since: 2.3
591608cfed6SMarkus Armbruster##
59205eb4a25SMarc-André Lureau{ 'command': 'query-vnc-servers', 'returns': ['VncInfo2'],
5938a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
594608cfed6SMarkus Armbruster
595608cfed6SMarkus Armbruster##
596608cfed6SMarkus Armbruster# @change-vnc-password:
597608cfed6SMarkus Armbruster#
598608cfed6SMarkus Armbruster# Change the VNC server password.
599608cfed6SMarkus Armbruster#
600608cfed6SMarkus Armbruster# @password: the new password to use with VNC authentication
601608cfed6SMarkus Armbruster#
602608cfed6SMarkus Armbruster# Since: 1.1
603608cfed6SMarkus Armbruster#
604608cfed6SMarkus Armbruster# Notes: An empty password in this command will set the password to the empty
605608cfed6SMarkus Armbruster#        string.  Existing clients are unaffected by executing this command.
606608cfed6SMarkus Armbruster##
607b0ddeba2SMarc-André Lureau{ 'command': 'change-vnc-password',
608b0ddeba2SMarc-André Lureau  'data': { 'password': 'str' },
6098a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
610608cfed6SMarkus Armbruster
611608cfed6SMarkus Armbruster##
612608cfed6SMarkus Armbruster# @VNC_CONNECTED:
613608cfed6SMarkus Armbruster#
614608cfed6SMarkus Armbruster# Emitted when a VNC client establishes a connection
615608cfed6SMarkus Armbruster#
616608cfed6SMarkus Armbruster# @server: server information
617608cfed6SMarkus Armbruster#
618608cfed6SMarkus Armbruster# @client: client information
619608cfed6SMarkus Armbruster#
620608cfed6SMarkus Armbruster# Note: This event is emitted before any authentication takes place, thus
621608cfed6SMarkus Armbruster#       the authentication ID is not provided
622608cfed6SMarkus Armbruster#
6239bc6e893SMarkus Armbruster# Since: 0.13
624608cfed6SMarkus Armbruster#
625608cfed6SMarkus Armbruster# Example:
626608cfed6SMarkus Armbruster#
627608cfed6SMarkus Armbruster# <- { "event": "VNC_CONNECTED",
628608cfed6SMarkus Armbruster#      "data": {
629608cfed6SMarkus Armbruster#            "server": { "auth": "sasl", "family": "ipv4",
630608cfed6SMarkus Armbruster#                        "service": "5901", "host": "0.0.0.0" },
631608cfed6SMarkus Armbruster#            "client": { "family": "ipv4", "service": "58425",
632608cfed6SMarkus Armbruster#                        "host": "127.0.0.1" } },
633608cfed6SMarkus Armbruster#      "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
634608cfed6SMarkus Armbruster#
635608cfed6SMarkus Armbruster##
636608cfed6SMarkus Armbruster{ 'event': 'VNC_CONNECTED',
637608cfed6SMarkus Armbruster  'data': { 'server': 'VncServerInfo',
63805eb4a25SMarc-André Lureau            'client': 'VncBasicInfo' },
6398a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
640608cfed6SMarkus Armbruster
641608cfed6SMarkus Armbruster##
642608cfed6SMarkus Armbruster# @VNC_INITIALIZED:
643608cfed6SMarkus Armbruster#
644608cfed6SMarkus Armbruster# Emitted after authentication takes place (if any) and the VNC session is
645608cfed6SMarkus Armbruster# made active
646608cfed6SMarkus Armbruster#
647608cfed6SMarkus Armbruster# @server: server information
648608cfed6SMarkus Armbruster#
649608cfed6SMarkus Armbruster# @client: client information
650608cfed6SMarkus Armbruster#
6519bc6e893SMarkus Armbruster# Since: 0.13
652608cfed6SMarkus Armbruster#
653608cfed6SMarkus Armbruster# Example:
654608cfed6SMarkus Armbruster#
655608cfed6SMarkus Armbruster# <-  { "event": "VNC_INITIALIZED",
656608cfed6SMarkus Armbruster#       "data": {
657608cfed6SMarkus Armbruster#            "server": { "auth": "sasl", "family": "ipv4",
658608cfed6SMarkus Armbruster#                        "service": "5901", "host": "0.0.0.0"},
659608cfed6SMarkus Armbruster#            "client": { "family": "ipv4", "service": "46089",
660608cfed6SMarkus Armbruster#                        "host": "127.0.0.1", "sasl_username": "luiz" } },
661608cfed6SMarkus Armbruster#       "timestamp": { "seconds": 1263475302, "microseconds": 150772 } }
662608cfed6SMarkus Armbruster#
663608cfed6SMarkus Armbruster##
664608cfed6SMarkus Armbruster{ 'event': 'VNC_INITIALIZED',
665608cfed6SMarkus Armbruster  'data': { 'server': 'VncServerInfo',
66605eb4a25SMarc-André Lureau            'client': 'VncClientInfo' },
6678a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
668608cfed6SMarkus Armbruster
669608cfed6SMarkus Armbruster##
670608cfed6SMarkus Armbruster# @VNC_DISCONNECTED:
671608cfed6SMarkus Armbruster#
672608cfed6SMarkus Armbruster# Emitted when the connection is closed
673608cfed6SMarkus Armbruster#
674608cfed6SMarkus Armbruster# @server: server information
675608cfed6SMarkus Armbruster#
676608cfed6SMarkus Armbruster# @client: client information
677608cfed6SMarkus Armbruster#
6789bc6e893SMarkus Armbruster# Since: 0.13
679608cfed6SMarkus Armbruster#
680608cfed6SMarkus Armbruster# Example:
681608cfed6SMarkus Armbruster#
682608cfed6SMarkus Armbruster# <- { "event": "VNC_DISCONNECTED",
683608cfed6SMarkus Armbruster#      "data": {
684608cfed6SMarkus Armbruster#            "server": { "auth": "sasl", "family": "ipv4",
685608cfed6SMarkus Armbruster#                        "service": "5901", "host": "0.0.0.0" },
686608cfed6SMarkus Armbruster#            "client": { "family": "ipv4", "service": "58425",
687608cfed6SMarkus Armbruster#                        "host": "127.0.0.1", "sasl_username": "luiz" } },
688608cfed6SMarkus Armbruster#      "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
689608cfed6SMarkus Armbruster#
690608cfed6SMarkus Armbruster##
691608cfed6SMarkus Armbruster{ 'event': 'VNC_DISCONNECTED',
692608cfed6SMarkus Armbruster  'data': { 'server': 'VncServerInfo',
69305eb4a25SMarc-André Lureau            'client': 'VncClientInfo' },
6948a9f1e1dSMarc-André Lureau  'if': 'CONFIG_VNC' }
695608cfed6SMarkus Armbruster
696608cfed6SMarkus Armbruster##
697608cfed6SMarkus Armbruster# = Input
698608cfed6SMarkus Armbruster##
699608cfed6SMarkus Armbruster
700608cfed6SMarkus Armbruster##
701608cfed6SMarkus Armbruster# @MouseInfo:
702608cfed6SMarkus Armbruster#
703608cfed6SMarkus Armbruster# Information about a mouse device.
704608cfed6SMarkus Armbruster#
705608cfed6SMarkus Armbruster# @name: the name of the mouse device
706608cfed6SMarkus Armbruster#
707608cfed6SMarkus Armbruster# @index: the index of the mouse device
708608cfed6SMarkus Armbruster#
709608cfed6SMarkus Armbruster# @current: true if this device is currently receiving mouse events
710608cfed6SMarkus Armbruster#
711608cfed6SMarkus Armbruster# @absolute: true if this device supports absolute coordinates as input
712608cfed6SMarkus Armbruster#
7139bc6e893SMarkus Armbruster# Since: 0.14
714608cfed6SMarkus Armbruster##
715608cfed6SMarkus Armbruster{ 'struct': 'MouseInfo',
716608cfed6SMarkus Armbruster  'data': {'name': 'str', 'index': 'int', 'current': 'bool',
717608cfed6SMarkus Armbruster           'absolute': 'bool'} }
718608cfed6SMarkus Armbruster
719608cfed6SMarkus Armbruster##
720608cfed6SMarkus Armbruster# @query-mice:
721608cfed6SMarkus Armbruster#
722608cfed6SMarkus Armbruster# Returns information about each active mouse device
723608cfed6SMarkus Armbruster#
724608cfed6SMarkus Armbruster# Returns: a list of @MouseInfo for each device
725608cfed6SMarkus Armbruster#
7269bc6e893SMarkus Armbruster# Since: 0.14
727608cfed6SMarkus Armbruster#
728608cfed6SMarkus Armbruster# Example:
729608cfed6SMarkus Armbruster#
730608cfed6SMarkus Armbruster# -> { "execute": "query-mice" }
731608cfed6SMarkus Armbruster# <- { "return": [
732608cfed6SMarkus Armbruster#          {
733608cfed6SMarkus Armbruster#             "name":"QEMU Microsoft Mouse",
734608cfed6SMarkus Armbruster#             "index":0,
735608cfed6SMarkus Armbruster#             "current":false,
736608cfed6SMarkus Armbruster#             "absolute":false
737608cfed6SMarkus Armbruster#          },
738608cfed6SMarkus Armbruster#          {
739608cfed6SMarkus Armbruster#             "name":"QEMU PS/2 Mouse",
740608cfed6SMarkus Armbruster#             "index":1,
741608cfed6SMarkus Armbruster#             "current":true,
742608cfed6SMarkus Armbruster#             "absolute":true
743608cfed6SMarkus Armbruster#          }
744608cfed6SMarkus Armbruster#       ]
745608cfed6SMarkus Armbruster#    }
746608cfed6SMarkus Armbruster#
747608cfed6SMarkus Armbruster##
748608cfed6SMarkus Armbruster{ 'command': 'query-mice', 'returns': ['MouseInfo'] }
749608cfed6SMarkus Armbruster
750608cfed6SMarkus Armbruster##
751608cfed6SMarkus Armbruster# @QKeyCode:
752608cfed6SMarkus Armbruster#
753608cfed6SMarkus Armbruster# An enumeration of key name.
754608cfed6SMarkus Armbruster#
755608cfed6SMarkus Armbruster# This is used by the @send-key command.
756608cfed6SMarkus Armbruster#
757608cfed6SMarkus Armbruster# @unmapped: since 2.0
758608cfed6SMarkus Armbruster# @pause: since 2.0
759608cfed6SMarkus Armbruster# @ro: since 2.4
760608cfed6SMarkus Armbruster# @kp_comma: since 2.4
761608cfed6SMarkus Armbruster# @kp_equals: since 2.6
762608cfed6SMarkus Armbruster# @power: since 2.6
763608cfed6SMarkus Armbruster# @hiragana: since 2.9
764608cfed6SMarkus Armbruster# @henkan: since 2.9
765608cfed6SMarkus Armbruster# @yen: since 2.9
766608cfed6SMarkus Armbruster#
767608cfed6SMarkus Armbruster# @sleep: since 2.10
768608cfed6SMarkus Armbruster# @wake: since 2.10
769608cfed6SMarkus Armbruster# @audionext: since 2.10
770608cfed6SMarkus Armbruster# @audioprev: since 2.10
771608cfed6SMarkus Armbruster# @audiostop: since 2.10
772608cfed6SMarkus Armbruster# @audioplay: since 2.10
773608cfed6SMarkus Armbruster# @audiomute: since 2.10
774608cfed6SMarkus Armbruster# @volumeup: since 2.10
775608cfed6SMarkus Armbruster# @volumedown: since 2.10
776608cfed6SMarkus Armbruster# @mediaselect: since 2.10
777608cfed6SMarkus Armbruster# @mail: since 2.10
778608cfed6SMarkus Armbruster# @calculator: since 2.10
779608cfed6SMarkus Armbruster# @computer: since 2.10
780608cfed6SMarkus Armbruster# @ac_home: since 2.10
781608cfed6SMarkus Armbruster# @ac_back: since 2.10
782608cfed6SMarkus Armbruster# @ac_forward: since 2.10
783608cfed6SMarkus Armbruster# @ac_refresh: since 2.10
784608cfed6SMarkus Armbruster# @ac_bookmarks: since 2.10
785608cfed6SMarkus Armbruster#
786280b8da3SMiika S# @muhenkan: since 2.12
787280b8da3SMiika S# @katakanahiragana: since 2.12
788280b8da3SMiika S#
789d7696ff8SAkihiko Odaki# @lang1: since 6.1
790d7696ff8SAkihiko Odaki# @lang2: since 6.1
791d7696ff8SAkihiko Odaki#
79280b857f0SDaniel P. Berrange# 'sysrq' was mistakenly added to hack around the fact that
79380b857f0SDaniel P. Berrange# the ps2 driver was not generating correct scancodes sequences
79480b857f0SDaniel P. Berrange# when 'alt+print' was pressed. This flaw is now fixed and the
79580b857f0SDaniel P. Berrange# 'sysrq' key serves no further purpose. Any further use of
79680b857f0SDaniel P. Berrange# 'sysrq' will be transparently changed to 'print', so they
79780b857f0SDaniel P. Berrange# are effectively synonyms.
79880b857f0SDaniel P. Berrange#
7999bc6e893SMarkus Armbruster# Since: 1.3
800608cfed6SMarkus Armbruster#
801608cfed6SMarkus Armbruster##
802608cfed6SMarkus Armbruster{ 'enum': 'QKeyCode',
803608cfed6SMarkus Armbruster  'data': [ 'unmapped',
804608cfed6SMarkus Armbruster            'shift', 'shift_r', 'alt', 'alt_r', 'ctrl',
805608cfed6SMarkus Armbruster            'ctrl_r', 'menu', 'esc', '1', '2', '3', '4', '5', '6', '7', '8',
806608cfed6SMarkus Armbruster            '9', '0', 'minus', 'equal', 'backspace', 'tab', 'q', 'w', 'e',
807608cfed6SMarkus Armbruster            'r', 't', 'y', 'u', 'i', 'o', 'p', 'bracket_left', 'bracket_right',
808608cfed6SMarkus Armbruster            'ret', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'semicolon',
809608cfed6SMarkus Armbruster            'apostrophe', 'grave_accent', 'backslash', 'z', 'x', 'c', 'v', 'b',
810608cfed6SMarkus Armbruster            'n', 'm', 'comma', 'dot', 'slash', 'asterisk', 'spc', 'caps_lock',
811608cfed6SMarkus Armbruster            'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10',
812608cfed6SMarkus Armbruster            'num_lock', 'scroll_lock', 'kp_divide', 'kp_multiply',
813608cfed6SMarkus Armbruster            'kp_subtract', 'kp_add', 'kp_enter', 'kp_decimal', 'sysrq', 'kp_0',
814608cfed6SMarkus Armbruster            'kp_1', 'kp_2', 'kp_3', 'kp_4', 'kp_5', 'kp_6', 'kp_7', 'kp_8',
815608cfed6SMarkus Armbruster            'kp_9', 'less', 'f11', 'f12', 'print', 'home', 'pgup', 'pgdn', 'end',
816608cfed6SMarkus Armbruster            'left', 'up', 'down', 'right', 'insert', 'delete', 'stop', 'again',
817608cfed6SMarkus Armbruster            'props', 'undo', 'front', 'copy', 'open', 'paste', 'find', 'cut',
818608cfed6SMarkus Armbruster            'lf', 'help', 'meta_l', 'meta_r', 'compose', 'pause',
819280b8da3SMiika S            'ro', 'hiragana', 'henkan', 'yen', 'muhenkan', 'katakanahiragana',
820608cfed6SMarkus Armbruster            'kp_comma', 'kp_equals', 'power', 'sleep', 'wake',
821608cfed6SMarkus Armbruster            'audionext', 'audioprev', 'audiostop', 'audioplay', 'audiomute',
822608cfed6SMarkus Armbruster            'volumeup', 'volumedown', 'mediaselect',
823608cfed6SMarkus Armbruster            'mail', 'calculator', 'computer',
824d7696ff8SAkihiko Odaki            'ac_home', 'ac_back', 'ac_forward', 'ac_refresh', 'ac_bookmarks',
825d7696ff8SAkihiko Odaki            'lang1', 'lang2' ] }
826608cfed6SMarkus Armbruster
827608cfed6SMarkus Armbruster##
8283cda299dSMarkus Armbruster# @KeyValueKind:
8293cda299dSMarkus Armbruster#
8303cda299dSMarkus Armbruster# Since: 1.3
8313cda299dSMarkus Armbruster##
8323cda299dSMarkus Armbruster{ 'enum': 'KeyValueKind',
8333cda299dSMarkus Armbruster  'data': [ 'number', 'qcode' ] }
8343cda299dSMarkus Armbruster
8353cda299dSMarkus Armbruster##
8363cda299dSMarkus Armbruster# @IntWrapper:
8373cda299dSMarkus Armbruster#
8383cda299dSMarkus Armbruster# Since: 1.3
8393cda299dSMarkus Armbruster##
8403cda299dSMarkus Armbruster{ 'struct': 'IntWrapper',
8413cda299dSMarkus Armbruster  'data': { 'data': 'int' } }
8423cda299dSMarkus Armbruster
8433cda299dSMarkus Armbruster##
8443cda299dSMarkus Armbruster# @QKeyCodeWrapper:
8453cda299dSMarkus Armbruster#
8463cda299dSMarkus Armbruster# Since: 1.3
8473cda299dSMarkus Armbruster##
8483cda299dSMarkus Armbruster{ 'struct': 'QKeyCodeWrapper',
8493cda299dSMarkus Armbruster  'data': { 'data': 'QKeyCode' } }
8503cda299dSMarkus Armbruster
8513cda299dSMarkus Armbruster##
852608cfed6SMarkus Armbruster# @KeyValue:
853608cfed6SMarkus Armbruster#
854608cfed6SMarkus Armbruster# Represents a keyboard key.
855608cfed6SMarkus Armbruster#
8569bc6e893SMarkus Armbruster# Since: 1.3
857608cfed6SMarkus Armbruster##
858608cfed6SMarkus Armbruster{ 'union': 'KeyValue',
8593cda299dSMarkus Armbruster  'base': { 'type': 'KeyValueKind' },
8603cda299dSMarkus Armbruster  'discriminator': 'type',
861608cfed6SMarkus Armbruster  'data': {
8623cda299dSMarkus Armbruster    'number': 'IntWrapper',
8633cda299dSMarkus Armbruster    'qcode': 'QKeyCodeWrapper' } }
864608cfed6SMarkus Armbruster
865608cfed6SMarkus Armbruster##
866608cfed6SMarkus Armbruster# @send-key:
867608cfed6SMarkus Armbruster#
868608cfed6SMarkus Armbruster# Send keys to guest.
869608cfed6SMarkus Armbruster#
870608cfed6SMarkus Armbruster# @keys: An array of @KeyValue elements. All @KeyValues in this array are
871608cfed6SMarkus Armbruster#        simultaneously sent to the guest. A @KeyValue.number value is sent
872608cfed6SMarkus Armbruster#        directly to the guest, while @KeyValue.qcode must be a valid
873608cfed6SMarkus Armbruster#        @QKeyCode value
874608cfed6SMarkus Armbruster#
875608cfed6SMarkus Armbruster# @hold-time: time to delay key up events, milliseconds. Defaults
876608cfed6SMarkus Armbruster#             to 100
877608cfed6SMarkus Armbruster#
878e050e426SPeter Maydell# Returns: - Nothing on success
879e050e426SPeter Maydell#          - If key is unknown or redundant, InvalidParameter
880608cfed6SMarkus Armbruster#
8819bc6e893SMarkus Armbruster# Since: 1.3
882608cfed6SMarkus Armbruster#
883608cfed6SMarkus Armbruster# Example:
884608cfed6SMarkus Armbruster#
885608cfed6SMarkus Armbruster# -> { "execute": "send-key",
886608cfed6SMarkus Armbruster#      "arguments": { "keys": [ { "type": "qcode", "data": "ctrl" },
887608cfed6SMarkus Armbruster#                               { "type": "qcode", "data": "alt" },
888608cfed6SMarkus Armbruster#                               { "type": "qcode", "data": "delete" } ] } }
889608cfed6SMarkus Armbruster# <- { "return": {} }
890608cfed6SMarkus Armbruster#
891608cfed6SMarkus Armbruster##
892608cfed6SMarkus Armbruster{ 'command': 'send-key',
893608cfed6SMarkus Armbruster  'data': { 'keys': ['KeyValue'], '*hold-time': 'int' } }
894608cfed6SMarkus Armbruster
895608cfed6SMarkus Armbruster##
896608cfed6SMarkus Armbruster# @InputButton:
897608cfed6SMarkus Armbruster#
898608cfed6SMarkus Armbruster# Button of a pointer input device (mouse, tablet).
899608cfed6SMarkus Armbruster#
900608cfed6SMarkus Armbruster# @side: front side button of a 5-button mouse (since 2.9)
901608cfed6SMarkus Armbruster#
902608cfed6SMarkus Armbruster# @extra: rear side button of a 5-button mouse (since 2.9)
903608cfed6SMarkus Armbruster#
904608cfed6SMarkus Armbruster# Since: 2.0
905608cfed6SMarkus Armbruster##
906608cfed6SMarkus Armbruster{ 'enum'  : 'InputButton',
907608cfed6SMarkus Armbruster  'data'  : [ 'left', 'middle', 'right', 'wheel-up', 'wheel-down', 'side',
908608cfed6SMarkus Armbruster  'extra' ] }
909608cfed6SMarkus Armbruster
910608cfed6SMarkus Armbruster##
911608cfed6SMarkus Armbruster# @InputAxis:
912608cfed6SMarkus Armbruster#
913608cfed6SMarkus Armbruster# Position axis of a pointer input device (mouse, tablet).
914608cfed6SMarkus Armbruster#
915608cfed6SMarkus Armbruster# Since: 2.0
916608cfed6SMarkus Armbruster##
917608cfed6SMarkus Armbruster{ 'enum'  : 'InputAxis',
918608cfed6SMarkus Armbruster  'data'  : [ 'x', 'y' ] }
919608cfed6SMarkus Armbruster
920608cfed6SMarkus Armbruster##
921608cfed6SMarkus Armbruster# @InputKeyEvent:
922608cfed6SMarkus Armbruster#
923608cfed6SMarkus Armbruster# Keyboard input event.
924608cfed6SMarkus Armbruster#
925608cfed6SMarkus Armbruster# @key:    Which key this event is for.
926608cfed6SMarkus Armbruster# @down:   True for key-down and false for key-up events.
927608cfed6SMarkus Armbruster#
928608cfed6SMarkus Armbruster# Since: 2.0
929608cfed6SMarkus Armbruster##
930608cfed6SMarkus Armbruster{ 'struct'  : 'InputKeyEvent',
931608cfed6SMarkus Armbruster  'data'  : { 'key'     : 'KeyValue',
932608cfed6SMarkus Armbruster              'down'    : 'bool' } }
933608cfed6SMarkus Armbruster
934608cfed6SMarkus Armbruster##
935608cfed6SMarkus Armbruster# @InputBtnEvent:
936608cfed6SMarkus Armbruster#
937608cfed6SMarkus Armbruster# Pointer button input event.
938608cfed6SMarkus Armbruster#
939608cfed6SMarkus Armbruster# @button: Which button this event is for.
940608cfed6SMarkus Armbruster# @down:   True for key-down and false for key-up events.
941608cfed6SMarkus Armbruster#
942608cfed6SMarkus Armbruster# Since: 2.0
943608cfed6SMarkus Armbruster##
944608cfed6SMarkus Armbruster{ 'struct'  : 'InputBtnEvent',
945608cfed6SMarkus Armbruster  'data'  : { 'button'  : 'InputButton',
946608cfed6SMarkus Armbruster              'down'    : 'bool' } }
947608cfed6SMarkus Armbruster
948608cfed6SMarkus Armbruster##
949608cfed6SMarkus Armbruster# @InputMoveEvent:
950608cfed6SMarkus Armbruster#
951608cfed6SMarkus Armbruster# Pointer motion input event.
952608cfed6SMarkus Armbruster#
953608cfed6SMarkus Armbruster# @axis: Which axis is referenced by @value.
954608cfed6SMarkus Armbruster# @value: Pointer position.  For absolute coordinates the
955608cfed6SMarkus Armbruster#         valid range is 0 -> 0x7ffff
956608cfed6SMarkus Armbruster#
957608cfed6SMarkus Armbruster# Since: 2.0
958608cfed6SMarkus Armbruster##
959608cfed6SMarkus Armbruster{ 'struct'  : 'InputMoveEvent',
960608cfed6SMarkus Armbruster  'data'  : { 'axis'    : 'InputAxis',
961608cfed6SMarkus Armbruster              'value'   : 'int' } }
962608cfed6SMarkus Armbruster
963608cfed6SMarkus Armbruster##
964*b6fd5434SMarkus Armbruster# @InputEventKind:
965*b6fd5434SMarkus Armbruster#
966*b6fd5434SMarkus Armbruster# Since: 2.0
967*b6fd5434SMarkus Armbruster##
968*b6fd5434SMarkus Armbruster{ 'enum': 'InputEventKind',
969*b6fd5434SMarkus Armbruster  'data': [ 'key', 'btn', 'rel', 'abs' ] }
970*b6fd5434SMarkus Armbruster
971*b6fd5434SMarkus Armbruster##
972*b6fd5434SMarkus Armbruster# @InputKeyEventWrapper:
973*b6fd5434SMarkus Armbruster#
974*b6fd5434SMarkus Armbruster# Since: 2.0
975*b6fd5434SMarkus Armbruster##
976*b6fd5434SMarkus Armbruster{ 'struct': 'InputKeyEventWrapper',
977*b6fd5434SMarkus Armbruster  'data': { 'data': 'InputKeyEvent' } }
978*b6fd5434SMarkus Armbruster
979*b6fd5434SMarkus Armbruster##
980*b6fd5434SMarkus Armbruster# @InputBtnEventWrapper:
981*b6fd5434SMarkus Armbruster#
982*b6fd5434SMarkus Armbruster# Since: 2.0
983*b6fd5434SMarkus Armbruster##
984*b6fd5434SMarkus Armbruster{ 'struct': 'InputBtnEventWrapper',
985*b6fd5434SMarkus Armbruster  'data': { 'data': 'InputBtnEvent' } }
986*b6fd5434SMarkus Armbruster
987*b6fd5434SMarkus Armbruster##
988*b6fd5434SMarkus Armbruster# @InputMoveEventWrapper:
989*b6fd5434SMarkus Armbruster#
990*b6fd5434SMarkus Armbruster# Since: 2.0
991*b6fd5434SMarkus Armbruster##
992*b6fd5434SMarkus Armbruster{ 'struct': 'InputMoveEventWrapper',
993*b6fd5434SMarkus Armbruster  'data': { 'data': 'InputMoveEvent' } }
994*b6fd5434SMarkus Armbruster
995*b6fd5434SMarkus Armbruster##
996608cfed6SMarkus Armbruster# @InputEvent:
997608cfed6SMarkus Armbruster#
998608cfed6SMarkus Armbruster# Input event union.
999608cfed6SMarkus Armbruster#
1000608cfed6SMarkus Armbruster# @type: the input type, one of:
1001100cc4feSPeter Maydell#
1002608cfed6SMarkus Armbruster#        - 'key': Input event of Keyboard
1003608cfed6SMarkus Armbruster#        - 'btn': Input event of pointer buttons
1004608cfed6SMarkus Armbruster#        - 'rel': Input event of relative pointer motion
1005608cfed6SMarkus Armbruster#        - 'abs': Input event of absolute pointer motion
1006608cfed6SMarkus Armbruster#
1007608cfed6SMarkus Armbruster# Since: 2.0
1008608cfed6SMarkus Armbruster##
1009608cfed6SMarkus Armbruster{ 'union' : 'InputEvent',
1010*b6fd5434SMarkus Armbruster  'base': { 'type': 'InputEventKind' },
1011*b6fd5434SMarkus Armbruster  'discriminator': 'type',
1012*b6fd5434SMarkus Armbruster  'data'  : { 'key'     : 'InputKeyEventWrapper',
1013*b6fd5434SMarkus Armbruster              'btn'     : 'InputBtnEventWrapper',
1014*b6fd5434SMarkus Armbruster              'rel'     : 'InputMoveEventWrapper',
1015*b6fd5434SMarkus Armbruster              'abs'     : 'InputMoveEventWrapper' } }
1016608cfed6SMarkus Armbruster
1017608cfed6SMarkus Armbruster##
1018608cfed6SMarkus Armbruster# @input-send-event:
1019608cfed6SMarkus Armbruster#
1020608cfed6SMarkus Armbruster# Send input event(s) to guest.
1021608cfed6SMarkus Armbruster#
1022608cfed6SMarkus Armbruster# The @device and @head parameters can be used to send the input event
1023608cfed6SMarkus Armbruster# to specific input devices in case (a) multiple input devices of the
1024608cfed6SMarkus Armbruster# same kind are added to the virtual machine and (b) you have
1025608cfed6SMarkus Armbruster# configured input routing (see docs/multiseat.txt) for those input
1026608cfed6SMarkus Armbruster# devices.  The parameters work exactly like the device and head
1027608cfed6SMarkus Armbruster# properties of input devices.  If @device is missing, only devices
1028608cfed6SMarkus Armbruster# that have no input routing config are admissible.  If @device is
1029608cfed6SMarkus Armbruster# specified, both input devices with and without input routing config
1030608cfed6SMarkus Armbruster# are admissible, but devices with input routing config take
1031608cfed6SMarkus Armbruster# precedence.
1032608cfed6SMarkus Armbruster#
103343d7c2d0SPeter Maydell# @device: display device to send event(s) to.
103443d7c2d0SPeter Maydell# @head: head to send event(s) to, in case the
103543d7c2d0SPeter Maydell#        display device supports multiple scanouts.
103643d7c2d0SPeter Maydell# @events: List of InputEvent union.
103743d7c2d0SPeter Maydell#
103843d7c2d0SPeter Maydell# Returns: Nothing on success.
103943d7c2d0SPeter Maydell#
1040608cfed6SMarkus Armbruster# Since: 2.6
1041608cfed6SMarkus Armbruster#
1042608cfed6SMarkus Armbruster# Note: The consoles are visible in the qom tree, under
1043608cfed6SMarkus Armbruster#       /backend/console[$index]. They have a device link and head property,
1044608cfed6SMarkus Armbruster#       so it is possible to map which console belongs to which device and
1045608cfed6SMarkus Armbruster#       display.
1046608cfed6SMarkus Armbruster#
1047608cfed6SMarkus Armbruster# Example:
1048608cfed6SMarkus Armbruster#
1049608cfed6SMarkus Armbruster# 1. Press left mouse button.
1050608cfed6SMarkus Armbruster#
1051608cfed6SMarkus Armbruster# -> { "execute": "input-send-event",
1052608cfed6SMarkus Armbruster#     "arguments": { "device": "video0",
1053608cfed6SMarkus Armbruster#                    "events": [ { "type": "btn",
1054608cfed6SMarkus Armbruster#                    "data" : { "down": true, "button": "left" } } ] } }
1055608cfed6SMarkus Armbruster# <- { "return": {} }
1056608cfed6SMarkus Armbruster#
1057608cfed6SMarkus Armbruster# -> { "execute": "input-send-event",
1058608cfed6SMarkus Armbruster#     "arguments": { "device": "video0",
1059608cfed6SMarkus Armbruster#                    "events": [ { "type": "btn",
1060608cfed6SMarkus Armbruster#                    "data" : { "down": false, "button": "left" } } ] } }
1061608cfed6SMarkus Armbruster# <- { "return": {} }
1062608cfed6SMarkus Armbruster#
1063608cfed6SMarkus Armbruster# 2. Press ctrl-alt-del.
1064608cfed6SMarkus Armbruster#
1065608cfed6SMarkus Armbruster# -> { "execute": "input-send-event",
1066608cfed6SMarkus Armbruster#      "arguments": { "events": [
1067608cfed6SMarkus Armbruster#         { "type": "key", "data" : { "down": true,
1068608cfed6SMarkus Armbruster#           "key": {"type": "qcode", "data": "ctrl" } } },
1069608cfed6SMarkus Armbruster#         { "type": "key", "data" : { "down": true,
1070608cfed6SMarkus Armbruster#           "key": {"type": "qcode", "data": "alt" } } },
1071608cfed6SMarkus Armbruster#         { "type": "key", "data" : { "down": true,
1072608cfed6SMarkus Armbruster#           "key": {"type": "qcode", "data": "delete" } } } ] } }
1073608cfed6SMarkus Armbruster# <- { "return": {} }
1074608cfed6SMarkus Armbruster#
1075608cfed6SMarkus Armbruster# 3. Move mouse pointer to absolute coordinates (20000, 400).
1076608cfed6SMarkus Armbruster#
1077608cfed6SMarkus Armbruster# -> { "execute": "input-send-event" ,
1078608cfed6SMarkus Armbruster#   "arguments": { "events": [
1079608cfed6SMarkus Armbruster#                { "type": "abs", "data" : { "axis": "x", "value" : 20000 } },
1080608cfed6SMarkus Armbruster#                { "type": "abs", "data" : { "axis": "y", "value" : 400 } } ] } }
1081608cfed6SMarkus Armbruster# <- { "return": {} }
1082608cfed6SMarkus Armbruster#
1083608cfed6SMarkus Armbruster##
1084608cfed6SMarkus Armbruster{ 'command': 'input-send-event',
1085608cfed6SMarkus Armbruster  'data': { '*device': 'str',
1086608cfed6SMarkus Armbruster            '*head'  : 'int',
1087608cfed6SMarkus Armbruster            'events' : [ 'InputEvent' ] } }
10880c8d7065SGerd Hoffmann
10892657846fSRyan El Kochta##
10900c8d7065SGerd Hoffmann# @DisplayGTK:
10910c8d7065SGerd Hoffmann#
10920c8d7065SGerd Hoffmann# GTK display options.
10930c8d7065SGerd Hoffmann#
10940c8d7065SGerd Hoffmann# @grab-on-hover: Grab keyboard input on mouse hover.
1095e8b1386eSGerd Hoffmann# @zoom-to-fit: Zoom guest display to fit into the host window.  When
1096e8b1386eSGerd Hoffmann#               turned off the host window will be resized instead.
1097e8b1386eSGerd Hoffmann#               In case the display device can notify the guest on
1098e8b1386eSGerd Hoffmann#               window resizes (virtio-gpu) this will default to "on",
1099e8b1386eSGerd Hoffmann#               assuming the guest will resize the display to match
1100e8b1386eSGerd Hoffmann#               the window size then.  Otherwise it defaults to "off".
1101e8b1386eSGerd Hoffmann#               Since 3.1
11020c8d7065SGerd Hoffmann#
11030c8d7065SGerd Hoffmann# Since: 2.12
11040c8d7065SGerd Hoffmann#
11050c8d7065SGerd Hoffmann##
11060c8d7065SGerd Hoffmann{ 'struct'  : 'DisplayGTK',
1107e8b1386eSGerd Hoffmann  'data'    : { '*grab-on-hover' : 'bool',
1108e8b1386eSGerd Hoffmann                '*zoom-to-fit'   : 'bool'  } }
11090c8d7065SGerd Hoffmann
11100c8d7065SGerd Hoffmann##
1111d4dc4ab1SErik Skultety# @DisplayEGLHeadless:
1112d4dc4ab1SErik Skultety#
1113d4dc4ab1SErik Skultety# EGL headless display options.
1114d4dc4ab1SErik Skultety#
1115d4dc4ab1SErik Skultety# @rendernode: Which DRM render node should be used. Default is the first
1116d4dc4ab1SErik Skultety#              available node on the host.
1117d4dc4ab1SErik Skultety#
1118d4dc4ab1SErik Skultety# Since: 3.1
1119d4dc4ab1SErik Skultety#
1120d4dc4ab1SErik Skultety##
1121d4dc4ab1SErik Skultety{ 'struct'  : 'DisplayEGLHeadless',
1122d4dc4ab1SErik Skultety  'data'    : { '*rendernode' : 'str' } }
1123d4dc4ab1SErik Skultety
1124d4dc4ab1SErik Skultety ##
112562f27922SElie Tournier # @DisplayGLMode:
112662f27922SElie Tournier #
112762f27922SElie Tournier # Display OpenGL mode.
112862f27922SElie Tournier #
112962f27922SElie Tournier # @off: Disable OpenGL (default).
113062f27922SElie Tournier # @on: Use OpenGL, pick context type automatically.
113162f27922SElie Tournier #      Would better be named 'auto' but is called 'on' for backward
113262f27922SElie Tournier #      compatibility with bool type.
113362f27922SElie Tournier # @core: Use OpenGL with Core (desktop) Context.
113462f27922SElie Tournier # @es: Use OpenGL with ES (embedded systems) Context.
113562f27922SElie Tournier #
113651f63ec7SPeter Maydell # Since: 3.0
113762f27922SElie Tournier #
113862f27922SElie Tournier ##
113962f27922SElie Tournier{ 'enum'    : 'DisplayGLMode',
114062f27922SElie Tournier  'data'    : [ 'off', 'on', 'core', 'es' ] }
114162f27922SElie Tournier
114262f27922SElie Tournier##
11432f8b7cd5SSamuel Thibault# @DisplayCurses:
11442f8b7cd5SSamuel Thibault#
11452f8b7cd5SSamuel Thibault# Curses display options.
11462f8b7cd5SSamuel Thibault#
11472f8b7cd5SSamuel Thibault# @charset:       Font charset used by guest (default: CP437).
11482f8b7cd5SSamuel Thibault#
11492f8b7cd5SSamuel Thibault# Since: 4.0
11502f8b7cd5SSamuel Thibault#
11512f8b7cd5SSamuel Thibault##
11522f8b7cd5SSamuel Thibault{ 'struct'  : 'DisplayCurses',
11532f8b7cd5SSamuel Thibault  'data'    : { '*charset'       : 'str' } }
11542f8b7cd5SSamuel Thibault
11552f8b7cd5SSamuel Thibault##
11560c8d7065SGerd Hoffmann# @DisplayType:
11570c8d7065SGerd Hoffmann#
11580c8d7065SGerd Hoffmann# Display (user interface) type.
11590c8d7065SGerd Hoffmann#
116042176d77SMarc-André Lureau# @default: The default user interface, selecting from the first available
116142176d77SMarc-André Lureau#           of gtk, sdl, cocoa, and vnc.
116242176d77SMarc-André Lureau#
116342176d77SMarc-André Lureau# @none: No user interface or video output display. The guest will
116442176d77SMarc-André Lureau#        still see an emulated graphics card, but its output will not
116542176d77SMarc-André Lureau#        be displayed to the QEMU user.
116642176d77SMarc-André Lureau#
116742176d77SMarc-André Lureau# @gtk: The GTK user interface.
116842176d77SMarc-André Lureau#
116942176d77SMarc-André Lureau# @sdl: The SDL user interface.
117042176d77SMarc-André Lureau#
117142176d77SMarc-André Lureau# @egl-headless: No user interface, offload GL operations to a local
117242176d77SMarc-André Lureau#                DRI device. Graphical display need to be paired with
117342176d77SMarc-André Lureau#                VNC or Spice. (Since 3.1)
117442176d77SMarc-André Lureau#
117542176d77SMarc-André Lureau# @curses: Display video output via curses.  For graphics device
117642176d77SMarc-André Lureau#          models which support a text mode, QEMU can display this
117742176d77SMarc-André Lureau#          output using a curses/ncurses interface. Nothing is
117842176d77SMarc-André Lureau#          displayed when the graphics device is in graphical mode or
117942176d77SMarc-André Lureau#          if the graphics device does not support a text
118042176d77SMarc-André Lureau#          mode. Generally only the VGA device models support text
118142176d77SMarc-André Lureau#          mode.
118242176d77SMarc-André Lureau#
118342176d77SMarc-André Lureau# @cocoa: The Cocoa user interface.
118442176d77SMarc-André Lureau#
1185d8aec9d9SMarc-André Lureau# @spice-app: Set up a Spice server and run the default associated
1186d8aec9d9SMarc-André Lureau#             application to connect to it. The server will redirect
1187d8aec9d9SMarc-André Lureau#             the serial console and QEMU monitors. (Since 4.0)
1188d8aec9d9SMarc-André Lureau#
11890c8d7065SGerd Hoffmann# Since: 2.12
11900c8d7065SGerd Hoffmann#
11910c8d7065SGerd Hoffmann##
11920c8d7065SGerd Hoffmann{ 'enum'    : 'DisplayType',
119366c2207fSThomas Huth  'data'    : [
119466c2207fSThomas Huth    { 'name': 'default' },
119566c2207fSThomas Huth    { 'name': 'none' },
11968a9f1e1dSMarc-André Lureau    { 'name': 'gtk', 'if': 'CONFIG_GTK' },
11978a9f1e1dSMarc-André Lureau    { 'name': 'sdl', 'if': 'CONFIG_SDL' },
119866c2207fSThomas Huth    { 'name': 'egl-headless',
11998a9f1e1dSMarc-André Lureau              'if': { 'all': ['CONFIG_OPENGL', 'CONFIG_GBM'] } },
12008a9f1e1dSMarc-André Lureau    { 'name': 'curses', 'if': 'CONFIG_CURSES' },
12018a9f1e1dSMarc-André Lureau    { 'name': 'cocoa', 'if': 'CONFIG_COCOA' },
12028a9f1e1dSMarc-André Lureau    { 'name': 'spice-app', 'if': 'CONFIG_SPICE'} ] }
12030c8d7065SGerd Hoffmann
12040c8d7065SGerd Hoffmann##
12050c8d7065SGerd Hoffmann# @DisplayOptions:
12060c8d7065SGerd Hoffmann#
12070c8d7065SGerd Hoffmann# Display (user interface) options.
12080c8d7065SGerd Hoffmann#
12090c8d7065SGerd Hoffmann# @type:          Which DisplayType qemu should use.
12100c8d7065SGerd Hoffmann# @full-screen:   Start user interface in fullscreen mode (default: off).
12110c8d7065SGerd Hoffmann# @window-close:  Allow to quit qemu with window close button (default: on).
12127027bdd7SGerd Hoffmann# @show-cursor:   Force showing the mouse cursor (default: off).
12137027bdd7SGerd Hoffmann#                 (since: 5.0)
12140c8d7065SGerd Hoffmann# @gl:            Enable OpenGL support (default: off).
12150c8d7065SGerd Hoffmann#
12160c8d7065SGerd Hoffmann# Since: 2.12
12170c8d7065SGerd Hoffmann#
12180c8d7065SGerd Hoffmann##
12190c8d7065SGerd Hoffmann{ 'union'   : 'DisplayOptions',
12200c8d7065SGerd Hoffmann  'base'    : { 'type'           : 'DisplayType',
12210c8d7065SGerd Hoffmann                '*full-screen'   : 'bool',
12220c8d7065SGerd Hoffmann                '*window-close'  : 'bool',
12237027bdd7SGerd Hoffmann                '*show-cursor'   : 'bool',
122462f27922SElie Tournier                '*gl'            : 'DisplayGLMode' },
12250c8d7065SGerd Hoffmann  'discriminator' : 'type',
122666c2207fSThomas Huth  'data'    : {
12278a9f1e1dSMarc-André Lureau      'gtk': { 'type': 'DisplayGTK', 'if': 'CONFIG_GTK' },
12288a9f1e1dSMarc-André Lureau      'curses': { 'type': 'DisplayCurses', 'if': 'CONFIG_CURSES' },
122966c2207fSThomas Huth      'egl-headless': { 'type': 'DisplayEGLHeadless',
12308a9f1e1dSMarc-André Lureau                        'if': { 'all': ['CONFIG_OPENGL', 'CONFIG_GBM'] } }
123166c2207fSThomas Huth  }
123266c2207fSThomas Huth}
1233e1ca8f7eSGerd Hoffmann
1234e1ca8f7eSGerd Hoffmann##
1235e1ca8f7eSGerd Hoffmann# @query-display-options:
1236e1ca8f7eSGerd Hoffmann#
1237e1ca8f7eSGerd Hoffmann# Returns information about display configuration
1238e1ca8f7eSGerd Hoffmann#
1239e1ca8f7eSGerd Hoffmann# Returns: @DisplayOptions
1240e1ca8f7eSGerd Hoffmann#
1241e1ca8f7eSGerd Hoffmann# Since: 3.1
1242e1ca8f7eSGerd Hoffmann#
1243e1ca8f7eSGerd Hoffmann##
1244e1ca8f7eSGerd Hoffmann{ 'command': 'query-display-options',
1245e1ca8f7eSGerd Hoffmann  'returns': 'DisplayOptions' }
12469cc07651SZihao Chang
12479cc07651SZihao Chang##
12489cc07651SZihao Chang# @DisplayReloadType:
12499cc07651SZihao Chang#
12509cc07651SZihao Chang# Available DisplayReload types.
12519cc07651SZihao Chang#
12529cc07651SZihao Chang# @vnc: VNC display
12539cc07651SZihao Chang#
12549cc07651SZihao Chang# Since: 6.0
12559cc07651SZihao Chang#
12569cc07651SZihao Chang##
12579cc07651SZihao Chang{ 'enum': 'DisplayReloadType',
12589cc07651SZihao Chang  'data': ['vnc'] }
12599cc07651SZihao Chang
12609cc07651SZihao Chang##
12619cc07651SZihao Chang# @DisplayReloadOptionsVNC:
12629cc07651SZihao Chang#
12639cc07651SZihao Chang# Specify the VNC reload options.
12649cc07651SZihao Chang#
12659cc07651SZihao Chang# @tls-certs: reload tls certs or not.
12669cc07651SZihao Chang#
12679cc07651SZihao Chang# Since: 6.0
12689cc07651SZihao Chang#
12699cc07651SZihao Chang##
12709cc07651SZihao Chang{ 'struct': 'DisplayReloadOptionsVNC',
12719cc07651SZihao Chang  'data': { '*tls-certs': 'bool' } }
12729cc07651SZihao Chang
12739cc07651SZihao Chang##
12749cc07651SZihao Chang# @DisplayReloadOptions:
12759cc07651SZihao Chang#
12769cc07651SZihao Chang# Options of the display configuration reload.
12779cc07651SZihao Chang#
12789cc07651SZihao Chang# @type: Specify the display type.
12799cc07651SZihao Chang#
12809cc07651SZihao Chang# Since: 6.0
12819cc07651SZihao Chang#
12829cc07651SZihao Chang##
12839cc07651SZihao Chang{ 'union': 'DisplayReloadOptions',
12849cc07651SZihao Chang  'base': {'type': 'DisplayReloadType'},
12859cc07651SZihao Chang  'discriminator': 'type',
12869cc07651SZihao Chang  'data': { 'vnc': 'DisplayReloadOptionsVNC' } }
12879cc07651SZihao Chang
12889cc07651SZihao Chang##
12899cc07651SZihao Chang# @display-reload:
12909cc07651SZihao Chang#
12919cc07651SZihao Chang# Reload display configuration.
12929cc07651SZihao Chang#
12939cc07651SZihao Chang# Returns: Nothing on success.
12949cc07651SZihao Chang#
12959cc07651SZihao Chang# Since: 6.0
12969cc07651SZihao Chang#
12979cc07651SZihao Chang# Example:
12989cc07651SZihao Chang#
12999cc07651SZihao Chang# -> { "execute": "display-reload",
13009cc07651SZihao Chang#      "arguments": { "type": "vnc", "tls-certs": true  } }
13019cc07651SZihao Chang# <- { "return": {} }
13029cc07651SZihao Chang#
13039cc07651SZihao Chang##
13049cc07651SZihao Chang{ 'command': 'display-reload',
13059cc07651SZihao Chang  'data': 'DisplayReloadOptions',
13069cc07651SZihao Chang  'boxed' : true }
1307