Vagrant内部看不到USB设备

时间:2016-08-15 13:36:27

标签: windows vagrant

我尝试在Vagrant(操作系统:Windows 10)中制作可见的USB设备,这就是我将这两行添加到Vagrant文​​件的原因

 vb.customize ['modifyvm', :id, '--usb', 'on']
 # Provider-specific configuration so you can fine-tune various
 # backing providers for Vagrant. These expose provider-specific options.
 # Example for VirtualBox:
 config.vm.provider "virtualbox" do |vb|
 #   # Display the VirtualBox GUI when booting the machine
 vb.gui = true
 #   # Configure dongle
 vb.customize ['modifyvm', :id, '--usb', 'on']
 vb.customize ['usbfilter', 'add', '0', '--target', :id, '--name', 'VC', '--vendorid', '0x046E', '--productid', '0x0001']

但是当我使用vagrant up时,我无法看到这个USB设备。它标记为VirtualBox设备管理器中的未知设备。设备在本地PC上可见,有时在几个vagrant reload命令后可见。但我正在寻找稳定的解决方案,这使我能够在机器启动后立即看到USB设备。

2 个答案:

答案 0 :(得分:4)

这可以通过VirtualBox设置 - >完成。 USB - > USB设备过滤器,或通过Vagrantfile定义属性。

usermod定义允许VirtualBox扩展包在主机和来宾计算机之间实现USB集成。

安装流浪盒之前。运行以下命令

# add host user to 'vboxusers' group
sudo usermod -a -G vboxusers rohan

注意: - 将rohan更改为主机上的当前用户。

现在,在vagrantfile中定义USB集成的属性之前,运行VBoxManage将有助于获取当前安装在主机上的USB信息:

sudo VBoxManage list usbhost

[sudo] password for rohan: 
Host USB Devices:

UUID:               xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
VendorId:           0x0781 (0781)
ProductId:          0x5575 (5575)
Revision:           1.39 (0139)
Port:               0
USB version/speed:  2/2
Manufacturer:       SanDisk
Product:            Cruzer Glide
SerialNumber:       xxxxxxxxxxxxxxxxxxxx
Address:            sysfs:/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1//device:/dev/vboxusb/001/011
Current State:      Busy

现在,Vagrantfile可以实现配置属性(如上所述):

 # Enable USB Controller on VirtualBox
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--usb", "on"]
    vb.customize ["modifyvm", :id, "--usbehci", "on"]
  end

  # Implement determined configuration attributes
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["usbfilter", "add", "0",
        "--target", :id,
        "--name", "Any Cruzer Glide",
        "--product", "Cruzer Glide"]
  end

如果需要对属性进行更多结果或任何修改,请根据config.vm.provider

VBoxManage中添加值

以下是您可以根据usbfilter定义的属性:

usbfilter                 add <index,0-N>
                            --target <uuid|vmname>|global
                            --name <string>
                            --action ignore|hold (global filters only)
                            [--active yes|no] (yes)
                            [--vendorid <XXXX>] (null)
                            [--productid <XXXX>] (null)
                            [--revision <IIFF>] (null)
                            [--manufacturer <string>] (null)
                            [--product <string>] (null)
                            [--remote yes|no] (null, VM filters only)
                            [--serialnumber <string>] (null)
                            [--maskedinterfaces <XXXXXXXX>]

在上面定义之后,USB设备可以在vagrant halt之后安装在来宾计算机上,然后是vagrant upvagrant provision,然后是vagrant reload

  

注意:由于USB设备可能会不时变化,因此很难提前预测,应定义哪个设备   在Vagrantfile中。因此,通过USB定义USB过滤器   VirtualBox GUI(设置&gt; USB&gt; USB设备过滤器)很多次   优于上述Vagrantfile实现。

参考using terminalusing UI

答案 1 :(得分:0)

我找到了解决方案。这是基于使用devcon工具的简短PowerShell脚本。

# Set location where devcon tool is placed

 Set-Location "D:\MSSDK\Tools\x64"

# Disconnect USB from host machine

.\devcon.exe remove *VID_096E*

# Reconect USB to virtual machine

.\devcon.exe rescan

devcon.exe是MS SDK工具包的一部分。即使没有物理断开连接,您也可以移除并连接任何USB设备。 USB从主机断开后,我重新扫描,并且在VirtualBox内可以看到USB设备。