qemu/qapi/ui.json

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

1718 lines
42 KiB
JSON
Raw Normal View History

# -*- Mode: Python -*-
# vim: filetype=python
#
##
# = Remote desktop
##
{ 'include': 'common.json' }
{ 'include': 'sockets.json' }
##
# @DisplayProtocol:
#
# Display protocols which support changing password options.
#
# Since: 7.0
##
{ 'enum': 'DisplayProtocol',
'data': [ 'vnc', 'spice' ] }
##
# @SetPasswordAction:
#
# An action to take on changing a password on a connection with active
# clients.
#
# @keep: maintain existing clients
#
# @fail: fail the command if clients are connected
#
# @disconnect: disconnect existing clients
#
# Since: 7.0
##
{ 'enum': 'SetPasswordAction',
'data': [ 'keep', 'fail', 'disconnect' ] }
##
# @SetPasswordOptions:
#
# Options for set_password.
#
# @protocol:
# - 'vnc' to modify the VNC server password
# - 'spice' to modify the Spice server password
#
# @password: the new password
#
# @connected: How to handle existing clients when changing the
# password. If nothing is specified, defaults to 'keep'. For
# VNC, only 'keep' is currently implemented.
#
# Since: 7.0
##
{ 'union': 'SetPasswordOptions',
'base': { 'protocol': 'DisplayProtocol',
'password': 'str',
'*connected': 'SetPasswordAction' },
'discriminator': 'protocol',
'data': { 'vnc': 'SetPasswordOptionsVnc' } }
##
# @SetPasswordOptionsVnc:
#
# Options for set_password specific to the VNC protocol.
#
# @display: The id of the display where the password should be
# changed. Defaults to the first.
#
# Since: 7.0
##
{ 'struct': 'SetPasswordOptionsVnc',
'data': { '*display': 'str' } }
##
# @set_password:
#
# Set the password of a remote display server.
#
# Errors:
# - If Spice is not enabled, DeviceNotFound
#
# Since: 0.14
#
# .. qmp-example::
#
# -> { "execute": "set_password", "arguments": { "protocol": "vnc",
# "password": "secret" } }
# <- { "return": {} }
##
{ 'command': 'set_password', 'boxed': true, 'data': 'SetPasswordOptions' }
##
# @ExpirePasswordOptions:
#
# General options for expire_password.
#
# @protocol:
# - 'vnc' to modify the VNC server expiration
# - 'spice' to modify the Spice server expiration
#
# @time: when to expire the password.
#
# - 'now' to expire the password immediately
# - 'never' to cancel password expiration
# - '+INT' where INT is the number of seconds from now (integer)
# - 'INT' where INT is the absolute time in seconds
#
# .. note:: Time is relative to the server and currently there is no
# way to coordinate server time with client time. It is not
# recommended to use the absolute time version of the @time
# parameter unless you're sure you are on the same machine as the
# QEMU instance.
#
# Since: 7.0
##
{ 'union': 'ExpirePasswordOptions',
'base': { 'protocol': 'DisplayProtocol',
'time': 'str' },
'discriminator': 'protocol',
'data': { 'vnc': 'ExpirePasswordOptionsVnc' } }
##
# @ExpirePasswordOptionsVnc:
#
# Options for expire_password specific to the VNC protocol.
#
# @display: The id of the display where the expiration should be
# changed. Defaults to the first.
#
# Since: 7.0
##
{ 'struct': 'ExpirePasswordOptionsVnc',
'data': { '*display': 'str' } }
##
# @expire_password:
#
# Expire the password of a remote display server.
#
# Errors:
# - If @protocol is 'spice' and Spice is not active,
# DeviceNotFound
#
# Since: 0.14
#
# .. qmp-example::
#
# -> { "execute": "expire_password", "arguments": { "protocol": "vnc",
# "time": "+60" } }
# <- { "return": {} }
##
{ 'command': 'expire_password', 'boxed': true, 'data': 'ExpirePasswordOptions' }
##
# @ImageFormat:
#
# Supported image format types.
#
# @png: PNG format
#
# @ppm: PPM format
#
# Since: 7.1
##
{ 'enum': 'ImageFormat',
'data': ['ppm', 'png'] }
##
# @screendump:
#
# Capture the contents of a screen and write it to a file.
#
# @filename: the path of a new file to store the image
#
# @device: ID of the display device that should be dumped. If this
# parameter is missing, the primary display will be used. (Since
# 2.12)
#
# @head: head to use in case the device supports multiple heads. If
# this parameter is missing, head #0 will be used. Also note that
# the head can only be specified in conjunction with the device
# ID. (Since 2.12)
#
# @format: image format for screendump. (default: ppm) (Since 7.1)
#
# Since: 0.14
#
# .. qmp-example::
#
# -> { "execute": "screendump",
# "arguments": { "filename": "/tmp/image" } }
# <- { "return": {} }
##
{ 'command': 'screendump',
'data': {'filename': 'str', '*device': 'str', '*head': 'int',
'*format': 'ImageFormat'},
'coroutine': true,
'if': 'CONFIG_PIXMAN' }
##
# == Spice
##
##
# @SpiceBasicInfo:
#
# The basic information for SPICE network connection
#
# @host: IP address
#
# @port: port number
#
# @family: address family
#
# Since: 2.1
##
{ 'struct': 'SpiceBasicInfo',
'data': { 'host': 'str',
'port': 'str',
'family': 'NetworkAddressFamily' },
'if': 'CONFIG_SPICE' }
##
# @SpiceServerInfo:
#
# Information about a SPICE server
#
# @auth: authentication method
#
# Since: 2.1
##
{ 'struct': 'SpiceServerInfo',
'base': 'SpiceBasicInfo',
'data': { '*auth': 'str' },
'if': 'CONFIG_SPICE' }
##
# @SpiceChannel:
#
# Information about a SPICE client channel.
#
# @connection-id: SPICE connection id number. All channels with the
# same id belong to the same SPICE session.
#
# @channel-type: SPICE channel type number. "1" is the main control
# channel, filter for this one if you want to track spice sessions
# only
#
# @channel-id: SPICE channel ID number. Usually "0", might be
# different when multiple channels of the same type exist, such as
# multiple display channels in a multihead setup
#
# @tls: true if the channel is encrypted, false otherwise.
#
# Since: 0.14
##
{ 'struct': 'SpiceChannel',
'base': 'SpiceBasicInfo',
'data': {'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int',
'tls': 'bool'},
'if': 'CONFIG_SPICE' }
##
# @SpiceQueryMouseMode:
#
# An enumeration of Spice mouse states.
#
# @client: Mouse cursor position is determined by the client.
#
# @server: Mouse cursor position is determined by the server.
#
# @unknown: No information is available about mouse mode used by the
# spice server.
#
# Since: 1.1
##
{ 'enum': 'SpiceQueryMouseMode',
'data': [ 'client', 'server', 'unknown' ],
'if': 'CONFIG_SPICE' }
##
# @SpiceInfo:
#
# Information about the SPICE session.
#
# @enabled: true if the SPICE server is enabled, false otherwise
#
# @migrated: true if the last guest migration completed and spice
# migration had completed as well, false otherwise (since 1.4)
#
# @host: The hostname the SPICE server is bound to. This depends on
# the name resolution on the host and may be an IP address.
#
# @port: The SPICE server's port number.
#
# @compiled-version: SPICE server version.
#
# @tls-port: The SPICE server's TLS port number.
#
# @auth: the current authentication type used by the server
#
# - 'none' if no authentication is being used
# - 'spice' uses SASL or direct TLS authentication, depending on
# command line options
#
# @mouse-mode: The mode in which the mouse cursor is displayed
# currently. Can be determined by the client or the server, or
# unknown if spice server doesn't provide this information.
# (since: 1.1)
#
# @channels: a list of @SpiceChannel for each active spice channel
#
# Since: 0.14
##
{ 'struct': 'SpiceInfo',
'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
'*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']},
'if': 'CONFIG_SPICE' }
##
# @query-spice:
#
# Returns information about the current SPICE server
#
# Returns: @SpiceInfo
#
# Since: 0.14
#
# .. qmp-example::
#
# -> { "execute": "query-spice" }
# <- { "return": {
# "enabled": true,
# "auth": "spice",
# "port": 5920,
# "migrated":false,
# "tls-port": 5921,
# "host": "0.0.0.0",
# "mouse-mode":"client",
# "channels": [
# {
# "port": "54924",
# "family": "ipv4",
# "channel-type": 1,
# "connection-id": 1804289383,
# "host": "127.0.0.1",
# "channel-id": 0,
# "tls": true
# },
# {
# "port": "36710",
# "family": "ipv4",
# "channel-type": 4,
# "connection-id": 1804289383,
# "host": "127.0.0.1",
# "channel-id": 0,
# "tls": false
# },
# ...
# ]
# }
# }
##
{ 'command': 'query-spice', 'returns': 'SpiceInfo',
'if': 'CONFIG_SPICE' }
##
# @SPICE_CONNECTED:
#
# Emitted when a SPICE client establishes a connection
#
# @server: server information
#
# @client: client information
#
# Since: 0.14
#
# .. qmp-example::
#
# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
# "event": "SPICE_CONNECTED",
# "data": {
# "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
# "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
# }}
##
{ 'event': 'SPICE_CONNECTED',
'data': { 'server': 'SpiceBasicInfo',
'client': 'SpiceBasicInfo' },
'if': 'CONFIG_SPICE' }
##
# @SPICE_INITIALIZED:
#
# Emitted after initial handshake and authentication takes place (if
# any) and the SPICE channel is up and running
#
# @server: server information
#
# @client: client information
#
# Since: 0.14
#
# .. qmp-example::
#
# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
# "event": "SPICE_INITIALIZED",
# "data": {"server": {"auth": "spice", "port": "5921",
# "family": "ipv4", "host": "127.0.0.1"},
# "client": {"port": "49004", "family": "ipv4", "channel-type": 3,
# "connection-id": 1804289383, "host": "127.0.0.1",
# "channel-id": 0, "tls": true}
# }}
##
{ 'event': 'SPICE_INITIALIZED',
'data': { 'server': 'SpiceServerInfo',
'client': 'SpiceChannel' },
'if': 'CONFIG_SPICE' }
##
# @SPICE_DISCONNECTED:
#
# Emitted when the SPICE connection is closed
#
# @server: server information
#
# @client: client information
#
# Since: 0.14
#
# .. qmp-example::
#
# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
# "event": "SPICE_DISCONNECTED",
# "data": {
# "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
# "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
# }}
##
{ 'event': 'SPICE_DISCONNECTED',
'data': { 'server': 'SpiceBasicInfo',
'client': 'SpiceBasicInfo' },
'if': 'CONFIG_SPICE' }
##
# @SPICE_MIGRATE_COMPLETED:
#
# Emitted when SPICE migration has completed
#
# Since: 1.3
#
# .. qmp-example::
#
# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
# "event": "SPICE_MIGRATE_COMPLETED" }
##
{ 'event': 'SPICE_MIGRATE_COMPLETED',
'if': 'CONFIG_SPICE' }
##
# == VNC
##
##
# @VncBasicInfo:
#
# The basic information for vnc network connection
#
# @host: IP address
#
# @service: The service name of the vnc port. This may depend on the
# host system's service database so symbolic names should not be
# relied on.
#
# @family: address family
#
# @websocket: true in case the socket is a websocket (since 2.3).
#
# Since: 2.1
##
{ 'struct': 'VncBasicInfo',
'data': { 'host': 'str',
'service': 'str',
'family': 'NetworkAddressFamily',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'websocket': 'bool' },
'if': 'CONFIG_VNC' }
##
# @VncServerInfo:
#
# The network connection information for server
#
# @auth: authentication method used for the plain (non-websocket) VNC
# server
#
# Since: 2.1
##
{ 'struct': 'VncServerInfo',
'base': 'VncBasicInfo',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'data': { '*auth': 'str' },
'if': 'CONFIG_VNC' }
##
# @VncClientInfo:
#
# Information about a connected VNC client.
#
# @x509_dname: If x509 authentication is in use, the Distinguished
# Name of the client.
#
# @sasl_username: If SASL authentication is in use, the SASL username
# used for authentication.
#
# Since: 0.14
##
{ 'struct': 'VncClientInfo',
'base': 'VncBasicInfo',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'data': { '*x509_dname': 'str', '*sasl_username': 'str' },
'if': 'CONFIG_VNC' }
##
# @VncInfo:
#
# Information about the VNC session.
#
# @enabled: true if the VNC server is enabled, false otherwise
#
# @host: The hostname the VNC server is bound to. This depends on the
# name resolution on the host and may be an IP address.
#
# @family:
# - 'ipv6' if the host is listening for IPv6 connections
# - 'ipv4' if the host is listening for IPv4 connections
# - 'unix' if the host is listening on a unix domain socket
# - 'unknown' otherwise
#
# @service: The service name of the server's port. This may depends
# on the host system's service database so symbolic names should
# not be relied on.
#
# @auth: the current authentication type used by the server
#
# - 'none' if no authentication is being used
# - 'vnc' if VNC authentication is being used
# - 'vencrypt+plain' if VEncrypt is used with plain text
# authentication
# - 'vencrypt+tls+none' if VEncrypt is used with TLS and no
# authentication
# - 'vencrypt+tls+vnc' if VEncrypt is used with TLS and VNC
# authentication
# - 'vencrypt+tls+plain' if VEncrypt is used with TLS and plain
# text auth
# - 'vencrypt+x509+none' if VEncrypt is used with x509 and no auth
# - 'vencrypt+x509+vnc' if VEncrypt is used with x509 and VNC auth
# - 'vencrypt+x509+plain' if VEncrypt is used with x509 and plain
# text auth
# - 'vencrypt+tls+sasl' if VEncrypt is used with TLS and SASL auth
# - 'vencrypt+x509+sasl' if VEncrypt is used with x509 and SASL
# auth
#
# @clients: a list of @VncClientInfo of all currently connected
# clients
#
# Since: 0.14
##
{ 'struct': 'VncInfo',
'data': {'enabled': 'bool', '*host': 'str',
'*family': 'NetworkAddressFamily',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'*service': 'str', '*auth': 'str', '*clients': ['VncClientInfo']},
'if': 'CONFIG_VNC' }
##
# @VncPrimaryAuth:
#
# vnc primary authentication method.
#
# Since: 2.3
##
{ 'enum': 'VncPrimaryAuth',
'data': [ 'none', 'vnc', 'ra2', 'ra2ne', 'tight', 'ultra',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'tls', 'vencrypt', 'sasl' ],
'if': 'CONFIG_VNC' }
##
# @VncVencryptSubAuth:
#
# vnc sub authentication method with vencrypt.
#
# Since: 2.3
##
{ 'enum': 'VncVencryptSubAuth',
'data': [ 'plain',
'tls-none', 'x509-none',
'tls-vnc', 'x509-vnc',
'tls-plain', 'x509-plain',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'tls-sasl', 'x509-sasl' ],
'if': 'CONFIG_VNC' }
##
# @VncServerInfo2:
#
# The network connection information for server
#
# @auth: The current authentication type used by the servers
#
# @vencrypt: The vencrypt sub authentication type used by the servers,
# only specified in case auth == vencrypt.
#
# Since: 2.9
##
{ 'struct': 'VncServerInfo2',
'base': 'VncBasicInfo',
'data': { 'auth' : 'VncPrimaryAuth',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'*vencrypt' : 'VncVencryptSubAuth' },
'if': 'CONFIG_VNC' }
##
# @VncInfo2:
#
# Information about a vnc server
#
# @id: vnc server name.
#
# @server: A list of @VncBasincInfo describing all listening sockets.
# The list can be empty (in case the vnc server is disabled). It
# also may have multiple entries: normal + websocket, possibly
# also ipv4 + ipv6 in the future.
#
# @clients: A list of @VncClientInfo of all currently connected
# clients. The list can be empty, for obvious reasons.
#
# @auth: The current authentication type used by the non-websockets
# servers
#
# @vencrypt: The vencrypt authentication type used by the servers,
# only specified in case auth == vencrypt.
#
# @display: The display device the vnc server is linked to.
#
# Since: 2.3
##
{ 'struct': 'VncInfo2',
'data': { 'id' : 'str',
'server' : ['VncServerInfo2'],
'clients' : ['VncClientInfo'],
'auth' : 'VncPrimaryAuth',
'*vencrypt' : 'VncVencryptSubAuth',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'*display' : 'str' },
'if': 'CONFIG_VNC' }
##
# @query-vnc:
#
# Returns information about the current VNC server
#
# Returns: @VncInfo
#
# Since: 0.14
#
# .. qmp-example::
#
# -> { "execute": "query-vnc" }
# <- { "return": {
# "enabled":true,
# "host":"0.0.0.0",
# "service":"50402",
# "auth":"vnc",
# "family":"ipv4",
# "clients":[
# {
# "host":"127.0.0.1",
# "service":"50401",
# "family":"ipv4",
# "websocket":false
# }
# ]
# }
# }
##
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
{ 'command': 'query-vnc', 'returns': 'VncInfo',
'if': 'CONFIG_VNC' }
##
# @query-vnc-servers:
#
# Returns a list of vnc servers. The list can be empty.
#
# Returns: a list of @VncInfo2
#
# Since: 2.3
##
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
{ 'command': 'query-vnc-servers', 'returns': ['VncInfo2'],
'if': 'CONFIG_VNC' }
##
# @change-vnc-password:
#
# Change the VNC server password.
#
# @password: the new password to use with VNC authentication
#
# Since: 1.1
#
qapi: convert "Note" sections to plain rST We do not need a dedicated section for notes. By eliminating a specially parsed section, these notes can be treated as normal rST paragraphs in the new QMP reference manual, and can be placed and styled much more flexibly. Convert all existing "Note" and "Notes" sections to pure rST. As part of the conversion, capitalize the first letter of each sentence and add trailing punctuation where appropriate to ensure notes look sensible and consistent in rendered HTML documentation. Markup is also re-aligned to the de-facto standard of 3 spaces for directives. Update docs/devel/qapi-code-gen.rst to reflect the new paradigm, and update the QAPI parser to prohibit "Note" sections while suggesting a new syntax. The exact formatting to use is a matter of taste, but a good candidate is simply: .. note:: lorem ipsum ... ... dolor sit amet ... ... consectetur adipiscing elit ... ... but there are other choices, too. The Sphinx readthedocs theme offers theming for the following forms (capitalization unimportant); all are adorned with a (!) symbol () in the title bar for rendered HTML docs. See https://sphinx-rtd-theme.readthedocs.io/en/stable/demo/demo.html#admonitions for examples of each directive/admonition in use. These are rendered in orange: .. Attention:: ... .. Caution:: ... .. WARNING:: ... These are rendered in red: .. DANGER:: ... .. Error:: ... These are rendered in green: .. Hint:: ... .. Important:: ... .. Tip:: ... These are rendered in blue: .. Note:: ... .. admonition:: custom title admonition body text This patch uses ".. note::" almost everywhere, with just two "caution" directives. Several instances of "Notes:" have been converted to merely ".. note::", or multiple ".. note::" where appropriate. ".. admonition:: notes" is used in a few places where we had an ordered list of multiple notes that would not make sense as standalone/separate admonitions. Two "Note:" following "Example:" have been turned into ordinary paragraphs within the example. NOTE: Because qapidoc.py does not attempt to preserve source ordering of sections, the conversion of Notes from a "tagged section" to an "untagged section" means that rendering order for some notes *may change* as a result of this patch. The forthcoming qapidoc.py rewrite strictly preserves source ordering in the rendered documentation, so this issue will be rectified in the new generator. Signed-off-by: John Snow <jsnow@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> [for block*.json] Message-ID: <20240626222128.406106-11-jsnow@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Commit message clarified slightly, period added to one more note] Signed-off-by: Markus Armbruster <armbru@redhat.com>
2024-06-27 01:21:16 +03:00
# .. note:: An empty password in this command will set the password to
# the empty string. Existing clients are unaffected by executing
# this command.
##
{ 'command': 'change-vnc-password',
'data': { 'password': 'str' },
'if': 'CONFIG_VNC' }
##
# @VNC_CONNECTED:
#
# Emitted when a VNC client establishes a connection
#
# @server: server information
#
# @client: client information
#
# .. note:: This event is emitted before any authentication takes
# place, thus the authentication ID is not provided.
#
# Since: 0.13
#
# .. qmp-example::
#
# <- { "event": "VNC_CONNECTED",
# "data": {
# "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
# "service": "5901", "host": "0.0.0.0" },
# "client": { "family": "ipv4", "service": "58425",
# "host": "127.0.0.1", "websocket": false } },
# "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
##
{ 'event': 'VNC_CONNECTED',
'data': { 'server': 'VncServerInfo',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'client': 'VncBasicInfo' },
'if': 'CONFIG_VNC' }
##
# @VNC_INITIALIZED:
#
# Emitted after authentication takes place (if any) and the VNC
# session is made active
#
# @server: server information
#
# @client: client information
#
# Since: 0.13
#
# .. qmp-example::
#
# <- { "event": "VNC_INITIALIZED",
# "data": {
# "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
# "service": "5901", "host": "0.0.0.0"},
# "client": { "family": "ipv4", "service": "46089", "websocket": false,
# "host": "127.0.0.1", "sasl_username": "luiz" } },
# "timestamp": { "seconds": 1263475302, "microseconds": 150772 } }
##
{ 'event': 'VNC_INITIALIZED',
'data': { 'server': 'VncServerInfo',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'client': 'VncClientInfo' },
'if': 'CONFIG_VNC' }
##
# @VNC_DISCONNECTED:
#
# Emitted when the connection is closed
#
# @server: server information
#
# @client: client information
#
# Since: 0.13
#
# .. qmp-example::
#
# <- { "event": "VNC_DISCONNECTED",
# "data": {
# "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
# "service": "5901", "host": "0.0.0.0" },
# "client": { "family": "ipv4", "service": "58425", "websocket": false,
# "host": "127.0.0.1", "sasl_username": "luiz" } },
# "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
##
{ 'event': 'VNC_DISCONNECTED',
'data': { 'server': 'VncServerInfo',
qapi: add conditions to VNC type/commands/events on the schema Add #if defined(CONFIG_VNC) in generated code, and adjust the qmp/hmp code accordingly. query-qmp-schema no longer reports the command/events etc as available when disabled at compile. Commands made conditional: * query-vnc, query-vnc-servers, change-vnc-password Before the patch, the commands for !CONFIG_VNC are stubs that fail like this: {"error": {"class": "GenericError", "desc": "The feature 'vnc' is not enabled"}} Afterwards, they fail like this: {"error": {"class": "CommandNotFound", "desc": "The command FOO has not been found"}} I call that an improvement, because it lets clients distinguish between command unavailable (class CommandNotFound) and command failed (class GenericError). Events made conditional: * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED HMP change: * info vnc Will return "unknown command: 'info vnc'" when VNC is compiled out (same as error for spice when --disable-spice) Occurrences of VNC (case insensitive) in the schema that aren't covered by this change: * add_client Command has other uses, including "socket bases character devices". These are unconditional as far as I can tell. * set_password, expire_password In theory, these commands could be used for managing any service's password. In practice, they're used for VNC and SPICE services. They're documented for "remote display session" / "remote display server". The service is selected by argument @protocol. The code special-cases protocol-specific argument checking, then calls a protocol-specific function to do the work. If it fails, the command fails with "Could not set password". It does when the service isn't compiled in (it's a stub then). We could make these commands conditional on the conjunction of all services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)], but I doubt it's worthwhile. * change Command has other uses, namely changing media. This patch inlines a stub; no functional change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 18:56:47 +03:00
'client': 'VncClientInfo' },
'if': 'CONFIG_VNC' }
##
# = Input
##
##
# @MouseInfo:
#
# Information about a mouse device.
#
# @name: the name of the mouse device
#
# @index: the index of the mouse device
#
# @current: true if this device is currently receiving mouse events
#
# @absolute: true if this device supports absolute coordinates as
# input
#
# Since: 0.14
##
{ 'struct': 'MouseInfo',
'data': {'name': 'str', 'index': 'int', 'current': 'bool',
'absolute': 'bool'} }
##
# @query-mice:
#
# Returns information about each active mouse device
#
# Returns: a list of @MouseInfo for each device
#
# Since: 0.14
#
# .. qmp-example::
#
# -> { "execute": "query-mice" }
# <- { "return": [
# {
# "name":"QEMU Microsoft Mouse",
# "index":0,
# "current":false,
# "absolute":false
# },
# {
# "name":"QEMU PS/2 Mouse",
# "index":1,
# "current":true,
# "absolute":true
# }
# ]
# }
##
{ 'command': 'query-mice', 'returns': ['MouseInfo'] }
##
# @QKeyCode:
#
# An enumeration of key name.
#
# This is used by the @send-key command.
#
# @unmapped: since 2.0
#
# @pause: since 2.0
#
# @ro: since 2.4
#
# @kp_comma: since 2.4
#
# @kp_equals: since 2.6
#
# @power: since 2.6
#
# @hiragana: since 2.9
#
# @henkan: since 2.9
#
# @yen: since 2.9
#
# @sleep: since 2.10
#
# @wake: since 2.10
#
# @audionext: since 2.10
#
# @audioprev: since 2.10
#
# @audiostop: since 2.10
#
# @audioplay: since 2.10
#
# @audiomute: since 2.10
#
# @volumeup: since 2.10
#
# @volumedown: since 2.10
#
# @mediaselect: since 2.10
#
# @mail: since 2.10
#
# @calculator: since 2.10
#
# @computer: since 2.10
#
# @ac_home: since 2.10
#
# @ac_back: since 2.10
#
# @ac_forward: since 2.10
#
# @ac_refresh: since 2.10
#
# @ac_bookmarks: since 2.10
#
# @muhenkan: since 2.12
#
# @katakanahiragana: since 2.12
#
# @lang1: since 6.1
#
# @lang2: since 6.1
#
# @f13: since 8.0
#
# @f14: since 8.0
#
# @f15: since 8.0
#
# @f16: since 8.0
#
# @f17: since 8.0
#
# @f18: since 8.0
#
# @f19: since 8.0
#
# @f20: since 8.0
#
# @f21: since 8.0
#
# @f22: since 8.0
#
# @f23: since 8.0
#
# @f24: since 8.0
#
# 'sysrq' was mistakenly added to hack around the fact that the ps2
# driver was not generating correct scancodes sequences when
# 'alt+print' was pressed. This flaw is now fixed and the 'sysrq' key
# serves no further purpose. Any further use of 'sysrq' will be
# transparently changed to 'print', so they are effectively synonyms.
#
# Since: 1.3
##
{ 'enum': 'QKeyCode',
qapi: Smarter camel_to_upper() to reduce need for 'prefix' camel_to_upper() converts its argument from camel case to upper case with '_' between words. Used for generated enumeration constant prefixes. When some of the words are spelled all caps, where exactly to insert '_' is guesswork. camel_to_upper()'s guesses are bad enough in places to make people override them with a 'prefix' in the schema. Rewrite it to guess better: 1. Insert '_' after a non-upper case character followed by an upper case character: OneTwo -> ONE_TWO One2Three -> ONE2_THREE 2. Insert '_' before the last upper case character followed by a non-upper case character: ACRONYMWord -> ACRONYM_Word Except at the beginning (as in OneTwo above), or when there is already one: AbCd -> AB_CD This changes the default enumeration constant prefix for a number of enums. Generated enumeration constants change only where the default is not overridden with 'prefix'. The following enumerations without a 'prefix' change: enum old camel_to_upper() new camel_to_upper() ------------------------------------------------------------------ DisplayGLMode DISPLAYGL_MODE DISPLAY_GL_MODE EbpfProgramID EBPF_PROGRAMID EBPF_PROGRAM_ID HmatLBDataType HMATLB_DATA_TYPE HMAT_LB_DATA_TYPE HmatLBMemoryHierarchy HMATLB_MEMORY_HIERARCHY HMAT_LB_MEMORY_HIERARCHY MultiFDCompression MULTIFD_COMPRESSION MULTI_FD_COMPRESSION OffAutoPCIBAR OFF_AUTOPCIBAR OFF_AUTO_PCIBAR QCryptoBlockFormat Q_CRYPTO_BLOCK_FORMAT QCRYPTO_BLOCK_FORMAT QCryptoBlockLUKSKeyslotState Q_CRYPTO_BLOCKLUKS_KEYSLOT_STATE QCRYPTO_BLOCK_LUKS_KEYSLOT_STATE QKeyCode Q_KEY_CODE QKEY_CODE XDbgBlockGraphNodeType X_DBG_BLOCK_GRAPH_NODE_TYPE XDBG_BLOCK_GRAPH_NODE_TYPE TestUnionEnumA TEST_UNION_ENUMA TEST_UNION_ENUM_A Add a 'prefix' so generated code doesn't change now. Subsequent commits will remove most of them again. Two will remain: MULTIFD_COMPRESSION, because migration code generally spells "multifd" that way, and Q_KEY_CODE, because that one is baked into subprojects/keycodemapdb/tools/keymap-gen. The following enumerations with a 'prefix' change so that the prefix is now superfluous: enum old camel_to_upper() new camel_to_upper() [equal to prefix] ------------------------------------------------------------------ BlkdebugIOType BLKDEBUGIO_TYPE BLKDEBUG_IO_TYPE QCryptoTLSCredsEndpoint Q_CRYPTOTLS_CREDS_ENDPOINT QCRYPTO_TLS_CREDS_ENDPOINT QCryptoSecretFormat Q_CRYPTO_SECRET_FORMAT QCRYPTO_SECRET_FORMAT QCryptoCipherMode Q_CRYPTO_CIPHER_MODE QCRYPTO_CIPHER_MODE QCryptodevBackendType Q_CRYPTODEV_BACKEND_TYPE QCRYPTODEV_BACKEND_TYPE QType [builtin] Q_TYPE QTYPE Drop these prefixes. The following enumerations with a 'prefix' change without making the 'prefix' superfluous: enum old camel_to_upper() new camel_to_upper() [equal to prefix] prefix ------------------------------------------------------------------ CpuS390Entitlement CPUS390_ENTITLEMENT CPU_S390_ENTITLEMENT S390_CPU_ENTITLEMENT CpuS390Polarization CPUS390_POLARIZATION CPU_S390_POLARIZATION S390_CPU_POLARIZATION CpuS390State CPUS390_STATE CPU_S390_STATE S390_CPU_STATE QAuthZListFormat Q_AUTHZ_LIST_FORMAT QAUTH_Z_LIST_FORMAT QAUTHZ_LIST_FORMAT QAuthZListPolicy Q_AUTHZ_LIST_POLICY QAUTH_Z_LIST_POLICY QAUTHZ_LIST_POLICY QCryptoAkCipherAlgorithm Q_CRYPTO_AK_CIPHER_ALGORITHM QCRYPTO_AK_CIPHER_ALGORITHM QCRYPTO_AKCIPHER_ALG QCryptoAkCipherKeyType Q_CRYPTO_AK_CIPHER_KEY_TYPE QCRYPTO_AK_CIPHER_KEY_TYPE QCRYPTO_AKCIPHER_KEY_TYPE QCryptoCipherAlgorithm Q_CRYPTO_CIPHER_ALGORITHM QCRYPTO_CIPHER_ALGORITHM QCRYPTO_CIPHER_ALG QCryptoHashAlgorithm Q_CRYPTO_HASH_ALGORITHM QCRYPTO_HASH_ALGORITHM QCRYPTO_HASH_ALG QCryptoIVGenAlgorithm Q_CRYPTOIV_GEN_ALGORITHM QCRYPTO_IV_GEN_ALGORITHM QCRYPTO_IVGEN_ALG QCryptoRSAPaddingAlgorithm Q_CRYPTORSA_PADDING_ALGORITHM QCRYPTO_RSA_PADDING_ALGORITHM QCRYPTO_RSA_PADDING_ALG QCryptodevBackendAlgType Q_CRYPTODEV_BACKEND_ALG_TYPE QCRYPTODEV_BACKEND_ALG_TYPE QCRYPTODEV_BACKEND_ALG QCryptodevBackendServiceType Q_CRYPTODEV_BACKEND_SERVICE_TYPE QCRYPTODEV_BACKEND_SERVICE_TYPE QCRYPTODEV_BACKEND_SERVICE Subsequent commits will tweak things to remove most of these prefixes. Only QAUTHZ_LIST_FORMAT and QAUTHZ_LIST_POLICY will remain. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <20240904111836.3273842-2-armbru@redhat.com>
2024-09-04 14:18:18 +03:00
'prefix': 'Q_KEY_CODE',
'data': [ 'unmapped',
'shift', 'shift_r', 'alt', 'alt_r', 'ctrl',
'ctrl_r', 'menu', 'esc', '1', '2', '3', '4', '5', '6', '7', '8',
'9', '0', 'minus', 'equal', 'backspace', 'tab', 'q', 'w', 'e',
'r', 't', 'y', 'u', 'i', 'o', 'p', 'bracket_left', 'bracket_right',
'ret', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'semicolon',
'apostrophe', 'grave_accent', 'backslash', 'z', 'x', 'c', 'v', 'b',
'n', 'm', 'comma', 'dot', 'slash', 'asterisk', 'spc', 'caps_lock',
'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10',
'num_lock', 'scroll_lock', 'kp_divide', 'kp_multiply',
'kp_subtract', 'kp_add', 'kp_enter', 'kp_decimal', 'sysrq', 'kp_0',
'kp_1', 'kp_2', 'kp_3', 'kp_4', 'kp_5', 'kp_6', 'kp_7', 'kp_8',
'kp_9', 'less', 'f11', 'f12', 'print', 'home', 'pgup', 'pgdn', 'end',
'left', 'up', 'down', 'right', 'insert', 'delete', 'stop', 'again',
'props', 'undo', 'front', 'copy', 'open', 'paste', 'find', 'cut',
'lf', 'help', 'meta_l', 'meta_r', 'compose', 'pause',
'ro', 'hiragana', 'henkan', 'yen', 'muhenkan', 'katakanahiragana',
'kp_comma', 'kp_equals', 'power', 'sleep', 'wake',
'audionext', 'audioprev', 'audiostop', 'audioplay', 'audiomute',
'volumeup', 'volumedown', 'mediaselect',
'mail', 'calculator', 'computer',
'ac_home', 'ac_back', 'ac_forward', 'ac_refresh', 'ac_bookmarks',
'lang1', 'lang2','f13','f14','f15','f16','f17','f18','f19','f20','f21','f22','f23','f24' ] }
##
# @KeyValueKind:
#
# Since: 1.3
##
{ 'enum': 'KeyValueKind',
'data': [ 'number', 'qcode' ] }
##
# @IntWrapper:
#
# @data: a numeric key code
#
# Since: 1.3
##
{ 'struct': 'IntWrapper',
'data': { 'data': 'int' } }
##
# @QKeyCodeWrapper:
#
# @data: An enumeration of key name
#
# Since: 1.3
##
{ 'struct': 'QKeyCodeWrapper',
'data': { 'data': 'QKeyCode' } }
##
# @KeyValue:
#
# Represents a keyboard key.
#
# @type: key encoding
#
# Since: 1.3
##
{ 'union': 'KeyValue',
'base': { 'type': 'KeyValueKind' },
'discriminator': 'type',
'data': {
'number': 'IntWrapper',
'qcode': 'QKeyCodeWrapper' } }
##
# @send-key:
#
# Send keys to guest.
#
# @keys: An array of @KeyValue elements. All @KeyValues in this array
# are simultaneously sent to the guest. A @KeyValue.number value
# is sent directly to the guest, while @KeyValue.qcode must be a
# valid @QKeyCode value
#
# @hold-time: time to delay key up events, milliseconds. Defaults to
# 100
#
# Errors:
# - If key is unknown or redundant, GenericError
#
# Since: 1.3
#
# .. qmp-example::
#
# -> { "execute": "send-key",
# "arguments": { "keys": [ { "type": "qcode", "data": "ctrl" },
# { "type": "qcode", "data": "alt" },
# { "type": "qcode", "data": "delete" } ] } }
# <- { "return": {} }
##
{ 'command': 'send-key',
'data': { 'keys': ['KeyValue'], '*hold-time': 'int' } }
##
# @InputButton:
#
# Button of a pointer input device (mouse, tablet).
#
# @side: front side button of a 5-button mouse (since 2.9)
#
# @extra: rear side button of a 5-button mouse (since 2.9)
#
# @touch: screen contact on a multi-touch device (since 8.1)
#
# Since: 2.0
##
{ 'enum' : 'InputButton',
'data' : [ 'left', 'middle', 'right', 'wheel-up', 'wheel-down', 'side',
'extra', 'wheel-left', 'wheel-right', 'touch' ] }
##
# @InputAxis:
#
# Position axis of a pointer input device (mouse, tablet).
#
# Since: 2.0
##
{ 'enum' : 'InputAxis',
'data' : [ 'x', 'y' ] }
##
# @InputMultiTouchType:
#
# Type of a multi-touch event.
#
# @begin: A new touch event sequence has just started.
#
# @update: A touch event sequence has been updated.
#
# @end: A touch event sequence has finished.
#
# @cancel: A touch event sequence has been canceled.
#
# @data: Absolute position data.
#
# Since: 8.1
##
{ 'enum' : 'InputMultiTouchType',
'data' : [ 'begin', 'update', 'end', 'cancel', 'data' ] }
##
# @InputKeyEvent:
#
# Keyboard input event.
#
# @key: Which key this event is for.
#
# @down: True for key-down and false for key-up events.
#
# Since: 2.0
##
{ 'struct' : 'InputKeyEvent',
'data' : { 'key' : 'KeyValue',
'down' : 'bool' } }
##
# @InputBtnEvent:
#
# Pointer button input event.
#
# @button: Which button this event is for.
#
# @down: True for key-down and false for key-up events.
#
# Since: 2.0
##
{ 'struct' : 'InputBtnEvent',
'data' : { 'button' : 'InputButton',
'down' : 'bool' } }
##
# @InputMoveEvent:
#
# Pointer motion input event.
#
# @axis: Which axis is referenced by @value.
#
# @value: Pointer position. For absolute coordinates the valid range
# is 0 -> 0x7ffff
#
# Since: 2.0
##
{ 'struct' : 'InputMoveEvent',
'data' : { 'axis' : 'InputAxis',
'value' : 'int' } }
##
# @InputMultiTouchEvent:
#
# MultiTouch input event.
#
# @type: The type of multi-touch event.
#
# @slot: Which slot has generated the event.
#
# @tracking-id: ID to correlate this event with previously generated
# events.
#
# @axis: Which axis is referenced by @value.
#
# @value: Contact position.
#
# Since: 8.1
##
{ 'struct' : 'InputMultiTouchEvent',
'data' : { 'type' : 'InputMultiTouchType',
'slot' : 'int',
'tracking-id': 'int',
'axis' : 'InputAxis',
'value' : 'int' } }
##
# @InputEventKind:
#
# @key: a keyboard input event
#
# @btn: a pointer button input event
#
# @rel: a relative pointer motion input event
#
# @abs: an absolute pointer motion input event
#
# @mtt: a multi-touch input event
#
# Since: 2.0
##
{ 'enum': 'InputEventKind',
'data': [ 'key', 'btn', 'rel', 'abs', 'mtt' ] }
##
# @InputKeyEventWrapper:
#
# @data: Keyboard input event
#
# Since: 2.0
##
{ 'struct': 'InputKeyEventWrapper',
'data': { 'data': 'InputKeyEvent' } }
##
# @InputBtnEventWrapper:
#
# @data: Pointer button input event
#
# Since: 2.0
##
{ 'struct': 'InputBtnEventWrapper',
'data': { 'data': 'InputBtnEvent' } }
##
# @InputMoveEventWrapper:
#
# @data: Pointer motion input event
#
# Since: 2.0
##
{ 'struct': 'InputMoveEventWrapper',
'data': { 'data': 'InputMoveEvent' } }
##
# @InputMultiTouchEventWrapper:
#
# @data: MultiTouch input event
#
# Since: 8.1
##
{ 'struct': 'InputMultiTouchEventWrapper',
'data': { 'data': 'InputMultiTouchEvent' } }
##
# @InputEvent:
#
# Input event union.
#
# @type: the type of input event
#
# Since: 2.0
##
{ 'union' : 'InputEvent',
'base': { 'type': 'InputEventKind' },
'discriminator': 'type',
'data' : { 'key' : 'InputKeyEventWrapper',
'btn' : 'InputBtnEventWrapper',
'rel' : 'InputMoveEventWrapper',
'abs' : 'InputMoveEventWrapper',
'mtt' : 'InputMultiTouchEventWrapper' } }
##
# @input-send-event:
#
# Send input event(s) to guest.
#
# The @device and @head parameters can be used to send the input event
# to specific input devices in case (a) multiple input devices of the
# same kind are added to the virtual machine and (b) you have
# configured input routing (see docs/multiseat.txt) for those input
# devices. The parameters work exactly like the device and head
# properties of input devices. If @device is missing, only devices
# that have no input routing config are admissible. If @device is
# specified, both input devices with and without input routing config
# are admissible, but devices with input routing config take
# precedence.
#
# @device: display device to send event(s) to.
#
# @head: head to send event(s) to, in case the display device supports
# multiple scanouts.
#
# @events: List of InputEvent union.
#
# Since: 2.6
#
qapi: convert "Note" sections to plain rST We do not need a dedicated section for notes. By eliminating a specially parsed section, these notes can be treated as normal rST paragraphs in the new QMP reference manual, and can be placed and styled much more flexibly. Convert all existing "Note" and "Notes" sections to pure rST. As part of the conversion, capitalize the first letter of each sentence and add trailing punctuation where appropriate to ensure notes look sensible and consistent in rendered HTML documentation. Markup is also re-aligned to the de-facto standard of 3 spaces for directives. Update docs/devel/qapi-code-gen.rst to reflect the new paradigm, and update the QAPI parser to prohibit "Note" sections while suggesting a new syntax. The exact formatting to use is a matter of taste, but a good candidate is simply: .. note:: lorem ipsum ... ... dolor sit amet ... ... consectetur adipiscing elit ... ... but there are other choices, too. The Sphinx readthedocs theme offers theming for the following forms (capitalization unimportant); all are adorned with a (!) symbol () in the title bar for rendered HTML docs. See https://sphinx-rtd-theme.readthedocs.io/en/stable/demo/demo.html#admonitions for examples of each directive/admonition in use. These are rendered in orange: .. Attention:: ... .. Caution:: ... .. WARNING:: ... These are rendered in red: .. DANGER:: ... .. Error:: ... These are rendered in green: .. Hint:: ... .. Important:: ... .. Tip:: ... These are rendered in blue: .. Note:: ... .. admonition:: custom title admonition body text This patch uses ".. note::" almost everywhere, with just two "caution" directives. Several instances of "Notes:" have been converted to merely ".. note::", or multiple ".. note::" where appropriate. ".. admonition:: notes" is used in a few places where we had an ordered list of multiple notes that would not make sense as standalone/separate admonitions. Two "Note:" following "Example:" have been turned into ordinary paragraphs within the example. NOTE: Because qapidoc.py does not attempt to preserve source ordering of sections, the conversion of Notes from a "tagged section" to an "untagged section" means that rendering order for some notes *may change* as a result of this patch. The forthcoming qapidoc.py rewrite strictly preserves source ordering in the rendered documentation, so this issue will be rectified in the new generator. Signed-off-by: John Snow <jsnow@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> [for block*.json] Message-ID: <20240626222128.406106-11-jsnow@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Commit message clarified slightly, period added to one more note] Signed-off-by: Markus Armbruster <armbru@redhat.com>
2024-06-27 01:21:16 +03:00
# .. note:: The consoles are visible in the qom tree, under
# ``/backend/console[$index]``. They have a device link and head
qapi: convert "Note" sections to plain rST We do not need a dedicated section for notes. By eliminating a specially parsed section, these notes can be treated as normal rST paragraphs in the new QMP reference manual, and can be placed and styled much more flexibly. Convert all existing "Note" and "Notes" sections to pure rST. As part of the conversion, capitalize the first letter of each sentence and add trailing punctuation where appropriate to ensure notes look sensible and consistent in rendered HTML documentation. Markup is also re-aligned to the de-facto standard of 3 spaces for directives. Update docs/devel/qapi-code-gen.rst to reflect the new paradigm, and update the QAPI parser to prohibit "Note" sections while suggesting a new syntax. The exact formatting to use is a matter of taste, but a good candidate is simply: .. note:: lorem ipsum ... ... dolor sit amet ... ... consectetur adipiscing elit ... ... but there are other choices, too. The Sphinx readthedocs theme offers theming for the following forms (capitalization unimportant); all are adorned with a (!) symbol () in the title bar for rendered HTML docs. See https://sphinx-rtd-theme.readthedocs.io/en/stable/demo/demo.html#admonitions for examples of each directive/admonition in use. These are rendered in orange: .. Attention:: ... .. Caution:: ... .. WARNING:: ... These are rendered in red: .. DANGER:: ... .. Error:: ... These are rendered in green: .. Hint:: ... .. Important:: ... .. Tip:: ... These are rendered in blue: .. Note:: ... .. admonition:: custom title admonition body text This patch uses ".. note::" almost everywhere, with just two "caution" directives. Several instances of "Notes:" have been converted to merely ".. note::", or multiple ".. note::" where appropriate. ".. admonition:: notes" is used in a few places where we had an ordered list of multiple notes that would not make sense as standalone/separate admonitions. Two "Note:" following "Example:" have been turned into ordinary paragraphs within the example. NOTE: Because qapidoc.py does not attempt to preserve source ordering of sections, the conversion of Notes from a "tagged section" to an "untagged section" means that rendering order for some notes *may change* as a result of this patch. The forthcoming qapidoc.py rewrite strictly preserves source ordering in the rendered documentation, so this issue will be rectified in the new generator. Signed-off-by: John Snow <jsnow@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> [for block*.json] Message-ID: <20240626222128.406106-11-jsnow@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Commit message clarified slightly, period added to one more note] Signed-off-by: Markus Armbruster <armbru@redhat.com>
2024-06-27 01:21:16 +03:00
# property, so it is possible to map which console belongs to which
# device and display.
#
# .. qmp-example::
# :title: Press left mouse button
#
# -> { "execute": "input-send-event",
# "arguments": { "device": "video0",
# "events": [ { "type": "btn",
# "data" : { "down": true, "button": "left" } } ] } }
# <- { "return": {} }
#
# -> { "execute": "input-send-event",
# "arguments": { "device": "video0",
# "events": [ { "type": "btn",
# "data" : { "down": false, "button": "left" } } ] } }
# <- { "return": {} }
#
# .. qmp-example::
# :title: Press ctrl-alt-del
#
# -> { "execute": "input-send-event",
# "arguments": { "events": [
# { "type": "key", "data" : { "down": true,
# "key": {"type": "qcode", "data": "ctrl" } } },
# { "type": "key", "data" : { "down": true,
# "key": {"type": "qcode", "data": "alt" } } },
# { "type": "key", "data" : { "down": true,
# "key": {"type": "qcode", "data": "delete" } } } ] } }
# <- { "return": {} }
#
# .. qmp-example::
# :title: Move mouse pointer to absolute coordinates
#
# -> { "execute": "input-send-event" ,
# "arguments": { "events": [
# { "type": "abs", "data" : { "axis": "x", "value" : 20000 } },
# { "type": "abs", "data" : { "axis": "y", "value" : 400 } } ] } }
# <- { "return": {} }
##
{ 'command': 'input-send-event',
'data': { '*device': 'str',
'*head' : 'int',
'events' : [ 'InputEvent' ] } }
##
# @DisplayGTK:
#
# GTK display options.
#
# @grab-on-hover: Grab keyboard input on mouse hover.
#
# @zoom-to-fit: Zoom guest display to fit into the host window. When
# turned off the host window will be resized instead. In case the
# display device can notify the guest on window resizes
# (virtio-gpu) this will default to "on", assuming the guest will
# resize the display to match the window size then. Otherwise it
# defaults to "off". (Since 3.1)
#
# @show-tabs: Display the tab bar for switching between the various
# graphical interfaces (e.g. VGA and virtual console character
# devices) by default. (Since 7.1)
#
# @show-menubar: Display the main window menubar. Defaults to "on".
# (Since 8.0)
#
# Since: 2.12
##
{ 'struct' : 'DisplayGTK',
'data' : { '*grab-on-hover' : 'bool',
'*zoom-to-fit' : 'bool',
'*show-tabs' : 'bool',
'*show-menubar' : 'bool' } }
##
# @DisplayEGLHeadless:
#
# EGL headless display options.
#
# @rendernode: Which DRM render node should be used. Default is the
# first available node on the host.
#
# Since: 3.1
##
{ 'struct' : 'DisplayEGLHeadless',
'data' : { '*rendernode' : 'str' } }
##
# @DisplayDBus:
#
# DBus display options.
#
# @addr: The D-Bus bus address (default to the session bus).
#
# @rendernode: Which DRM render node should be used. Default is the
# first available node on the host.
#
# @p2p: Whether to use peer-to-peer connections (accepted through
# @add_client).
#
# @audiodev: Use the specified DBus audiodev to export audio.
#
# Since: 7.0
##
{ 'struct' : 'DisplayDBus',
'data' : { '*rendernode' : 'str',
'*addr': 'str',
'*p2p': 'bool',
'*audiodev': 'str' } }
##
# @DisplayGLMode:
#
# Display OpenGL mode.
#
# @off: Disable OpenGL (default).
#
# @on: Use OpenGL, pick context type automatically. Would better be
# named 'auto' but is called 'on' for backward compatibility with
# bool type.
#
# @core: Use OpenGL with Core (desktop) Context.
#
# @es: Use OpenGL with ES (embedded systems) Context.
#
# Since: 3.0
##
{ 'enum' : 'DisplayGLMode',
'data' : [ 'off', 'on', 'core', 'es' ] }
##
# @DisplayCurses:
#
# Curses display options.
#
# @charset: Font charset used by guest (default: CP437).
#
# Since: 4.0
##
{ 'struct' : 'DisplayCurses',
'data' : { '*charset' : 'str' } }
##
# @DisplayCocoa:
#
# Cocoa display options.
#
# @left-command-key: Enable/disable forwarding of left command key to
# guest. Allows command-tab window switching on the host without
# sending this key to the guest when "off". Defaults to "on"
#
# @full-grab: Capture all key presses, including system combos. This
# requires accessibility permissions, since it performs a global
# grab on key events. (default: off) See
# https://support.apple.com/en-in/guide/mac-help/mh32356/mac
#
# @swap-opt-cmd: Swap the Option and Command keys so that their key
# codes match their position on non-Mac keyboards and you can use
# Meta/Super and Alt where you expect them. (default: off)
#
# @zoom-to-fit: Zoom guest display to fit into the host window. When
# turned off the host window will be resized instead. Defaults to
# "off". (Since 8.2)
#
# @zoom-interpolation: Apply interpolation to smooth output when
# zoom-to-fit is enabled. Defaults to "off". (Since 9.0)
#
# Since: 7.0
##
{ 'struct': 'DisplayCocoa',
'data': {
'*left-command-key': 'bool',
'*full-grab': 'bool',
'*swap-opt-cmd': 'bool',
'*zoom-to-fit': 'bool',
'*zoom-interpolation': 'bool'
} }
##
# @HotKeyMod:
#
# Set of modifier keys that need to be held for shortcut key actions.
#
# Since: 7.1
##
{ 'enum' : 'HotKeyMod',
'data' : [ 'lctrl-lalt', 'lshift-lctrl-lalt', 'rctrl' ] }
##
# @DisplaySDL:
#
# SDL2 display options.
#
# @grab-mod: Modifier keys that should be pressed together with the
# "G" key to release the mouse grab.
#
# Since: 7.1
##
{ 'struct' : 'DisplaySDL',
'data' : { '*grab-mod' : 'HotKeyMod' } }
##
# @DisplayType:
#
# Display (user interface) type.
#
# @default: The default user interface, selecting from the first
# available of gtk, sdl, cocoa, and vnc.
#
# @none: No user interface or video output display. The guest will
# still see an emulated graphics card, but its output will not be
# displayed to the QEMU user.
#
# @gtk: The GTK user interface.
#
# @sdl: The SDL user interface.
#
# @egl-headless: No user interface, offload GL operations to a local
# DRI device. Graphical display need to be paired with VNC or
# Spice. (Since 3.1)
#
# @curses: Display video output via curses. For graphics device
# models which support a text mode, QEMU can display this output
# using a curses/ncurses interface. Nothing is displayed when the
# graphics device is in graphical mode or if the graphics device
# does not support a text mode. Generally only the VGA device
# models support text mode.
#
# @cocoa: The Cocoa user interface.
#
# @spice-app: Set up a Spice server and run the default associated
# application to connect to it. The server will redirect the
# serial console and QEMU monitors. (Since 4.0)
#
# @dbus: Start a D-Bus service for the display. (Since 7.0)
#
# Since: 2.12
##
{ 'enum' : 'DisplayType',
'data' : [
{ 'name': 'default' },
{ 'name': 'none' },
{ 'name': 'gtk', 'if': 'CONFIG_GTK' },
{ 'name': 'sdl', 'if': 'CONFIG_SDL' },
{ 'name': 'egl-headless', 'if': 'CONFIG_OPENGL' },
{ 'name': 'curses', 'if': 'CONFIG_CURSES' },
{ 'name': 'cocoa', 'if': 'CONFIG_COCOA' },
{ 'name': 'spice-app', 'if': 'CONFIG_SPICE' },
{ 'name': 'dbus', 'if': 'CONFIG_DBUS_DISPLAY' }
]
}
##
# @DisplayOptions:
#
# Display (user interface) options.
#
# @type: Which DisplayType qemu should use.
#
# @full-screen: Start user interface in fullscreen mode
# (default: off).
#
# @window-close: Allow to quit qemu with window close button
# (default: on).
#
# @show-cursor: Force showing the mouse cursor (default: off).
# (since: 5.0)
#
# @gl: Enable OpenGL support (default: off).
#
# Since: 2.12
##
{ 'union' : 'DisplayOptions',
'base' : { 'type' : 'DisplayType',
'*full-screen' : 'bool',
'*window-close' : 'bool',
'*show-cursor' : 'bool',
'*gl' : 'DisplayGLMode' },
'discriminator' : 'type',
'data' : {
'gtk': { 'type': 'DisplayGTK', 'if': 'CONFIG_GTK' },
'cocoa': { 'type': 'DisplayCocoa', 'if': 'CONFIG_COCOA' },
'curses': { 'type': 'DisplayCurses', 'if': 'CONFIG_CURSES' },
'egl-headless': { 'type': 'DisplayEGLHeadless',
'if': 'CONFIG_OPENGL' },
'dbus': { 'type': 'DisplayDBus', 'if': 'CONFIG_DBUS_DISPLAY' },
'sdl': { 'type': 'DisplaySDL', 'if': 'CONFIG_SDL' }
}
}
##
# @query-display-options:
#
# Returns information about display configuration
#
# Returns: @DisplayOptions
#
# Since: 3.1
##
{ 'command': 'query-display-options',
'returns': 'DisplayOptions' }
##
# @DisplayReloadType:
#
# Available DisplayReload types.
#
# @vnc: VNC display
#
# Since: 6.0
##
{ 'enum': 'DisplayReloadType',
'data': ['vnc'] }
##
# @DisplayReloadOptionsVNC:
#
# Specify the VNC reload options.
#
# @tls-certs: reload tls certs or not.
#
# Since: 6.0
##
{ 'struct': 'DisplayReloadOptionsVNC',
'data': { '*tls-certs': 'bool' } }
##
# @DisplayReloadOptions:
#
# Options of the display configuration reload.
#
# @type: Specify the display type.
#
# Since: 6.0
##
{ 'union': 'DisplayReloadOptions',
'base': {'type': 'DisplayReloadType'},
'discriminator': 'type',
'data': { 'vnc': 'DisplayReloadOptionsVNC' } }
##
# @display-reload:
#
# Reload display configuration.
#
# Since: 6.0
#
# .. qmp-example::
#
# -> { "execute": "display-reload",
# "arguments": { "type": "vnc", "tls-certs": true } }
# <- { "return": {} }
##
{ 'command': 'display-reload',
'data': 'DisplayReloadOptions',
'boxed' : true }
##
# @DisplayUpdateType:
#
# Available DisplayUpdate types.
#
# @vnc: VNC display
#
# Since: 7.1
##
{ 'enum': 'DisplayUpdateType',
'data': ['vnc'] }
##
# @DisplayUpdateOptionsVNC:
#
# Specify the VNC reload options.
#
# @addresses: If specified, change set of addresses to listen for
# connections. Addresses configured for websockets are not
# touched.
#
# Since: 7.1
##
{ 'struct': 'DisplayUpdateOptionsVNC',
'data': { '*addresses': ['SocketAddress'] } }
##
# @DisplayUpdateOptions:
#
# Options of the display configuration reload.
#
# @type: Specify the display type.
#
# Since: 7.1
##
{ 'union': 'DisplayUpdateOptions',
'base': {'type': 'DisplayUpdateType'},
'discriminator': 'type',
'data': { 'vnc': 'DisplayUpdateOptionsVNC' } }
##
# @display-update:
#
# Update display configuration.
#
# Since: 7.1
#
# .. qmp-example::
#
# -> { "execute": "display-update",
# "arguments": { "type": "vnc", "addresses":
# [ { "type": "inet", "host": "0.0.0.0",
# "port": "5901" } ] } }
# <- { "return": {} }
##
{ 'command': 'display-update',
'data': 'DisplayUpdateOptions',
'boxed' : true }
##
# @client_migrate_info:
#
# Set migration information for remote display. This makes the server
# ask the client to automatically reconnect using the new parameters
# once migration finished successfully. Only implemented for SPICE.
#
# @protocol: must be "spice"
#
# @hostname: migration target hostname
#
# @port: spice tcp port for plaintext channels
#
# @tls-port: spice tcp port for tls-secured channels
#
# @cert-subject: server certificate subject
#
# Since: 0.14
#
# .. qmp-example::
#
# -> { "execute": "client_migrate_info",
# "arguments": { "protocol": "spice",
# "hostname": "virt42.lab.kraxel.org",
# "port": 1234 } }
# <- { "return": {} }
##
{ 'command': 'client_migrate_info',
'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
'*tls-port': 'int', '*cert-subject': 'str' } }