Resolvi o problema e postei a resposta aqui para a posteridade, se outra pessoa tiver o mesmo problema. Meu host é linux e janelas de convidados.
O QEMU é iniciado com -qmp tcp:192.168.0.10:4444,server,nowait
para permitir que o acesso telnet seja monitorado. Para vincular os dispositivos desejados no lançamento, adicione -device usb-host,productid=12850,id="FancyKeyboard" -device usb-host,productid=64,id="FancyMouse"
à linha de comando. Observe que -device,productid=
quer o ID decimal, portanto, você precisa converter o hexadecimal obtido de lsusb
ou semelhante ao decimal primeiro. a parte ,id=
é para facilitar a desvinculação e pode ser qualquer string única.
Para ligá-los em tempo de execução a partir do host, eu corro um script que chamo de _kvm_bind com
echo '{ "execute": "qmp_capabilities" }'
echo '{ "execute": "device_add", "arguments": { "driver": "usb-host","productid": "12850","id": "FancyKeyboard" }}'
echo '{ "execute": "device_add", "arguments": { "driver": "usb-host","productid": "64","id": "FancyMouse" }}'
E canalize a saída para o monitor com netcat do nmap : %código% Eu estou correndo de outro script. ncat é inteligente e sai da sessão de telnet automagicamente após o EOF.
A vinculação de convidado é semelhante e eu instalei o pacote de linha de comando do nmap também para o convidado. O arquivo _kvm_bind.bat é o seguinte:
@echo off
echo { "execute": "qmp_capabilities" } & echo.
choice /T 1 /D y > nul
echo { "execute": "device_add", "arguments": { "driver": "usb-host","productid": "12850","id": "FancyKeyboard" }} & echo.
choice /T 1 /D y > nul
echo { "execute": "device_add", "arguments": { "driver": "usb-host","productid": "64","id": "FancyMouse" }} & echo.
_kvm_bind|ncat 192.168.0.10 4444
está lá para facilitar um segundo atraso entre os comandos apenas no caso. Não tenho certeza se choice
é realmente necessário, não tentei isso sem ele. Apenas mostra um texto em branco entre os comandos. Provavelmente não é necessário.
O piping é semelhante à versão do linux:
@echo off
_kvm_bind.bat|ncat 192.168.0.10 4444
Desassociar é semelhante à ligação, basta trocar a segunda e a terceira linha para & echo.
e argumentar com o device_del
que você forneceu quando vinculou antes:
echo '{ "execute": "qmp_capabilities" }'
echo '{ "execute": "device_del", "arguments": { "id":"FancyMouse" }}'
echo '{ "execute": "device_del", "arguments": { "id":"FancyKeyboard" }}'
Como eu disse na pergunta, eu corro o Synergy para compartilhar o mouse e o teclado entre o convidado e o host e ambos têm um monitor próprio. Eu não preciso desligar Synergy na ligação e funciona bem depois de desvincular. Apesar de tudo, estou feliz com isso por enquanto.