2009/02/15

VMwareの仮想マシンにUSBデバイスをつないだ

というわけで、昨日の予告通りこのネタです。

VMware Serverにはリアルマシンに接続したUSBデバイスを仮想マシンにパススルーして認識させるということができます。まぁそれをやるとホスト側からUSBデバイスを使えなくなるんですけど、別に共用するようなものじゃないのならそれで十分です。

せっかくUSBラジオを仮想マシン側にもたせるなら、そもそもmp3とかもサーバに置けば音楽再生をサーバの仮想マシンに集約してしまえばメインマシン起動しなくても音楽聞けるじゃんねー。まぁESXiにしたときにもちゃんとUSBパススルーができるかどうかはちょっと不安ですが…。

さて今日のレシピは割と簡単です。Automatically Connecting USB Devices at Virtual Machine Power On(VMwareのKnowledge Base)を参考にvmxファイルにusb.autoConnect.device*なエントリを追加すればオッケーです。

仮想マシンにパススルーするUSBデバイスのIDを調べる

まずは仮想マシン側にパススルーしたいUSBデバイスのVendor IDとProduct IDを調べます。Linuxであれば cat /proc/bus/usb/devices (無かったら /dev/bus/usb/devices にあるかも)します。Windowsならデバイスマネージャでそのデバイスのプロパティを開いて、詳細タブのデバイスインスタンスIDを見ればOKです。Linuxならこんな感じ。

T:  Bus=05 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  5 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=10c4 ProdID=818a Rev= 1.00
S:  Manufacturer=XIAMEN ZHONGLING INC.
S:  Product=ZL AM/FM Radio Device
C:* #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 0 Cls=01(audio) Sub=01 Prot=00 Driver=usbfs
I:* If#= 1 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=00 Driver=usbfs
I:  If#= 1 Alt= 1 #EPs= 1 Cls=01(audio) Sub=02 Prot=00 Driver=usbfs
E:  Ad=83(I) Atr=05(Isoc) MxPS= 512 Ivl=1ms
I:* If#= 2 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbfs
E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=10ms

P行のVendor=10c4 ProdID=818aがお目当てのところです。

WindowsだったらデバイスインスタンスIDで USB\VID_10C4&PID_818A&(以下省略) とあるところのVIDとPIDがお目当てのところです。

WindowsでのUSBのデバイスID確認法
てかこのスクリーンショット自体既に仮想マシン上だったり…

さてとりあえずこんな感じでUSBデバイスのVendor IDが0x10C4で、Product IDは0x818Aだということが分かりました。

vmxファイルにエントリを追加する

これだけ分かればあとは簡単。仮想マシンを停止した状態で以下のエントリを追加します。

usb.generic.autoconnect = "TRUE"
usb.autoConnect.device0 = "0x10c4:0x818a"

あとはこれを保存して仮想マシンを起動すれば、デバイスマネージャとかからAutoConnect指定したUSBデバイスが接続されたことになっているはず! やり方さえわかれば簡単なもんですね。この要領でdevice1とかを増やしていけばいろいろつなげられそうです。とりあえず2個はつなげられた。ということで、それをやってみたスクリーンショットの図を載せておきますね! (リンク先特大図)

VMware上でUSB Audio
USBラジオと、USBオーディオの2デバイスをパススルーしてラジオをUSBオーディオで聞いてる。

まぁそんなわけで、音楽やらラジオ聞くのをメインマシンから分離してみたぞという話でした。やりようによっては、たとえば「オンラインゲームとSkype(とかの音声チャット系のソフト)を一緒に使うとおもいよ〜」って人とかにもいいかもねーって思ったんですが、そもそも家にサーバがある人がそんなにいねーよって書いてから気がついた。そもそも一般人はLinux専用マシンとか作らないから普通に別マシンのWindows上でSkypeとか動かせばいいんですよね。

え、仮想マシン上で再生したときの音質はどうかって? そりゃ仮想マシンなんだからリアルマシンのノイズの影響を全く受けないんですよ! 音質は劇的に向上したに決まってるじゃないですかー! …というネタを考えて、ふと「オーディオマニア向け音楽再生仮想マシンホスティングサービス」とかやったら儲かるんじゃないかとか思ってしまいました。ほら、今度は「音楽専用」高級USBメモリが登場(スラッシュドット ジャパン)とかで4GBのUSBメモリで2万円取れるんだから、音楽専用仮想マシンホスティングできっと月3000円とか取れますよ、ええ。冗談めかして書いてないで特許でも取っとけばよかったかこれ。

うされもん @acidlemonについて

|'-')/ acidlemonです。鎌倉市在住で、鎌倉で働く普通のITエンジニアです。

30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。

外部サイト情報

  • twitter
  • github
  • facebook
  • instagram
  • work on kayac