我需要将我的USB接口暴露给我的LXD容器,而我正在使用Ubuntu 16.04机器。运行“lsusb”,我可以在主机和容器上看到相同的接口。
在我的容器内我使用的软件利用了这个USB接口(和相关的连接设备),但在执行阶段,一条消息告诉:
“USB打开失败:权限不足””USB open failed: insufficient permissions”
下面以添加PS3控制器为例,描述如何将PS3设备添加进容器内
首先,我们需要找到我们的设备信息。即它vendorid
,productid
所以让我们跑lsusb
输出应该类似于:
1 2 3 4 |
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 004: ID 058f:6362 Alcor Micro Corp. Flash Card Reader/Writer Bus 001 Device 006: ID 054c:0268 Sony Corp. Batoh Device / PlayStation 3 Controller |
对于我们的容器,我们对ID部分感兴趣。所以在我的情况下 054c:0268
这054c
将是我们的“工厂”,而且 0268
是我们的“产品”
因此,根据配置文档,我们最终应该使用这样的命令来添加我们的设备
1 2 3 4 5 |
lxc config device add \ <ContainerName> \ <DeviceName> \ usb \ vendorid=<vendorid> |
只指定了vendorid,它将添加具有匹配的vendorid的所有设备。如果您只想要那个特定的设备,您也可以指定productid。
所以对于我的情况(显示一个具体的例子)我有:
1 2 3 4 5 6 |
lxc config device add \ pcsx2 \ ps3controllerblack \ usb \ vendorid=054c \ productid=0268 |
ContainerName是“pcsx2”,DeviceName可以是你想要的任何东西,它不需要对任何东西进行处理,所以设置为“ps3controllerblack”
最后要注意的是,即使将设备添加到容器中,为了使控制器正常工作,还需要将它的设备文件添加到容器中。
所以必须找到设备文件,确定它的类型(unix-char或unix-block),然后添加它。
我的控制器提供了一个字符设备,/dev/input/js0
所以命令最终是:
1 2 3 4 5 |
lxc config device add \ pcsx2 \ joystickdevice \ unix-char \ path=/dev/input/js0 |
有了它,我应该可以访问我的USB设备。可能需要向配置中添加更多内容并指定模式,uid或gid,以便容器中的适当用户可以访问它。
如果您碰巧在命令中输入了错误信息并需要执行此操作,请首先删除该设备,然后重试
1 |
lxc config device remove <ContainerName> <DeviceName> |
例如:
1 |
lxc config device remove pcsx2 ps3controllerblack |
如果是要在LXD容器中进行Android编程,可以参考这个:
https://stgraber.org/2017/03/27/usb-hotplug-with-lxd-containers/