machine: qemu: add usb host passthrough

QEMU usb-host driver which is the one for passthrough, supports two
options for selecting an USB devices in the host to provide it to the
VM:
 - Bus and Device number the device is plugged
 - Vendor and Product information of the USB devices

    https://qemu-project.gitlab.io/qemu/system/devices/usb.html

This commit allows a user to configure podman machine with either of
options, with new --usb command line option for podman machine init.

Examples
  podman machine init tosovm4 --usb vendor=13d3,product=5406
  podman machine init tosovm3 --usb bus=1,devnum=4 --usb bus=1,devnum=3

This commit also allows a user to change the USBs configured with
--usb command line option for podman machine set.

Note that this commit does not handle host device permissions nor
verify that the USB devices exists.

Signed-off-by: Victor Toso <victortoso@redhat.com>
This commit is contained in:
Victor Toso
2023-11-08 23:38:53 +01:00
parent 6bb2edd215
commit c23963d7a8
15 changed files with 260 additions and 0 deletions

View File

@ -104,6 +104,20 @@ means to use the timezone of the machine host.
The timezone setting is not used with WSL. WSL automatically sets the timezone to the same
as the host Windows operating system.
#### **--usb**=*bus=number,devnum=number* or *vendor=hexadecimal,product=hexadecimal*
Assign a USB device from the host to the VM via USB passthrough.
Only supported for QEMU Machines.
The device needs to have proper permissions in order to be passed to the machine. This
means the device needs to be under your user group.
Note that using bus and device number are simpler but the values can change every boot
or when the device is unplugged.
When specifying a USB using vendor and product ID's, if more than one device has the
same vendor and product ID, the first available device is assigned.
@@option user-mode-networking
#### **--username**
@ -160,6 +174,8 @@ $ podman machine init --rootful
$ podman machine init --disk-size 50
$ podman machine init --memory=1024 myvm
$ podman machine init -v /Users:/mnt/Users
$ podman machine init --usb vendor=13d3,product=5406
$ podman machine init --usb bus=1,devnum=3
```
## SEE ALSO

View File

@ -52,6 +52,20 @@ are no longer visible with the default connection/socket. This is because the ro
users in the VM are completely separated and do not share any storage. The data however is not
lost and you can always change this option back or use the other connection to access it.
#### **--usb**=*bus=number,devnum=number* or *vendor=hexadecimal,product=hexadecimal* or *""*
Assign a USB device from the host to the VM.
Only supported for QEMU Machines.
The device needs to be present when the VM starts.
The device needs to have proper permissions in order to be assign to podman machine.
Use an empty string to remove all previously set USB devices.
Note that using bus and device number are simpler but the values can change every boot or when the
device is unplugged. Using vendor and product might lead to collision in the case of multiple
devices with the same vendor product value, the first available device is assigned.
@@option user-mode-networking
## EXAMPLES