Linuxサーバーに次のUSBデバイスがあります。
# 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
USBハブ全体(Dev 4)をWindowsに渡したいXPゲスト。この場合、ハブに接続され、ハブから削除されたデバイスは、ゲストによって自動的に処理されます(右?))。
virsh attach-device
で次のコードを試してみました。
<hostdev mode='subsystem' type='usb' managed='yes'>
<source>
<address type='usb' bus='0x002' port='1.3' />
</source>
</hostdev>
しかしそれはうまくいきませんでした:
error: Failed to attach device from attach_hub.xml
error: internal error usb address needs device id
何が悪いのですか?
私はこのスレッドが数年前のものであることを知っていますが、この正確なトピックについて数日分の作業を行っており、質問が私の答えの一部を使用できると感じています。
FirstLibvirtドメイン形式のドキュメント に従って、次のスニペットは正しい<hostdev>
構文の概要を示します:
...
<devices>
<hostdev mode='subsystem' type='usb'>
<source startupPolicy='optional'>
<vendor id='0x1234'/>
<product id='0xbeef'/>
</source>
<boot order='2'/>
</hostdev>
</devices>
...
エラーの理由は、USBの<vendor>
タグと<product>
タグがないためです<source>
2番目、Ubuntu 16.04以降(私のような)を実行している場合、上記を使用すると、上記のXMLデバイス形式のUSBパススルーメッセージが成功します。 virsh attach-device
ホットプラグ。ただし、デバイスはVMに接続されません。これはAppArmorのせいです。 別のスレッドこのAppArmor Libvirt構成 にリンクして、USBパススルーの問題を解決するためのコメントを見つけました。問題を解決するために機能したことを確認できます。
関連するAppArmorスニペット:
ソフトウェアプログラムがUSBデバイスに正しくアクセスするには、qemuのapparmor抽象化を変更する必要があります。編集
/etc/apparmor.d/abstractions/libvirt-qemu
行を追加:
# this lets qemu read all USB device information and might be considered a security risk
/run/udev/data/* r,
3番目、他の回答で参照されている「USBハブ」は、ホストマシンのスコープではなく、VMのスコープのハブです。同じLibvirtドキュメントから:
ハブ要素には、デバイスを特定のコントローラーに関連付けることができるtype = 'usb'のオプションのサブ要素があります[...]
多くのデバイスには、ゲストに提示される仮想バス上のデバイスが配置される場所を説明するオプションのサブ要素があります。
これが誰かを助けることを願っています:)
ハブのxml: https://libvirt.org/formatdomain.html#elementsHub
例:
<hub type='usb'> <address type='usb' bus='0' port='1'/> </hub>
https://www.redhat.com/archives/libvir-list/2011-August/msg00816.html
まだ誰かがそれを探しているなら、フォームを使ってください:
<address type='usb' bus='0' device='1'/>
デバイスエントリは、lsusb -tによって出力される「Dev」エントリに対応します