В процессе работы иногда хочется пробросить токен на виртуальную машину. Чтобы это сделать, необходимо две вещи:

Чтобы узнать адрес токена, введем команду:

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
	|__ Port 1: Dev 2, If 1, Class=Chip/SmartCard, Driver=, 480M
	|__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M
	|__ Port 2: Dev 29, If 0, Class=Vendor Specific Class, Driver=r8152, 480M
	|__ Port 5: Dev 4, If 0, Class=Video, Driver=uvcvideo, 480M
	|__ Port 5: Dev 4, If 1, Class=Video, Driver=uvcvideo, 480M
	|__ Port 8: Dev 5, If 1, Class=Wireless, Driver=btusb, 12M
	|__ Port 8: Dev 5, If 0, Class=Wireless, Driver=btusb, 12M


Устройство, имеющее класс Chip/SmartCard и есть токен. В нашем случае оно находится на первой шине и первом порту.

Перейдем к запуску:

# Отключаем сервис pcscd
sudo systemctl stop pcscd pcscd.socket

# Указываем путь до ядра
# Указываем путь до initramfs образа
# Указываем Размер оперативной памяти виртуальной машины в мегабайтах
# Включаем KVM
# Добавляем эмуляцию usb контроллера
# Указываем протокол работы контроллера (ehci. Для xhci передаем "-device qemu-xhci")
# Указываем путь до пробрасываемемого устройства
sudo qemu-system-x86_64 -kernel /boot/vmlinuz-$(uname -r) \
-initrd /boot/initrd.img-$(uname -r) \
-m 1024 \
-cpu host \
-enable-kvm \
-usb \
-device usb-ehci,id=ehci \
-device usb-host,hostbus=1,hostport=1