1

Я использую виртуализированную платформу Win8 (игровую) под Linux. Я использую Synergy для совместной работы с клавиатурой и мышью, но иногда мне нужно передавать USB-устройства. ГПУ передается гостю, и я не могу получить доступ к монитору QEMU от гостя.

Проблема в том, что я не могу освободить указанные устройства без выключения гостя. Я хотел бы передать команды usb_add host:bus.addr и usb_del bus.addr на лету, чтобы я мог подключать и отключать устройства по мере необходимости. Красота была бы в том, что я могу держать Synergy включенным все время и блокировать устройства только для гостей, когда они мне нужны. Я должен добавить, что встроенная блокировка Synergy через lockCursorToScreen(toggle) не работает достаточно надежно.

Я не слишком знаком с QMP, но могу настроить сервер telnet для размещения с параметром -qmp tcp:192.168.0.10:4444,server,nowait опция командной строки nowait . Я не знаю, как передать три команды через Telnet и выйти из Windows.

Другим вариантом может быть установка сокета для монитора QEMU с -qmp unix:/path/to/socket,server . Тогда я полагаю, что я бы SSH к хосту, чтобы взаимодействовать с монитором. Я тоже не уверен, как это автоматизировать. Запустить шеллскрипт на хосте из командной строки SSH?

SSH более безопасен, но я доверяю машинам в этой частной сети, так что это не большая проблема.

TL; DR: мне нужен способ передать команды на запуск QEMU от гостя. Telnet и сокет (возможно, доступны через SSH) возможны, но не знают, как автоматизировать. Другие решения приветствуются.

1 ответ1

1

Я решил проблему и выложу здесь ответ для потомков, если у кого-то есть такая же проблема. Мой хост - Linux и гостевые окна.

QEMU запускается с -qmp tcp:192.168.0.10:4444,server,nowait для включения доступа telnet к монитору. Чтобы привязать устройства, которые вы хотите на lauch, добавьте -device usb-host,productid=12850,id="FancyKeyboard" -device usb-host,productid=64,id="FancyMouse" к командной строке. Обратите внимание, что -device,productid= хочет десятичный идентификатор, поэтому вам нужно сначала преобразовать гекс, полученный из lsusb или аналогичный десятичному. ,id= part предназначена для легкого отмены привязки и может быть любой уникальной строкой.

Чтобы связать их во время выполнения с хоста, я запускаю скрипт с именем _kvm_bind

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" }}'

И направьте вывод на монитор с помощью netcat nmap: _kvm_bind|ncat 192.168.0.10 4444 Я запускаю его из другого скрипта. ncat умен и автоматически выходит из сессии telnet после EOF.

Связывание от гостя аналогично, и я установил пакет командной строки nmap также гостю. Файл _kvm_bind.bat выглядит следующим образом:

@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.

choice существует, чтобы облегчить вторую задержку между командами на всякий случай. Я не уверен, если & echo. действительно необходимо, я не пробовал это без этого. Он просто выводит пустую строку между командами. Это скорее всего не нужно.

Трубопровод похож на версию Linux:

@echo off
_kvm_bind.bat|ncat 192.168.0.10 4444

Отмена привязки аналогична привязке, просто замените вторую и третью строку на device_del и аргумент с id вы указали, когда связывали его ранее:

echo '{ "execute": "qmp_capabilities" }'
echo '{ "execute": "device_del", "arguments": { "id":"FancyMouse" }}'
echo '{ "execute": "device_del", "arguments": { "id":"FancyKeyboard" }}'

Как я уже говорил в этом вопросе, я запускаю Synergy, чтобы разделить мышь и клавиатуру между гостем и хостом, и у них обоих есть собственный монитор. Мне не нужно выключать Synergy при связывании, и после отмены связывания он работает нормально. В общем, я доволен этим пока.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .