LINUX.ORG.RU

проброс USB: Host --> Guest

 , , usb passthrough


1

2

Здравствуйте. Не могу пробросить USB-фляху из хостовой системы (Ubuntu Server 16.04) в гостевую (Windows 7, Kubuntu 16.04 etc.). Подключаюсь удалённо через virt-manager (1.3.2) по SSH как обычно: добавить оборудование --> USB Host Device --> выбираю подключенную флешку --> Завершить. Слева в перечне железа появляется новое устройство: USB 0781:5567. Загружаю виртуалку - ничего «не видно», никаких новых устройств.

Что я делаю не так или делаю не полностью? Это вообще возможно?

Спасибо.

★★★

Последнее исправление: Gannet (всего исправлений: 2)

Не устаю повторять, типичный случай, когда обмазываются гуйками и вообще не рубят как работает qemu-kvm.

Это вообще возможно?

Это не только возможно, но и элементарно. Хочешь устройство, хочешь порт, а хочешь и целый хаб. Как? Почитай документацию qemu-kvm, а не костылей.

slon
()

Делаю через virt-manager

Ничего не надо пробрасывать. В окне запущенной виртуальной машины делаешь «виртуальная машина -> переадресация USB» выбираешь свою флэшку.

King_Carlo ★★★★★
()
Ответ на: комментарий от slon

элементарно, но не скажу как

Очень информативно с вашей стороны. Если бы документация дала ответ на мой вопрос, я бы здесь его не задавал. И о каких костылях речь, о virt-manager? Так это продукт RedHat. Если это костыль, следовательно qemu/kvm - тоже «костыль»?

А вот мой файл, который соответствует документации для проброса:

$ sudo cat /etc/libvirt/qemu/win7.xml | grep -i «'subsystem' type='usb'» -A 6
<hostdev mode='subsystem' type='usb' managed='yes'>
<source>
<vendor id='0x0781'/>
<product id='0x5567'/>
</source>
<boot order='2'/>
</hostdev>

Gannet ★★★
() автор топика
Последнее исправление: Gannet (всего исправлений: 2)
Ответ на: комментарий от King_Carlo

В окне запущенной виртуальной машины делаешь «виртуальная машина -> переадресация USB» выбираешь свою флэшку.

Уточню. Подключаюсь через virt-manager удалённо по SSH. Если вставить флешку в компьютер, с которого подключаюсь, конечно «переадресация USB» работает. Но флешка вставлена в сервер, на котором крутятся виртуалки и она не отображается в списке предлагаемых для переадресации.

Gannet ★★★
() автор топика
Ответ на: элементарно, но не скажу как от Gannet

А вот мой файл
xml-лапша, привет из java мира

сравни, черт возьми, порт:

-device usb-host,hostbus=8,hostport=1
устройство по id:
-usb -usbdevice host:04f3:0216
или
--device usb-host,vendorid=0x04f3,productid=0x0216
разве это не проще, не понятнее? По моему мнению это проще и понятнее.

slon
()
Ответ на: комментарий от slon

А вписывать-то это куда, после «qemu-system-x86_64-spice -enable-kvm» ? И так каждый раз? А всё остальное железо? И в результате командная строка длинной в километр?

Gannet ★★★
() автор топика

Полный xml-конфиг виртуалки в студию - это раз. Два - как определяешь что ничего не видно в венде? А если загрузиться с live cd и проверить по lsusb?

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Готовая виртуалка с Kubuntu. Добавлен USB Host Device в госте. Там же:

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

XML-конфиг

Gannet ★★★
() автор топика
Последнее исправление: Gannet (всего исправлений: 5)
Ответ на: комментарий от slon

Вот команда запуска моей виртуалки:

qemu-system-x86_64 -enable-kvm -name Kubuntu16.04 -S -machine pc-q35-2.5,accel=kvm,usb=off -cpu Haswell-noTSX -m 2048 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid d77f8813-66e9-470f-954d-1d3e72c5d55d -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-Kubuntu16.04/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global ICH9-LPC.disable_s3=1 -global ICH9-LPC.disable_s4=1 -boot strict=on -device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e -device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x1 -device ich9-usb-ehci1,id=usb,bus=pcie.0,addr=0x1d.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pcie.0,multifunction=on,addr=0x1d -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pcie.0,addr=0x1d.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pcie.0,addr=0x1d.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.2,addr=0x3 -drive file=/var/lib/libvirt/images/Kubuntu-16.04.x-x86_64-14GiB.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.2,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:55:f9:4d,bus=pci.2,addr=0x1 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -spice port=5900,addr=127.0.0.1,disable-ticketing,seamless-migration=on -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,vgamem_mb=16,bus=pcie.0,addr=0x1 -device ich9-intel-hda,id=sound0,bus=pci.2,addr=0x2 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -chardev spicevmc,id=charredir0,name=usbredir -device usb-redir,chardev=charredir0,id=redir0 -chardev spicevmc,id=charredir1,name=usbredir -device usb-redir,chardev=charredir1,id=redir1 -device usb-host,hostbus=3,hostaddr=2,id=hostdev0 -device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x5 -msg timestamp=on

Как видно строка:

-device usb-host,hostbus=3,hostaddr=2,id=hostdev0

присутствует. Но нет этого устройства в системе или оно не видно по какой-то причине.

Gannet ★★★
() автор топика
Ответ на: комментарий от slon

зачем это здесь?

я незнаю почему virt-manager подставляет этот параметр, но с такой километровой командой, если вставить её в терминал, запускаться виртуалка не хочет:

qemu-system-x86_64: -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-Kubuntu16.04/monitor.sock,server,nowait: Failed to bind socket to /var/lib/libvirt/qemu/domain-Kubuntu16.04/monitor.sock: No such file or directory

Gannet ★★★
() автор топика
Ответ на: комментарий от Gannet

я незнаю почему virt-manager

опять костыли? Конечно не знаешь, ведь не ты делаешь, это всё равно, что позволить чему-то генерировать ~/.bashrc, fstab и т.п., virt-manager и прочее что угодно могут тебе накостылять, наломать.

Для работы qemu-kvm вообще не нужны virt-manager, libvirt и прочее, только qemu-system-*.

Самый простой способ разобраться, дебажить и т.п. это начинать с простого:

#!/bin/bash

QEMU="/usr/bin/qemu-system-x86_64"

${QEMU} \
    -enable-kvm \
    -m 5120 \
    -machine q35,accel=kvm \
    -cpu host,hv_relaxed,hv_vapic,hv_spinlocks=0x1000 \
    -smp 4,sockets=1,cores=4,threads=1 \
    -realtime mlock=off -rtc base=localtime \
    -drive if=pflash,format=raw,readonly,file=/mnt/vm/OVMF/OVMF-pure-efi.fd \
    -drive if=pflash,format=raw,file=/mnt/vm/OVMF/OVMF_VARS-pure-efi.fd \
    -nodefaults \
    -vga none \
    -cdrom /mnt/vm/img/drivers.iso
т.е. создаешь портянку-темплейт где нет максимально ничего лишнего и добавляешь поэтапно нужные фичи, таким образом придешь к работоспособному запуску.

slon
()
Ответ на: комментарий от slon

Нет, я конечно понимаю, что в идеале, чтобы всё понимать, нужно вообще выпилить и выбросить графику и сидеть в голом терминале. Но как если нужно сейчас и времени нет на дебаги и тем более постепенные доведения виртуалки до нужной кондиции?

Gannet ★★★
() автор топика
Ответ на: комментарий от Gannet

Слушай, я сходил воткнул флэшку в сервер, сейчас подключился к серваку virt-manager-ом, добавил usb host device и виртуальная винда отлично увидела флэшку. virt-manager 1.2.1

King_Carlo ★★★★★
()
Ответ на: комментарий от Gannet

Нет, просто чтобы разобраться что не так и почему не работает (это ведь смысл треда?) — нужно понимать, как работает qemu.

Я не могу найти соотв. пример, т.к. у меня температура 38.6 сейчас, но я думаю ты меня понимаешь.

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

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

slon
()
Ответ на: комментарий от slon

virt-manager вполне себе удобный инструмент, а вся эта дичь с прямыми вызовами qemu нужна была мне один раз - проброс видеокарты в ВМ.

King_Carlo ★★★★★
()
Ответ на: комментарий от Gannet

Ты заметил что ты не потратил время на изучение и в итоге делал это гораздо дольше, чем если бы ты прочел ман? Хорошо в тред зашел slon, а если бы у тебя инета небыло?

Порой конечно вхождение слишком тяжело дается и приходиться начинать с метода тыком... Пока тыкаешь узнаешь как примерно хотя бы рабоатет.

matrixd
()
Ответ на: комментарий от Gannet

мой virt-manager про usb-флэшку в xml-конфиг добавил вот такой блок:


<hostdev mode='subsystem' type='usb' managed='yes'>
<source>
<vendor id='0x058f'/>
<product id='0x6387'/>
</source>
</hostdev>

King_Carlo ★★★★★
()
Ответ на: комментарий от matrixd

Какой конкретно мэнуал я должен был прочесть? Везде конкретно указывают править XML-файл с настройками виртуалки. Это я хорошо прочёл. И что я делал гораздо дольше и по сравнению с чем? Моя проблема до сих пор не решена. Что с чем сравнивать? P.S. И да, я рад, если вам хорошо от того, что кто-то зашёл в ветку.

Gannet ★★★
() автор топика
Ответ на: комментарий от Gannet

Проблема не решена? Ошибки есть при старте? Девайс точно правильный пробрасываешь?

man qemu-system-x86_64

matrixd
()
Ответ на: комментарий от King_Carlo

ок ок, сваливаю из треда. Удачи вам там с угадыванием проблемы. Суде по всему ТС еще и логи не хочет смотреть.

matrixd
()
Ответ на: комментарий от matrixd

Cпасибо, буду иметь ввиду и использую.

Gannet ★★★
() автор топика
Ответ на: комментарий от King_Carlo

Там не только он, также и qemu, libvirt.

Gannet ★★★
() автор топика
Ответ на: элементарно, но не скажу как от Gannet

Так это продукт RedHat. Если это костыль, следовательно qemu/kvm - тоже «костыль»?

virt-manager управляет частью фичеров libvirt, который сам по себе не qemu-kvm а библиотека которая его (и другие гипервизоры) контролирует. Выше пропагандируют отбросить библиотеку и рулить qemu-kvm напрямую, что, имхо - полное красноглазие. Но вот понимать как что работает тем не менее надо. Простой дебаг - запустить машину, посмотреть на ps -ef |grep qemu ее реальный cmdline и сравнить с адресами usb из dmesg

dyasny ★★★★★
()
Ответ на: комментарий от slon

люди отказались от такой наркомании почти 10 лет назад. libvirt-ом надо пользоваться, просто надо понимать что делаешь

dyasny ★★★★★
()
Ответ на: комментарий от dyasny

Выше пропагандируют отбросить библиотеку и рулить qemu-kvm напрямую, что, имхо - полное красноглазие. Но вот понимать как что работает тем не менее надо.

Полностью согласен.

Простой дебаг - запустить машину, посмотреть на ps -ef |grep qemu ее реальный cmdline и сравнить с адресами usb из dmesg

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

Gannet ★★★
() автор топика
Ответ на: комментарий от Gannet

для начала просто запустить virt-manager локально, хотя бы через ssh -XY, a не подключаться удаленно локальным virt-manager-ом

dyasny ★★★★★
()
Ответ на: комментарий от dyasny

Локально тоже ничего не происходит, когда я запускаю лежащую на моём локальном компе виртуалку и добавляю в неё USB Host Device. Припоминаю, однажды я уже это пробовал, оно вообще никогда у меня не работало. Поэтому я не понимаю что делать дальше.

Gannet ★★★
() автор топика
Ответ на: комментарий от dyasny

Есть лог локальной виртуалки в /var/log/libvirt/qemu/, с которой сейчас пробую. Но там много всего. Как там можно разобраться? Как запустить этот qemu-monitor я не в курсе.

Gannet ★★★
() автор топика
Ответ на: комментарий от Gannet

там как раз оно, логи нетривиальные, но если есть проблемы на уровне qemu то они видны.

вообще, где lsusb с хоста?

dyasny ★★★★★
()

Немножко жаль тебя :)

slon
()
Ответ на: комментарий от dyasny

логи

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Лог из /var/log/libvirt/qemu/Kubuntu16.04.log

Gannet ★★★
() автор топика
Ответ на: комментарий от dyasny

Вот на хосте:

~$ lsusb
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 0566:3002 Monterey International Corp. Keyboard
Bus 003 Device 002: ID 0781:5567 SanDisk Corp. Cruzer Blade
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Gannet ★★★
() автор топика
Ответ на: комментарий от Gannet

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

dyasny ★★★★★
()
Ответ на: комментарий от dyasny

Что касается монтирования, то она точно не примонтирована - просто вставлена в порт. Что касается бага, я тоже так подозреваю и подозревал давно, потому что оно у меня ещё где-то год-два назад не работало. Тогда даже заводил репорт на родном трекере virt-manager`а, но его благополучно закопали, мотивируя это тем, что у всех работает - только у меня нет. В общем не могли подтвердить. Поэтому на сей раз завёл тут: https://bugs.launchpad.net/ubuntu/ source/virt-manager/ bug/1603558

В общем спасибо всем за внимание и посильную помощью. Остаётся теперь надеяться на разрабов. А мне это особенно важно, поскольку нужно HASP-ключ пробросить для 1C-баз.

Gannet ★★★
() автор топика
Последнее исправление: Gannet (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.