首先参考了:http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=130210&sid=592708d954990bdd11e60bb7d115ed3a
5. USB设备
KVM是通过qemu来支持USB设备的,可以在启动的时候就指定需要连接的USB设备,也可以系统启动后动态的添加删除.通过qemu的help可知,使用qemu的usb_add host:xxx:xxx来添加usb设备,那么如何知道对应的host:xxx:xxx呢,有2种方法:
1)在host主机ubuntu中执行lsusb得到这些信息
比如在我机器上ipod的信息如下:
Bus 006 Device 002: ID 05ac:1204 Apple Computer, Inc. iPod [Photo]
Bus 006 Device 001: ID 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002
....
05ac:1204就是我们需要的了。
2)进入虚拟机后,通过ctrl+alt+2调出qemu控制台,输入info usb来列出相关的信息,在我的机器上:
Device 4.2, speed 12 Mb/s
Class e0: USB device 044e:300d, UGX
Device 2.11, speed 480 Mb/s
Class 00: USB device 05ac:1204, iPod
...
很有可能你在执行上述命令的时候会遇到这样的错误:
Could not open /dev/bus/usb/devices
可以参考:https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/156085去解决,主要就是把
/etc/init.d/mountdevsubfs.sh脚本中的以下几行打开(默认被注释掉了)
#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb
然后手工执行:
$ sudo /etc/init.d/mountdevsubfs.sh start
或者重启机器就ok了。
取得了上述USB设备的信息后,可以在kvm启动的时候就连接指定的USB设备,通过启动参数-usbdevice host:xxx:xxx 来添加相应设备。也可以在kvm的客户系统启动后添加,在客户系统中按ctrl+alt+2(ctrl+alt+1回到客户系统)调出qemu控制台,通过usb_add host:xxx:xxx来添加设备,通过info usb可以查看已经添加的usb设备信息,通过usb_del来删除连接的usb设备。
我在本机测试后lsusb:
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 0402:7675 ALi Corp.
Bus 002 Device 003: ID 04f3:0210 Elan Microelectronics Corp. AM-400 Hama Optical Mouse
Bus 001 Device 008: ID ffee:0100
最后的ffee:0100就是我的U盘!
用qemu-system-x86_64命令时,通过man,查到了-usbdevice host:xxx:xxx参数
启动虚拟机时可以用:
sudo qemu-system-x86_64 -hda kvm/winxp.img -m 1024 -usbdevice tablet -soundhw all -usbdevice host:ffee:0100