VirtualBox で動かした Ubuntu にホストマシンの Web カメラを認識させる
- MacBookPro 上で
- VirtualBox v6.1.4 + Vagrant v2.2.7 を使い、
- Ubuntu 18.04 仮想マシンを構築した
環境において、Ubuntu 仮想マシンから、ホストマシンである MacBookPro のウェブカメラを認識させたいと思い、やり方を調べた。
目次
VirtualBox Extension Pack をインストールする
まずは以下から VirtualBox の Extension Pack をダウンロードする。
VirtualBox を開き、メニューバー → 設定 → 拡張機能 と進み、「拡張パッケージ」としてダウンロードした Zip ファイルを追加し、インストールする。
USB オプションを有効にする
仮想マシンの設定で、仮想 USB を有効にする必要がある。今回は Vagrantfile で設定している前提なので、以下のように Vagrantfile を記述する。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.synced_folder "./shared", "/home/vagrant/shared"
config.vm.provider :virtualbox do |vb|
vb.gui = true # デスクトップ環境を使うので GUI を有効にする
vb.memory = "8192"
vb.cpus = 4
vb.customize [
"modifyvm" , :id,
"--vram" , "256",
"--clipboard" , "bidirectional",
"--accelerate3d" , "on",
"--hwvirtex" , "on",
"--nestedpaging" , "on",
"--largepages" , "on",
"--ioapic" , "on",
"--pae" , "on",
"--paravirtprovider", "kvm",
"--usb" , "on", # ← コレを追加する
]
end
# 初期構築スクリプト
config.vm.provision :shell, :inline => <<-EOL
# 日本語化設定
sudo cp /etc/apt/sources.list /etc/apt/sources.list.BAK
sudo sed -i 's/archive.ubuntu.com/jp.archive.ubuntu.com/g' /etc/apt/sources.list
wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/bionic.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt update -y
sudo apt upgrade -y
sudo apt install -y $(check-language-support -l ja) language-pack-ja ubuntu-defaults-ja manpages-ja manpages-ja-dev
sudo apt install -y fonts-noto fonts-ipafont fonts-ipaexfont fonts-vlgothic fonts-takao
sudo apt install -y ubuntu-desktop gnome-tweak-tool
sudo update-locale LANG=ja_JP.UTF-8
sudo timedatectl set-timezone Asia/Tokyo
# デフォルトのエディタを vim に変更
sudo update-alternatives --set editor /usr/bin/vim.basic
EOL
end
"--usb", "on"
と記述すると、USB 1.1 が有効になる。あわせて、--usbehci
で 2.0、--usbxhci
で 3.0 を有効にできるようだ。
ココまで実施したら、$ vagrant reload
を実行して VM を再起動する。
なお、Vagrant で VirtualBox を起動している最中は、設定がロックされているようなので、次のようなコマンドでは USB を ON にできなかった。
$ VBoxManage modifyvm "Ubuntu_default_0000000000000_00000" --usb on
VBoxManage: error: The machine 'Ubuntu_default_0000000000000_00000' is already locked for a session (or being unlocked)
VBoxManage: error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component MachineWrap, interface IMachine, callee nsISupports
VBoxManage: error: Context: "LockMachine(a->session, LockType_Write)" at line 554 of file VBoxManageModifyVM.cpp
仮想 USB が有効になっているかどうかは、VM 起動後、メニューバー → 仮想マシン → 設定 → 「ポート」タブ → 「USB」タブ → 「USB コントローラーを有効化」にチェックが入っているかどうかでも確認できる。
VirtualBox VM に Web カメラをアタッチする
$ vagrant reload
を実行して VirtualBox VM を再起動し、仮想 USB が有効になったら、VM に Web カメラをアタッチする。
まずは次のコマンドで VirtualBox VM 名を控えておく (この例だと "Ubuntu_default_0000000000000_00000"
)。
# VM 名を控える
$ VBoxManage list runningvms
"Ubuntu_default_0000000000000_00000" {56aaa777-8888-4444-9999-260000000000}
続いて、ホストマシンが認識しているウェブカメラを確認し、ID を控える (この例だと 0x142000000aaaaa00
)。コレは MacBookPro 本体に内蔵されている Web カメラだ。
# ウェブカメラの ID (`0x14…` のヤツ) を控える
$ VBoxManage list webcams
Video Input Devices: 1
.1 "FaceTime HD Camera"
0x142000000aaaaa00
両方の情報を控えたら、次のようにコマンドを組み立て、VM に Web カメラをアタッチする。
# アタッチする ↓ VM 名 ↓ Web カメラ ID
$ VBoxManage controlvm "Ubuntu_default_0000000000000_00000" webcam attach 0x142000000aaaaa00
コレでアタッチ成功。もしも仮想 USB が有効になっていない場合は、次のようなエラーが出るはずなので、よく確認して VirtualBox VM を再起動すること。
# 以下は USB が有効になっていない場合に出る
$ VBoxManage controlvm "Ubuntu_default_0000000000000_00000" webcam attach 0x142000000aaaaa00
VBoxManage: error: Attach emulated USB webcam (VERR_PDM_NO_USB_HUBS)
VBoxManage: error: Details: code VBOX_E_VM_ERROR (0x80bb0003), component ConsoleWrap, interface IConsole, callee nsISupports
VBoxManage: error: Context: "WebcamAttach(path.raw(), settings.raw())" at line 2150 of file VBoxManageControlVM.cpp
コレで、MacBookPro のカメラを VirtualBox Ubuntu が認識し使えるようになった。試しに以下のようなテストサイトを VirtualBox 内のブラウザで開き、ウェブカメラが認識されているか確認してみよう。
コレでよきよき。