Linux kvm проброс usb

Проброс нескольких устройств USB в виртуальную машину libvirt QEMU подробная инструкция

Проброс нескольких устройств USB в виртуальную машину libvirt+QEMU: подробная инструкция

Если вы работаете в операционной системе Kubuntu и вам нужно пробросить несколько устройств USB в виртуальную машину, то эта инструкция для вас. Мы расскажем, как использовать терминал для этой задачи — это простой и эффективный способ.

Далее находим нужный номер шины и запоминаем его. Теперь, когда у нас есть нужная информация, мы можем пробросить устройства внутрь виртуальной машины.

К сожалению, в libvirt не предусмотрено простого способа для этого, поэтому мы должны использовать немного «костылей». Вместо того, чтобы делать это через графический интерфейс virt-manager или в файле конфигурации XML, мы воспользуемся командой qemu-kvm.

Проброс USB Host → Guest: описание проблемы

Если у вас возникла необходимость пробросить флэшку или другое реальное устройство USB с вашего хост-сервера в гостевую виртуальную машину Kubuntu, используя libvirt+QEMU, но вы не знаете, как это сделать, то вам стоит прочитать этот раздел.

Конкретно, мне было нужно пробросить флэшку из основной машины (host) в виртуальную (guest) Kubuntu.

Я начал искать информацию в интернете и сразу заметил, что многие люди столкнулись с такими же проблемами, как и я. Есть несколько способов решить эту проблему, и я рассмотрел их все. Однако, я не понимаю на 100% каждый метод, и поэтому мечтаю о простом и понятном решении для меня. Я не хочу возвращаться назад и пытаться использовать qemu-kvm вместо QEMU. Именно поэтому я решил остановиться на варианте, который использует virt-manager.

Сейчас я расскажу вам о простом решении для проброса USB-ключей в виртуальной машине Kubuntu, используя libvirt+QEMU с помощью virt-manager.

Точно понимаю, что нужно!

Что именно нужно сделать, чтобы получить доступ к USB-устройствам внутри виртуалки:

  1. Настроить конфигурацию QEMU для использования проброса USB.
  2. Поместить виртуалку в dumpxml, посмотреть какая-либо информацию о назначенном (assigned) USB-устройстве.
  3. Создать скрипт, который будет ресетить шину USB для этой виртуалки.
  4. Проверить этот скрипт.
  5. Пробросить флэшку в гостевую машину.
  6. Проверить, что флэшка появилась в гостевой машине.

Начинаем реализовывать план!

Что же нужно сделать?

1. Воспользуйтесь командой «lsusb» в терминале для того, чтобы увидеть список доступных USB-устройств:

lsusb

2. Выполните следующую команду:

grep cmdline /proc/*/cmdline

Она позволяет получить список запущенных машин KVM.

3. Найдите в этом списке виртуальную машину (guest), в которую вы хотите пробросить USB-устройство.

4. Запустите приведенную ниже команду, чтобы посмотреть конфиг виртуальной машины:

virsh dumpxml <название>

Где <название> — это имя вашей виртуальной машины.

5. После выполнения этой команды найдите нужный вам USB-контроллер. Он будет выглядеть следующим образом:

<controller type='usb' index='0' model='ich9-ehci1' ports='6'>

6. Запишите <controller>:

virt-manager -c qemu:///system

7. В открывшемся окне выберите вашу гостевую машину и нажмите правой кнопкой мыши на ее названии.

8. В контекстом меню выберите «Показать XML-дамп…» и откройте файл, созданный ранее командой «dumpxml».

9. Найдите внутри файла <controller>, находящийся внутри <devices>, и запишите его:

<address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x7'/>

10. Закройте оба окна.

11. Создайте новый текстовый файл и назовите его «reset_usb.sh».

12. Вставьте в него следующий код:

<code>
#!/bin/bash
HUBBUS=<bus> # Сюда вставьте <address> из шага 9.
echo "Нахожу все детишки контроллера HUBBUS=$HUBBUS"
for child in $( ls /sys/bus/pci/devices/$HUBBUS/usb* ); do
if [ ! -z "$(ls -A $child 2>/dev/null)" ]; then
echo "Делал здесь:$child"
echo -n "$child" > /sys/bus/pci/drivers/xhci_hcd/unbind
echo -n "$child" > /sys/bus/pci/drivers/xhci_hcd/bind
fi
done
echo "Готово!"
</code>

13. Сохраните файл и закройте его.

Читайте также:  Подробная инструкция установка Windows 10 на ноутбук Asus ZenBook UX310UA с UEFI

14. Дайте разрешение на выполнение для скрипта:

chmod +x reset_usb.sh

15. Перейдите к настройкам виртуальной машины:

virt-manager

16. В контекстном меню выберите «Показать детали» и перейдите на вкладку «Детали».

17. Найдите раздел «USB». Поставьте галочку на «Подключен к гостевой ОС».

18. Внизу слева нажмите «Добавить новое USB-устройство».

19. В появившемся окне выберите «Устройство, находящееся на хосте» и нажмите «Далее».

20. Выберите вашу флэшку и нажмите «Далее».

21. Нажмите «Применить».

22. Подтвердите изменения и закройте окно.

23. Вернитесь к настройкам гостевой машины.

24. Запустите гостевую машину.

25. Вставьте флэшку в ваш компьютер.

26. Убедитесь, что флэшка появилась на гостевой машине.

Теперь у вас есть решение проблемы проброса USB Host → Guest в виртуальной машине QEMU-KVM с использованием libvirt+QEMU и virt-manager.

Проброс USB устройства внутрь гостевой OS используя KVM

Если вы используете виртуальную машину на VPS с KVM-виртуализацией и хотите пробросить USB устройство внутрь гостевой операционной системы, это руководство поможет вам сделать это подробно и точно.

Для начала, убедитесь, что у вас есть права доступа к хосту и доступ к консоли.

Шаг 1: Создание USB-файла соответствия

Сначала создайте файл usb-mapping.xml, в котором будет содержаться информация о USB-устройствах, которые вы хотите пробросить в гостевую операционную систему. В этом файле вы должны указать идентификаторы Vendor ID и Product ID для каждого устройства. Для этого используйте команду:

lsusb

Выполните эту команду на хостовой машине и найдите USB-устройство, которое вы хотите пробросить. Запишите значения Vendor ID и Product ID. Например, вы можете увидеть строку, которая выглядит так:

Bus 001 Device 006: ID 1234:5678 Vendor Name

В этом случае, Vendor ID равен 1234, а Product ID равен 5678. Запишите значения, они понадобятся вам позже.

Теперь создайте файл usb-mapping.xml с помощью следующей команды:

sudo touch /etc/libvirt/usb-mapping.xml

Откройте файл usb-mapping.xml в текстовом редакторе и добавьте следующую информацию:

<hostdev mode='subsystem' type='usb'>
<source>
<vendor id='Vendor_ID' />
<product id='Product_ID' />
</source>
</hostdev>

Замените Vendor_ID и Product_ID на значения, которые вы записали ранее.

Сохраните файл usb-mapping.xml.

Шаг 2: Изменение конфигурации гостевой операционной системы

Создайте резервную копию конфигурационного файла гостевой операционной системы с помощью команды:

sudo virsh dumpxml <guest> > backup.xml

Замените <guest> на имя вашей гостевой операционной системы.

Откройте резервную копию конфигурационного файла в текстовом редакторе и добавьте следующую информацию:

<hostdev mode='subsystem' type='usb'>
<source>
<vendor id='Vendor_ID' />
<product id='Product_ID' />
</source>
<address type='usb' bus='0' device='0' />
</hostdev>

Здесь также замените Vendor_ID и Product_ID на значения, которые вы записали ранее.

Сохраните изменения в файле.

Шаг 3: Подключение USB-устройства

Теперь вам нужно выполнить несколько команд, чтобы пробросить USB-устройство в гостевую операционную систему.

Сначала выполните команду:

sudo lsusb | grep 'Vendor Name'

Это позволит вам убедиться, что USB-устройство подключено к хостовой машине и распознано.

Затем выполните команду:

sudo qemu-system-x86_64 -nodefaults -nographic -machine accel=kvm -usb -usbdevice host:Vendor_ID:Product_ID

Замените Vendor_ID и Product_ID на значения, которые вы записали ранее.

USB-устройство должно быть подключено к гостевой операционной системе.

Шаг 4: Запуск гостевой операционной системы

Теперь вы можете запустить гостевую операционную систему с помощью virt-manager или другой программы управления виртуализацией.

Убедитесь, что гостевая операционная система видит проброшенное USB-устройство, используя команду:

lsusb

Вы должны увидеть ваше USB-устройство в списке.

Вот и все! Теперь вы можете использовать USB-устройство внутри гостевой операционной системы, используя KVM и проброшенный USB.

Находим на какой шине находится устройство USB

Прежде чем пробросить устройство USB в виртуальную машину, необходимо определить на какой шине оно находится. Для этого можно использовать команду lsusb в терминале.

Запустите терминал на хост-системе, на которой у вас уже есть виртуальная машина libvirt+QEMU. Если у вас нет графической оболочки на сервере, можно управлять виртуалками через virsh, virt-manager или использовать любую другую команду, поддерживающую libvirt библиотеку.

Читайте также:  Почему Windows 10 сама перезагружается и как это исправить проверенные решения

Также убедитесь, что устройство (например, флешка или usb-ключ) уже вставлено в USB-порт вашего компьютера.

Используя команду lsusb

$ lsusb
Bus 001 Device 002: ID 8087:8000 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 003: ID 045e:00cb Microsoft Corp.
Bus 003 Device 002: ID 8087:07d6 Intel Corp.
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

Вам нужно будет найти конкретное устройство USB, которое вы хотите пробросить в виртуальную машину. Обратите внимание на номер шины, где находится это устройство (например, Bus 003).

Примечание: Если у вас появлялись проблемы с пробросом USB в виртуальную машину, возможно, вам придется установить дополнительные пакеты на хост-систему, чтобы исправить это. В зависимости от вашей операционной системы и используемого продукта, может потребоваться установка пакетов, таких как libvirt-daemon-driver-qemu или virt-manager. Обратитесь к официальной документации вашей ОС и продукта для получения более подробной информации.

Создаем конфиг для устройства следующего плана с учетом данных полученных ранее

Создаем конфиг для устройства следующего плана с учетом данных полученных ранее

Окончательное решение проблемы проброса нескольких устройств USB в виртуальную машину на базе libvirt+QEMU может занять некоторое время. В общем, это не так просто, как просто запустить VPS на Linux-хосте. Но неудачное решение этой задачи может вызвать проблемы в будущем. Хочешь работало, как реальный рулить, но внутрь гостевой OS элементарно вставлена флэшку стала делать это файлом (файл можно подмонтировать например с помощью библиотеки vboxsf) к kvm (например VPS на основе DirectAdmin). Это решение хорошо, но есть некоторые недостатки. Метода 2, но он хорошо работает только если на хосте запущенная виртуальная машина, в которой мы хотим пробросить USB-ключей. Запустите команду grep Bus /tmp/lsusb на хосте (в машине где запущена виртуальная машина) и на госте в консоли точно такую же команду. Номер hub/bus изменится в зависимости от количества пробросов на хосте. Вместо X всегда будет номер USB-концентратора, к которому в шине USB-устройств мы собираемся подключить гостевую ОС. Попробуем разобраться с этой проблемой вручную.

Конфигурация

Конфигурация

Для проброса нескольких устройств USB в гостевую виртуальную машину с использованием метода простого проброса, следует использовать следующий ряд действий:

  1. Подключиться к хосту через терминал.
  2. Установить пакет qemu-kvm, который позволит управлять виртуальными машинами.
  3. Найти номер шины USB хоста, на которой находятся нужные устройства. Для этого выполните команду lsusb.
  4. Запустить виртуальную машину и добавить пробросы устройств в ее конфигурацию. Для этого выполните команду virsh edit [имя_виртуальной_машины].
  5. В окне редактирования конфигурации найдите элемент <devices>, внутри которого будет описание устройств.
  6. Добавьте следующий код для каждого пробрасываемого устройства:
<hostdev mode='subsystem' type='usb' managed='yes'>
<source>
<vendor id='0x[идентификатор_производителя]' />
<product id='0x[идентификатор_продукта]' />
<address bus='[номер_шины]' device='[номер_устройства]' function='0x0' />
</source>
</hostdev>

Замените [идентификатор_производителя], [идентификатор_продукта], [номер_шины] и [номер_устройства] на соответствующие значения для каждого устройства.

После внесения изменений сохраните и закройте файл конфигурации.

Для добавления продукта HUBBUS в гостевую виртуальную машину, используйте следующую команду:

qemu-kvm -m 1024 -hda [путь_к_файлу_с_виртуальной_машиной] -usbdevice host:2.0:[идентификатор_производителя]:[идентификатор_продукта]

Замените [путь_к_файлу_с_виртуальной_машиной], [идентификатор_производителя] и [идентификатор_продукта] на соответствующие значения.

Теперь у вас есть подробное описание метода проброса нескольких устройств USB в виртуальную машину с использованием библиотеки libvirt+QEMU.

Подключаем к VPS

В данном разделе мы рассмотрим, как подключить устройства USB к виртуальной машине на основе libvirt+QEMU с использованием virt-manager-а.

Подготовка

Перед тем, как приступить к подключению USB устройств к виртуалке, убедитесь, что у вас есть следующее:

  • Виртуальная машина на основе libvirt+QEMU, созданная с использованием virt-manager-а;
  • Устройства USB, которые вы хотите пробросить в гостевой системе;
  • Сервер, на который вы подключаетесь, и на котором установлена QEMU/KVM и libvirt;
  • У вас есть доступ к терминалу на сервере;
  • Вы можете использовать скрипт VBoxManage для управления вашей виртуальной машиной.

Подключение USB устройства

1. Во-первых, вам нужно найти номер шины USB, на которой находится ваше устройство. Запустите в терминале команду lsusb, чтобы узнать список подключенных устройств USB на вашем сервере. Обратите внимание на нужное вам устройство и запишите его номер шины.

Читайте также:  Субтитры видеоплеер переводчик речи вслух windows

2. Откройте файл конфигурации вашей виртуальной машины (обычно он находится в каталоге /etc/libvirt/qemu/) на сервере с помощью текстового редактора. Найдите строку, которая начинается с <domain (обычно она находится в самом начале файла) и добавьте следующее:

<hostdev mode='subsystem' type='usb' managed='yes'>
    <source>
        <address bus='номер шины' device='номер устройства' />
    </source>
</hostdev>

Замените ‘номер шины’ и ‘номер устройства’ на соответствующие значения, которые вы получили из команды lsusb. Номер шины должен быть указан без точек, например, если ваше устройство находится на шине 3-1.1, то номер шины будет 3-1.1.

3. Сохраните файл конфигурации и закройте редактор.

4. Зайдите в virt-manager и выберите вашу виртуальную машину. Перейдите на вкладку «Устройства» и нажмите кнопку «Добавить новое оборудование».

5. В открывшемся окне выберите «Подключаемое устройство», затем «Виртуальный хост-адаптер USB». Нажмите «Применить» и закройте окно.

6. Теперь вы должны увидеть ваше USB устройство в списке устройств виртуальной машины. Отметьте его галочкой, чтобы пробросить его в гостевую систему.

7. Запустите виртуальную машину и проверьте, работает ли ваше USB устройство в гостевой системе. Если все сделано правильно, устройство должно быть доступно внутри виртуальной машины.

Важно: если у вас возникли проблемы с пробросом, убедитесь, что у вас правильно настроены параметры вашей виртуальной машины, включая права доступа и разрешения для устройств USB.

Это окончательное описание процесса проброса USB устройства в виртуальную машину с использованием libvirt+QEMU и virt-manager-а. Если у вас возникнут трудности или вопросы, не стесняйтесь обращаться за дополнительной помощью.

Неудачное решение: Linux kvm проброс usb

Если ты используешь QEMU/KVM вместе с библиотекой libvirt для создания виртуальных машин и у тебя есть несколько устройств USB, которые требуется пробросить внутрь виртуальной машины, то в этом разделе я расскажу о неудачном решении, которое можно использовать для этой задачи.

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

Если у тебя есть флэшка или любое другое USB-устройство, которое ты хочешь пробросить внутрь виртуальной машины, то ты можешь использовать следующий метод.

Для начала, убедись, что флэшка или другое устройство подключено к хосту.

Затем воспользуйся следующей командой в терминале хоста:

qemu-dumpxml vmname > vm.xml

где vmname — имя твоей виртуальной машины, а vm.xml — имя файла, в котором будет сохранена конфигурация виртуальной машины.

Далее, используй команду:

grep -i usb vm.xml

Эта команда выведет все полученные данные о USB-устройствах, которые находятся внутри виртуальной машины.

Для того чтобы пробросить флэшку или другое устройство, нужно внести некоторые изменения в конфигурационный файл виртуальной машины.

Открой файл конфигурации виртуальной машины с помощью текстового редактора и найди секцию, относящуюся к USB-устройствам.

Найди следующую строку:

<hostdev mode='subsystem' type='usb'>

И добавь ниже следующий блок кода:

<source><vendor id='0xXXXX'/><product id='0xXXXX'/></source>

где 0xXXXX — ID устройства, который ты получил ранее при выполнении команды grep.

После внесения изменений сохраните файл конфигурации и закройте его.

Теперь ты можешь запустить виртуальную машину с обновленным файлом конфигурации, и флэшка или другое устройство должно быть успешно проброшено внутрь.

Однако, хочу отметить, что это решение не является надежным и может вызывать различные проблемы. Поэтому, если у тебя есть возможность использовать другой подход, я рекомендую попробовать его вместо этого метода. Но если тебе необходимо настроить проброс USB-ключей, возможно, этот метод будет для тебя полезным.

Видео:

QEMU/KVM — Virt-Manager | Folder sharing and USB Redirection

QEMU/KVM — Virt-Manager | Folder sharing and USB Redirection by Ton Does Linux and More! 26,652 views 3 years ago 8 minutes, 6 seconds

Оцените статью