□Fedora18+QEMU-KVMでのUSBパススルー
□Fedora18+QEMU-KVMでのUSBパススルー
いやはや悩みましたよまったく…そもそもこの手の需要があんまりないんで
しょうね。自分的には、自宅で数台動かしていたノートパソコンをKVM環境で
なるべく一台にまとめたいということで始めたのですが。
でもって今回は、ライブカメラ用に動かしている一台のLinuxマシンをKVMの
VMにする代わりに、WEBCAMを当然USB2.0接続のままパススルーしたいのです。
USB1.1でのパススルーは意外と簡単で、WEB上にあるUSB-HDDとかPT2関連の
情報で「なんとなく」やっていけばできるのですが、USB2.0でパススルー
したいとなると情報が極端に少なくて、しかもいろいろ入り混じって大変
でした。
というわけで、今回はlivecam-serverというVMであれこれしてみた記録です。
http://fedoraproject.org/wiki/Features/UsbNetworkRedirection
https://github.com/ceph/qemu-kvm/blob/master/docs/usb2.txt
これやってみるか?
virt-install \
–connect qemu:///system \
–name=livecam-server \
–ram=1024 \
–file=/vps/images/livecam-server.img \
–file-size=20 \
–vcpus=1 \
–os-type=linux \
–os-variant=generic26 \
–network bridge=br0 \
–accelerate \
–hvm \
–location http://ftp.jp.debian.org/debian/dists/stable/main/installer-amd64/ \
–graphics vnc,port=5900,listen=0.0.0.0,keymap=ja,password=hogehoge \
–extra-args=’hostname=livecam-server’
mv /etc/libvirt/qemu/livecam-server.xml /vps/conf/
ln -s /vps/conf/livecam-server.xml /etc/libvirt/qemu/livecam-server.xml
と、とりあえずテケトーにインストールしてから
emacs /vps/conf/livecam-server.xml
----------
<domain type=’kvm’ xmlns:qemu=’http://libvirt.org/schemas/domain/qemu/1.0′>
:
:
<qemu:commandline>
<qemu:arg value=’-device’/>
<qemu:arg value=’usb-ehci,id=ehci’/>
</qemu:commandline>
</domain>
----------
として、
service libvirtd restart; tail -f /var/log/messages
してからVMを再起動すると?
virsh start livecam-server ; tail -f /var/log/libvirt/qemu/livecam-server.log
> 2013-04-03 02:14:43.552+0000: starting up
> LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -name livecam-server -S -M pc-1.2 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -uuid 298b8f1e-d32e-110e-f47a-1ba92345615b -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/livecam-server.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/vps/images/livecam-server.img,if=none,id=drive-ide0-0-0,format=raw -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:62:5d:b0,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:19,password -k ja -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -device usb-ehci,id=ehci
> Domain id=1 is tainted: custom-argv
> char device redirected to /dev/pts/1
という感じで
「-device usb-ehci,id=ehci」
をつけて起動してくれる。
ゲスト側でも見てみると、
dmesg | grep ehci
> [ 0.554672] ehci_hcd: USB 2.0 ‘Enhanced’ Host Controller (EHCI) Driver
> [ 0.554695] ehci_hcd 0000:00:05.0: PCI INT D -> Link[LNKD] -> GSI 11 (level, high) -> IRQ 11
> [ 0.554737] ehci_hcd 0000:00:05.0: setting latency timer to 64
> [ 0.554746] ehci_hcd 0000:00:05.0: EHCI Host Controller
> [ 0.554765] ehci_hcd 0000:00:05.0: new USB bus registered, assigned bus number 1
> [ 0.554962] ehci_hcd 0000:00:05.0: irq 11, io mem 0xfebf2000
> [ 0.565318] ehci_hcd 0000:00:05.0: USB 2.0 started, EHCI 1.00
> [ 0.565346] usb usb1: Manufacturer: Linux 2.6.32-5-amd64 ehci_hcd
おー、認識してるー!!
で、あとはつなぎたいUSB機器をパススルーしてみようとしたが、やはり
これも直接qemuにオプションとして渡すのがいいみたい。
というのも、
emacs /vps/conf/livecam-server.xml
----------
<devices>
:
:
<hostdev mode=’subsystem’ type=’usb’>
<source startupPolicy=’optional’>
<vendor id=’0x0603’/>
<product id=’0x8122’/>
</source>
</hostdev>
:
:
</devices>
----------
として
service libvirtd restart; tail -f /var/log/messages
してからVMを再起動すると?
virsh start livecam-server ; tail -f /var/log/libvirt/qemu/livecam-server.log
> 2013-04-03 02:19:44.230+0000: starting up
> LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -name livecam-server -S -M pc-1.2 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -uuid 298b8f1e-d32e-110e-f47a-1ba92345615b -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/livecam-server.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/vps/images/livecam-server.img,if=none,id=drive-ide0-0-0,format=raw -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:62:5d:b0,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:19,password -k ja -vga cirrus -device usb-host,hostbus=2,hostaddr=2,id=hostdev0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -device usb-ehci,id=ehci
> Domain id=1 is tainted: custom-argv
> char device redirected to /dev/pts/1
> qemu-kvm: Warning: speed mismatch trying to attach usb device BUFFALO BSWHD01 Webcam to bus usb.0
> qemu-kvm: Warning: speed mismatch trying to attach usb device BUFFALO BSWHD01 Webcam to bus usb.0
> qemu-kvm: Warning: speed mismatch trying to attach usb device BUFFALO BSWHD01 Webcam to bus usb.0
という感じで、起動はするけどスピード違うよ、となる。
まして、ゲストOS(VM)側ではWEBCAMを認識していない。
ホストOS側で
lsusb
で見てみると
> Bus 002 Device 002: ID 0603:8122 Novatek Microelectronics Corp.
> Bus 003 Device 002: ID 045e:00a4 Microsoft Corp. Compact Optical Mouse, model 1016
> Bus 003 Device 003: ID 413c:2003 Dell Computer Corp. Keyboard
> 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 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
となっているので、先ほどの「vendor/products」での設定を削除して、
別途QEMUに直接オプションを渡す。
emacs /vps/conf/livecam-server.xml
----------
<domain type=’kvm’ xmlns:qemu=’http://libvirt.org/schemas/domain/qemu/1.0′>
:
:
<qemu:commandline>
<qemu:arg value=’-device’/>
<qemu:arg value=’usb-ehci,id=ehci’/>
<qemu:arg value=’-device’/>
<qemu:arg value=’usb-host,bus=ehci.0,hostbus=2,hostport=2,id=webcam’/>
</qemu:commandline>
</domain>
----------
で
service libvirtd restart; tail -f /var/log/messages
してからVMを再起動すると?
virsh start livecam-server ; tail -f /var/log/libvirt/qemu/livecam-server.log
> 2013-04-03 02:55:43.370+0000: starting up
> LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -name livecam-server -S -M pc-1.2 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -uuid 298b8f1e-d32e-110e-f47a-1ba92345615b -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/livecam-server.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/vps/images/livecam-server.img,if=none,id=drive-ide0-0-0,format=raw -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:62:5d:b0,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:19,password -k ja -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=2,hostport=2,id=webcam
> Domain id=1 is tainted: custom-argv
> char device redirected to /dev/pts/1
> husb: open /dev/bus/usb/002/001: Permission denied
となってなんかアレな感じで蹴っ飛ばされているというか…だめ。
むむう…Permission deniedか…
https://bugzilla.redhat.com/show_bug.cgi?id=573850
ああ、これこれ。
emacs /etc/libvirt/qemu.conf
----------
:
# The user ID for QEMU processes run by the system instance.
user = “root”
# The group ID for QEMU processes run by the system instance.
group = “root”
:
----------
で
service libvirtd restart; tail -f /var/log/messages
してからVMを再起動すると?
virsh start livecam-server ; tail -f /var/log/libvirt/qemu/livecam-server.log
> 2013-04-03 03:00:01.395+0000: starting up
> LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -name livecam-server -S -M pc-1.2 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -uuid 298b8f1e-d32e-110e-f47a-1ba92345615b -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/livecam-server.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/vps/images/livecam-server.img,if=none,id=drive-ide0-0-0,format=raw -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:62:5d:b0,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:19,password -k ja -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=2,hostport=2,id=webcam
> Domain id=1 is tainted: high-privileges
> Domain id=1 is tainted: custom-argv
> char device redirected to /dev/pts/1
> husb: open /dev/bus/usb/002/001: Operation not permitted
となり、
> husb: open /dev/bus/usb/002/001: Permission denied
から
> husb: open /dev/bus/usb/002/002: Operation not permitted
になった。
rootで動かしても「Operation not permitted」だからなぁ…
と、ここで詰まりつつ数日もがいてると、
https://www.centos.org/modules/newbb/viewtopic.php?topic_id=32889&forum=38
…ふむふむ、な、なんだと?
> I added my USB device path to the whitelist in /etc/libvirt/qemu.conf.
>
> BEFORE
>
> #cgroup_device_acl = [
> # “/dev/null”, “/dev/full”, “/dev/zero”,
> # “/dev/random”, “/dev/urandom”,
> # “/dev/ptmx”, “/dev/kvm”, “/dev/kqemu”,
> # “/dev/rtc”, “/dev/hpet”, “/dev/net/tun”,
> #]
>
>
> AFTER
>
> cgroup_device_acl = [
> “/dev/null”, “/dev/full”, “/dev/zero”,
> “/dev/random”, “/dev/urandom”,
> “/dev/ptmx”, “/dev/kvm”, “/dev/kqemu”,
> “/dev/rtc”, “/dev/hpet”, “/dev/net/tun”,
> “/dev/bus/usb/008/001”,
> ]
>
> Then restart libvirtd.
>
> service libvirtd restart
>
> Note, I did not change the user, group, and dynamic values from the defaults in the qemu.conf file.
ほほう、というわけで、
emacs /etc/libvirt/qemu.conf
----------
:
# This is the basic set of devices allowed / required by
# all virtual machines.
#
# As well as this, any configured block backed disks,
# all sound device, and all PTY devices are allowed.
#
# This will only need setting if newer QEMU suddenly
# wants some device we don’t already know about.
#
#cgroup_device_acl = [
# “/dev/null”, “/dev/full”, “/dev/zero”,
# “/dev/random”, “/dev/urandom”,
# “/dev/ptmx”, “/dev/kvm”, “/dev/kqemu”,
# “/dev/rtc”,”/dev/hpet”
#]
cgroup_device_acl = [
“/dev/null”, “/dev/full”, “/dev/zero”,
“/dev/random”, “/dev/urandom”,
“/dev/ptmx”, “/dev/kvm”, “/dev/kqemu”,
“/dev/rtc”,”/dev/hpet”,
“/dev/bus/usb/002/002”
]
:
----------
で
service libvirtd restart; tail -f /var/log/messages
してからVMを再起動すると?
virsh start livecam-server ; tail -f /var/log/libvirt/qemu/livecam-server.log
> 2013-04-03 03:01:23.519+0000: starting up
> LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -name livecam-server -S -M pc-1.2 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -uuid 298b8f1e-d32e-110e-f47a-1ba92345615b -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/livecam-server.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/vps/images/livecam-server.img,if=none,id=drive-ide0-0-0,format=raw -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:62:5d:b0,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:19,password -k ja -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=2,hostport=2,id=webcam
> Domain id=1 is tainted: high-privileges
> Domain id=1 is tainted: custom-argv
> char device redirected to /dev/pts/1
> husb: open /dev/bus/usb/002/001: Operation not permitted
…ありゃおなじだ。
実は、WEBCAMは
> Bus 002 Device 002: ID 0603:8122 Novatek Microelectronics Corp.
ではなくて、
dmesg | grep webcam -i
> [ 2.796664] usb 2-5: Product: BUFFALO BSWHD01 Webcam
> [ 8.133352] uvcvideo: Found UVC 1.00 device BUFFALO BSWHD01 Webcam (0603:8122)
> [ 8.155895] input: BUFFALO BSWHD01 Webcam as /devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0/input/input5
で見るとわかるが、2-5につながっている…ので、qemuのcgroupの方はそのままだけど、VMのxmlの方は
emacs /vps/conf/livecam-server.xml
----------
<domain type=’kvm’ xmlns:qemu=’http://libvirt.org/schemas/domain/qemu/1.0′>
:
:
<qemu:commandline>
<qemu:arg value=’-device’/>
<qemu:arg value=’usb-ehci,id=ehci’/>
<qemu:arg value=’-device’/>
<qemu:arg value=’usb-host,bus=ehci.0,hostbus=2,hostport=5,id=webcam’/>
</qemu:commandline>
</domain>
----------
で
service libvirtd restart; tail -f /var/log/messages
してからVMを再起動すると?
virsh start livecam-server ; tail -f /var/log/libvirt/qemu/livecam-server.log
> 2013-04-03 03:06:11.353+0000: starting up
> LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -name livecam-server -S -M pc-1.2 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -uuid 298b8f1e-d32e-110e-f47a-1ba92345615b -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/livecam-server.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/vps/images/livecam-server.img,if=none,id=drive-ide0-0-0,format=raw -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:62:5d:b0,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:19,password -k ja -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=2,hostport=5,id=webcam
> Domain id=1 is tainted: high-privileges
> Domain id=1 is tainted: custom-argv
> char device redirected to /dev/pts/1
> husb: open /dev/bus/usb/002/001: Operation not permitted
あら?かわらないし、ゲストOS側でも認識していない。
…実はこれは、ホストOS側でuvcvideoがWEBCAMをがっちりと握ってしまっているから。
lsmod | grep uvc
> uvcvideo 80924 0
> videobuf2_vmalloc 13163 1 uvcvideo
> videobuf2_core 38816 1 uvcvideo
> videodev 120947 2 uvcvideo,videobuf2_core
> media 20444 2 uvcvideo,videodev
なので、ホストOS側で
emacs /etc/modprobe.d/blacklist.conf
----------
:
# Webcam not Catch
blacklist uvcvideo
----------
を追記するなりして握らないようにしてから、
service libvirtd restart; tail -f /var/log/messages
してからVMを再起動すると?
virsh start livecam-server ; tail -f /var/log/libvirt/qemu/livecam-server.log
> 2013-04-03 03:08:56.539+0000: starting up
> LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -name livecam-server -S -M pc-1.2 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -uuid 298b8f1e-d32e-110e-f47a-1ba92345615b -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/livecam-server.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/vps/images/livecam-server.img,if=none,id=drive-ide0-0-0,format=raw -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:62:5d:b0,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:19,password -k ja -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=2,hostport=5,id=webcam
> Domain id=1 is tainted: high-privileges
> Domain id=1 is tainted: custom-argv
> char device redirected to /dev/pts/1
> husb: open /dev/bus/usb/002/001: Operation not permitted
と、あんまり見たくないメッセージだけど…
ゲストOS(VM)側で
lsusb
とすると、
> Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
> Bus 001 Device 002: ID 0603:8122 Novatek Microelectronics Corp.
> Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ついでに
dmesg
> [ 3.170635] Linux video capture interface: v2.00
> [ 3.200426] uvcvideo: Found UVC 1.00 device BUFFALO BSWHD01 Webcam (0603:8122)
> [ 3.230386] input: BUFFALO BSWHD01 Webcam as /devices/pci0000:00/0000:00:05.0/usb1/1-1/1-1:1.0/input/input4
> [ 3.230449] usbcore: registered new interface driver uvcvideo
> [ 3.230545] USB Video Class driver (v0.1.0)
キタ――(゜∀゜)――!!
ちなみに、qemuの動作権限をrootでなくすと、やっぱり「Permission denied」になる。
まぁこれは
/dev/bus/usb/002/001
/dev/bus/usb/002/002
とかのパーミッションを664から666にするか、それともrootのままでいくか、
どっちにしてもどっちかがセキュリティレベルが変化するのであれかなぁ?
で、ちゃんと
□RaspberryPiというかRaspbianで動くWebCAM監視カメラ(ライブカメラ)
を参考にfswebcamとかで写真を撮ったら、ばっちりでした。
apt-cache search vlgothic
apt-get -y install ttf-vlgothic
apt-get -y install fswebcam
インストールできたら早速キャプチャしてみる。
fswebcam -d /dev/video0 \
-p YUYV -D 2 -S 16 -r 640×480 \
–jpeg 75 –line-colour ‘#FF000000’ \
–text-colour ‘#40FFFFFF’ –banner-colour ‘#FF000000’ \
–title “漢字も打てますよ” \
–font “/usr/share/fonts/truetype/vlgothic/VL-PGothic-Regular.ttf:12” \
/var/tmp/output.jpg
わーい。
今回のUSB2.0のパススルーをするポイントは
・カーネルオプションintel_iommu=onは関係ない(なくてもOK)
・QEMU-KVMのバージョンは1.xに(Fedora18は現時点で1.2.0)
・VMのdomainタグにはオプションが必要
・EHCIの認識はQEMUのコマンドラインオプションとして渡す
・USB2.0デバイスのhostbus/hostportはlsusbでなくdmesgで
・QEMUはroot/rootで動かすこと
・ホストOS側でそのデバイスを握っていてはいけない
でした。
さて、自宅サーバーをVM化して一台にまとめようっと。
以下余談…
DELL Optiplex 780(SFF)にまとめる予定ですが、これ4GB-DIMMモジュールが
刺さりますので、メーカーは最大8GBといってますけど、16GBまでいけます。