@@ -253,9 +253,9 @@ ETEXI
{
.name = "screendump",
- .args_type = "filename:F",
- .params = "filename",
- .help = "save screen into PPM image 'filename'",
+ .args_type = "filename:F,id:s?",
+ .params = "filename [id]",
+ .help = "save screen from device 'id' into PPM image 'filename'",
.cmd = hmp_screendump,
},
@@ -2132,9 +2132,10 @@ err_out:
void hmp_screendump(Monitor *mon, const QDict *qdict)
{
const char *filename = qdict_get_str(qdict, "filename");
+ const char *id = qdict_get_try_str(qdict, "id");
Error *err = NULL;
- qmp_screendump(filename, &err);
+ qmp_screendump(filename, id != NULL, id, &err);
hmp_handle_error(mon, &err);
}
@@ -77,6 +77,8 @@
#
# @filename: the path of a new PPM file to store the image
#
+# @id: ID of the display device that should be used (since 2.12)
+#
# Returns: Nothing on success
#
# Since: 0.14.0
@@ -88,7 +90,7 @@
# <- { "return": {} }
#
##
-{ 'command': 'screendump', 'data': {'filename': 'str'} }
+{ 'command': 'screendump', 'data': {'filename': 'str', '*id': 'str'} }
##
# == Spice
@@ -344,10 +344,24 @@ write_err:
goto out;
}
-void qmp_screendump(const char *filename, Error **errp)
+void qmp_screendump(const char *filename, bool has_id, const char *id,
+ Error **errp)
{
QemuConsole *con = qemu_console_lookup_by_index(0);
DisplaySurface *surface;
+ DeviceState *dev;
+
+ if (has_id) {
+ dev = qdev_find_recursive(sysbus_get_default(), id);
+ if (!dev) {
+ error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
+ "Device '%s' not found", id);
+ return;
+ }
+ con = qemu_console_lookup_by_device(dev, 0);
+ } else {
+ con = qemu_console_lookup_by_index(0);
+ }
if (con == NULL) {
error_setg(errp, "There is no QemuConsole I can screendump from.");
QEMU's screendump command can only take dumps from the primary display. When using multiple VGA cards, there is no way to get a dump from a secondary card yet. So let's add an 'id' parameter to the HMP and QMP commands to be able to specify alternative devices with the screendump command, too. Signed-off-by: Thomas Huth <thuth@redhat.com> --- hmp-commands.hx | 6 +++--- hmp.c | 3 ++- qapi/ui.json | 4 +++- ui/console.c | 16 +++++++++++++++- 4 files changed, 23 insertions(+), 6 deletions(-)