トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

CentOS 6.3でKVMのUSBリダイレクションを設定する

キーワード

はじめに

この文書では、CentOS 6.3でKVMを使用した仮想環境において、SPICEプロトコルを用いてホスト(Linux)からゲスト(Windows等)へUSBデバイスをリダイレクション(直接認識)させる方法を紹介します。

なお、ここで言うホストとは、仮想マシンが動作しているコンピュータだけでなく、SPICEプロトコルを用いて仮想マシンのコンソールに接続している別のコンピュータも含みます。

また、この文書では、例として(私の主目的であった)ICカードリーダ(NTTコミュニケーションズ SCR3310-NTTCom)を認識させます。

必要なパッケージの導入

ひととおり、KVM + libvirtで仮想マシンの管理ができる環境を整えてください。通常のvirt-managerやvirt-viewerに加えて、usbredirspice-gtkおよびspice-gtk-toolsパッケージを導入する必要があります。spice-gtk-toolsに含まれるSPICEクライアントspicyしか、CentOS 6.3ではUSBリダイレクションに対応していないからです。

また、ICカードリーダを使用するために、pcsc-lite、pcsc-lite-libsパッケージを導入します。さらに、(たぶん必要な)pcsc-perl、pcsc-toolsパッケージをFedoraのレポジトリからインストールします。CentOS 6.3ではFedora 15のパッケージはインストールできなかったので、FedoraプロジェクトのアーカイブからFedora 13のパッケージをインストールします。

yum install http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/13/Everything/x86_64/os/Packages/pcsc-perl-1.4.8-2.fc13.x86_64.rpm
yum install http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/13/Everything/x86_64/os/Packages/pcsc-tools-1.4.16-1.fc13.x86_64.rpm

pcscdの停止

pcscdが動いていると、リダイレクションできないので、serviceコマンドおよびchkconfigコマンドでpcscdを停止します。

service pcscd stop
chkconfig pcscd off

なお、ICカードリーダ自体は、接続しただけでデバイスとしては認識されます。ただし、カードを挿入してpcsc_scanコマンドを実行しても、とある会社の社員証は認識されませんでした。[1]

仮想マシン設定ファイルの編集

既存の仮想マシンにUSBリダイレクションの設定を追加するために、設定ファイルを編集します。Fedoraプロジェクトのドキュメントにある通りで大丈夫でした。

 1行目を修正

<domain type='kvm'>

を下記に修正

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

 </domain>閉じタグの直前に追加

 <qemu:commandline>
     <qemu:arg value='-readconfig'/>
     <qemu:arg value='/etc/qemu/ich9-ehci-uhci.cfg'/>
     <qemu:arg value='-chardev'/>
     <qemu:arg value='spicevmc,name=usbredir,id=usbredirchardev1'/>
     <qemu:arg value='-device'/>
     <qemu:arg value='usb-redir,chardev=usbredirchardev1,id=usbredirdev1,bus=ehci.0,debug=3'/>
     <qemu:arg value='-chardev'/>
     <qemu:arg value='spicevmc,name=usbredir,id=usbredirchardev2'/>
     <qemu:arg value='-device'/>
     <qemu:arg value='usb-redir,chardev=usbredirchardev2,id=usbredirdev2,bus=ehci.0,debug=3'/>
     <qemu:arg value='-chardev'/>
     <qemu:arg value='spicevmc,name=usbredir,id=usbredirchardev3'/>
     <qemu:arg value='-device'/>
     <qemu:arg value='usb-redir,chardev=usbredirchardev3,id=usbredirdev3,bus=ehci.0,debug=3'/>
  </qemu:commandline>

USBリダイレクションのための設定ファイル作成

上記で仮想マシンの設定は完了ですが、このままでは設定ファイル中の

/etc/qemu/ich9-ehci-uhci.cfg

というファイルがないので、起動エラーになります。そこで、KVMホストで/etc/qemuディレクトリを作成し、[2]テキストエディタでich9-ehci-uhci.cfgを作成します。中身は、Qemu-kvm 1.0&Spice 0.10.0&Spice-Gtk-0.7.81&Libvirt 0.9.7-2 on Ubuntu Preciseにあった下記の通りで大丈夫でした。

[device "ehci"]
driver = "ich9-usb-ehci1"
addr = "1d.7"
multifunction = "on"

[device "uhci-1"]
driver = "ich9-usb-uhci1"
addr = "1d.0"
multifunction = "on"
masterbus = "ehci.0"
firstport = "0"

[device "uhci-2"]
driver = "ich9-usb-uhci2"
addr = "1d.1"
multifunction = "on"
masterbus = "ehci.0"
firstport = "2"

[device "uhci-3"]
driver = "ich9-usb-uhci3"
addr = "1d.2"
multifunction = "on"
masterbus = "ehci.0"
firstport = "4"

仮想マシンの起動

準備ができたら適当な方法で仮想マシンを起動します。ただし、どのみち画面はspicyで表示させるので、virshを使うと簡単でしょう。

virsh start 仮想マシン名

またはネットワーク越しに操作する場合は以下のようにします。

virsh -c qemu+ssh://ホスト名/system start 仮想マシン名

なお、spicyは「仮想マシン名」ではなくSPICEのポート番号で接続先を指定しますので、下記コマンド等を使って、SPICEのポート番号を確認しておく必要があります。

virsh dumpxml 仮想マシン名

<graphics type='spice' port='5930' autoport='no' listen='0.0.0.0' keymap='ja'>
     <listen type='address' address='0.0.0.0'/>
</graphics>

また、当然ですがネットワーク越しに接続する場合は、そのポート番号での通信ができるように、ファイアウォールの設定をおこなっておく必要があります。

spicyによる画面表示

仮想マシンが起動したら、spicyコマンドで接続します。

spicy -p ポート番号

またはネットワーク越しに操作する場合は以下のようにします。

spicy -h ホスト名 -p ポート番号

spicyの画面は下記の通りです。


リダイレクションしたいUSB機器をホストに接続したら、画面上部のメニューから[Input] - [Select USB Devices for redirection]を選択します。


すると、リダイレクションできるデバイスが表示されますので、適切なものを選択します。


あとは、ゲストOS側で認識、ドライバのインストール等がおこなわれるはずです。

  • [1]インターネットには地デジ用BCASカードは情報が表示される等書いてあります。
  • [2]もともとそこにディレクトリがないので、CentOSでは他に正しい設定ファイルの置き場所があるのかもしれませんが。