Hardware

USB Passthrough in Proxmox VE: Complete Guide

Learn how to pass through USB devices to VMs and LXC containers in Proxmox VE, including Zigbee/Z-Wave dongles, storage devices, and hotplug configuration.

ProxmoxR app icon

Managing Proxmox? Try ProxmoxR

Monitor and control your VMs & containers from your phone.

Try Free

Why USB Passthrough Matters

Many home servers and production environments rely on USB devices — Zigbee coordinators, Z-Wave dongles, USB hard drives, serial adapters, or security keys. Proxmox VE allows you to pass these devices directly into virtual machines or LXC containers so guest operating systems can use them as if they were physically connected. This is critical for home automation setups, backup appliances, and any workflow that depends on direct hardware access.

Unlike PCI passthrough, USB passthrough does not require IOMMU support and works on virtually any hardware. However, there are important differences between passing by device ID versus by port, and between VM and LXC container approaches.

Identifying Your USB Devices

Before configuring passthrough, identify the device on your Proxmox host. SSH into the node and run:

lsusb

You will see output like this:

Bus 002 Device 003: ID 1a86:55d4 QinHeng Electronics SONOFF Zigbee 3.0 USB Dongle Plus V2
Bus 001 Device 004: ID 0658:0200 Sigma Designs, Inc. Z-Wave Controller
Bus 001 Device 002: ID 0781:5581 SanDisk Corp. Ultra

Note the vendor and product ID (e.g., 1a86:55d4). You can also get more detail with:

lsusb -t          # shows the bus/port tree
lsusb -v -d 1a86:55d4  # verbose info for a specific device

USB Passthrough to Virtual Machines

Method 1: Pass by Device ID (Recommended)

Passing by vendor:product ID means the VM will always grab the correct device, even if you plug it into a different USB port. Use the qm set command:

# Syntax: qm set <vmid> -usb<N> host=<vendorid>:<productid>
qm set 100 -usb0 host=1a86:55d4

This adds the Zigbee dongle to VM 100. The device will be available after the next boot, or immediately if hotplug is enabled.

Method 2: Pass by USB Port

If you have multiple identical devices (e.g., two of the same USB serial adapter), passing by port ensures each VM gets the one plugged into a specific physical port:

# Find the bus-port path
lsusb -t

# Pass by bus and port number
qm set 100 -usb0 host=1-2

The downside is that if you move the device to another port, you must update the configuration.

Enabling USB Hotplug

By default, Proxmox VE supports USB hotplug for VMs using the QEMU XHCI (USB 3.0) controller. Make sure your VM uses the correct USB controller type:

# Add a USB 3.0 controller if not present
qm set 100 -machine q35
qm set 100 -usb0 host=1a86:55d4,usb3=1

With hotplug enabled, you can plug or unplug the USB device while the VM is running, and it will appear or disappear inside the guest OS without rebooting. You can also hotplug via the Proxmox web interface by navigating to the VM's Hardware tab and adding a USB device on the fly.

USB Passthrough to LXC Containers

LXC containers share the host kernel, so USB passthrough works differently. Instead of emulating USB hardware, you bind-mount the device node into the container. This is common for home automation controllers like Home Assistant.

Step 1: Find the Device Path

ls -la /dev/serial/by-id/
# Example output:
# usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2-if00 -> ../../ttyACM0

Step 2: Add the Mount Point

Edit the container configuration file directly:

nano /etc/pve/lxc/101.conf

Add these lines at the end:

# USB device passthrough
lxc.cgroup2.devices.allow: c 166:* rwm
lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file

The cgroup rule grants the container permission to access the character device, and the mount entry makes it visible inside the container. You need to find the correct major device number — use ls -la /dev/ttyACM0 to check (166 is typical for ACM devices).

Step 3: Set Device Permissions

If your container runs unprivileged, you may also need a udev rule on the host to set proper permissions:

# /etc/udev/rules.d/99-zigbee.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d4", MODE="0666"

Reload udev rules and restart the container:

udevadm control --reload-rules && udevadm trigger
pct restart 101

Practical Examples: Zigbee and Z-Wave Dongles

Home automation is one of the most common reasons people pass USB devices through in Proxmox. Here is a typical setup for running Home Assistant in an LXC container with both a Zigbee and Z-Wave stick:

# /etc/pve/lxc/101.conf additions
lxc.cgroup2.devices.allow: c 166:* rwm
lxc.cgroup2.devices.allow: c 188:* rwm
lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file

Always use /dev/serial/by-id/ paths inside your home automation software configuration, even though you mount the short device name. The by-id symlinks are stable across reboots, while /dev/ttyACM0 numbering can change if you add or remove other USB devices.

Troubleshooting Common Issues

  • Device not visible in VM: Verify the USB controller type. Switch from USB 2.0 (EHCI) to USB 3.0 (XHCI) in the VM hardware settings.
  • Permission denied in LXC: Double-check the cgroup device allow rules and the major/minor numbers. Run stat /dev/ttyACM0 on the host to confirm.
  • Device disappears after host reboot: Use by-id passthrough for VMs and add udev rules with MODE="0666" for LXC containers to ensure consistent access.
  • Slow USB performance: Enable USB 3.0 mode (usb3=1) for storage devices passed to VMs.

If you manage multiple Proxmox nodes and need to track which USB devices are assigned where, tools like ProxmoxR can help you keep an overview of your hardware configurations across the cluster from a single dashboard.

Take Proxmox management mobile

All the features discussed in this guide — accessible from your phone with ProxmoxR. Real-time monitoring, power control, firewall management, and more.

ProxmoxR

Manage Proxmox from your phone

Monitor, control, and manage your clusters on the go.

Free 7-day trial · No credit card required