2009年9月15日 星期二

VirtualBox guest OS USB啟用筆記

雖然用了VirtualBox這麼多年,但是卻是頭一次這麼認真的看待這個嚴肅的題目:如何讓guest OS能夠順利讀到USB介面呢?雖然VirtualBox推出新版本的速度非常快,但是至今仍然沒有任何一個版本是可以不用任何設定就可以讓guest直接讀取USB設備的(MacOSX版除外);如果用的是OSE版本,那可是連USB的支援都沒有!!

由於我只有實體的Debian Lenny、Ubuntu 9.04跟OpenSuSE 11.1,因此這裡只紀錄Debian跟OpenSuSE的解決方法。

Debian下非常簡單,首先必須確定你的帳號有在vboxusers裡面。如果沒有的話,請加入到vboxusers裡面,重新登入就可以了。

萬一重新登入還是沒辦法啟用usb,也別著急,只要控制debian下統一控制mount的script就好。首先我們要先找出USB裝置的gid:

cat /etc/group | grep plug
會得到

這個46便是我們所要記下的gid。

接下來請修改/etc/init.d/mountkernfs.sh,找到domount關鍵字,在其下新增一行如下:

domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev,devgid=46,devmod=664
請重新開機,不用修改fstab跟usbfs就可以正常使用usb on guest OS。

OpenSuSE則稍微麻煩一點。SuSE系列的linux沒有usb或是plugdev這類的群組,而是全數交由udev統一控管;想要啟用USB on Virtualbox,該怎麼辦呢?
我們檢視一下/etc/udev/rules.d/10-vboxdrv.rules的內容,可以發現要使用virtualbox的usb,得從vboxusers這個群組下手,而非UserManual上所說的usb群組。

cat /etc/group | grep vbox
會得到

可以得知vboxusers的gid是1001,且我是屬於這個群組裡的一員(這很重要)。

請接著修改/etc/fstab,新增一行:

none /proc/bus/usb usbfs devgid=1001,devmode=664 0 0
許多討論串都只說到這裡,但是筆者無論如何嘗試,但是guest OS就是無法存取usb裝置。很幸運的參考了這個討論串,似乎同時是VirtualBox的開發人員consused建議我們可以在加一個NAME參數到/etc/udev/rules.d/10-vboxdrv.rules
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600" SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="vboxusers", MODE="0664"
變成
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600" SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664" SUBSYSTEM=="usb", NAME="vbusb", ENV{DEVTYPE}=="usb_device", GROUP="vboxusers", MODE="0664"

請重新開機!這樣你的Guest OS應該就可以讀得到你的USB裝置了!

沒有留言: