xml para hub: link
Um exemplo:
<hub type='usb'> <address type='usb' bus='0' port='1'/> </hub>
Eu tenho os seguintes dispositivos USB em um servidor Linux:
# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
|__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
|__ Port 2: Dev 3, If 0, Class=HID, Driver=usbfs, 1.5M
|__ Port 3: Dev 4, If 0, Class=hub, Driver=hub/4p, 480M
|__ Port 1: Dev 8, If 0, Class=print, Driver=usbfs, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
|__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
Gostaria de passar todo o hub USB (Dev 4) para um convidado do Windows XP. Nesse caso, um dispositivo conectado e removido para o hub deve ser tratado automaticamente pelo convidado (certo?).
Eu tentei o seguinte código com virsh attach-device
:
<hostdev mode='subsystem' type='usb' managed='yes'>
<source>
<address type='usb' bus='0x002' port='1.3' />
</source>
</hostdev>
mas não funcionou:
error: Failed to attach device from attach_hub.xml
error: internal error usb address needs device id
O que estou fazendo de errado?
Eu sei que esse segmento tem alguns anos, mas venho fazendo alguns dias de trabalho sobre esse tópico exato e sinto que a pergunta poderia usar algumas de minhas respostas.
Primeiro , de acordo com a documentação do formato de domínio Libvirt , o seguinte snippet descreve a porcentagem correta sintaxe<hostdev>
:
...
<devices>
<hostdev mode='subsystem' type='usb'>
<source startupPolicy='optional'>
<vendor id='0x1234'/>
<product id='0xbeef'/>
</source>
<boot order='2'/>
</hostdev>
</devices>
...
O motivo do seu erro é devido às tags <vendor>
e <product>
ausentes para o seu USB <source>
Second , Se você estiver executando o Ubuntu 16.04 ou superior (como eu), você terá mensagens de passagem USB bem-sucedidas com o formato de dispositivo XML acima ao usar o virsh attach-device
hot-plug, mas o dispositivo nunca será conectado à VM. Isso é culpa do AppArmor. Eu encontrei um comentário no outro tópico vinculando a esta configuração do AppArmor Libvirt para resolver problemas de passagem USB, o que posso confirmar que funcionou para resolver meus problemas.
O snippet relevante do AppArmor:
In order for a software program to access the usb device correctly the apparmor abstraction for qemu must be changed. Edit
/etc/apparmor.d/abstractions/libvirt-qemu
add a line:
# this lets qemu read all USB device information and might be considered a security risk
/run/udev/data/* r,
Terceiro , os "hubs USB" mencionados nas outras respostas não são hubs no escopo da máquina host, mas sim no escopo da VM. Do mesmo documento do Libvirt:
The hub element has an optional sub-element with type='usb' which can tie the device to a particular controller[...]
Many devices have an optional sub-element to describe where the device is placed on the virtual bus presented to the guest.
Espero que isso ajude alguém:)
Se alguém ainda estiver procurando por isso, use o formulário:
<address type='usb' bus='0' device='1'/>
A entrada do dispositivo corresponde à saída de entrada "Dev" por lsusb -t
Tags usb libvirt kvm-virtualization