diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 84358c1284a634fc7965d6e8011b8d181118cbb6..2d09e6e8d38f3773f7b0df3bc3c82989f838eae2 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -2268,6 +2268,28 @@ error: } +static char *qemuBuildUSBInputDevStr(virDomainInputDefPtr dev) +{ + virBuffer buf = VIR_BUFFER_INITIALIZER; + + virBufferVSprintf(&buf, "%s", + dev->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ? + "usb-mouse" : "usb-tablet"); + virBufferVSprintf(&buf, ",id=%s", dev->info.alias); + + if (virBufferError(&buf)) { + virReportOOMError(NULL); + goto error; + } + + return virBufferContentAndReset(&buf); + +error: + virBufferFreeAndReset(&buf); + return NULL; +} + + static char * qemuBuildSoundDevStr(virDomainSoundDefPtr sound) { @@ -3274,8 +3296,16 @@ int qemudBuildCommandLine(virConnectPtr conn, virDomainInputDefPtr input = def->inputs[i]; if (input->bus == VIR_DOMAIN_INPUT_BUS_USB) { - ADD_ARG_LIT("-usbdevice"); - ADD_ARG_LIT(input->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ? "mouse" : "tablet"); + if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + char *optstr; + ADD_ARG_LIT("-device"); + if (!(optstr = qemuBuildUSBInputDevStr(input))) + goto error; + ADD_ARG(optstr); + } else { + ADD_ARG_LIT("-usbdevice"); + ADD_ARG_LIT(input->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ? "mouse" : "tablet"); + } } }