LXC 容器的 USB 直通

LXC 容器的 USB 直通

问题:

因此,我一直在尝试让 USB 设备(primesense - Kinect 的 OEM 参考)传递到 LXC 容器,这样我就可以进行开发,而不必担心实验库污染我的稳定系统。

我认为我已经完成了所有必要的操作,但是容器内运行的应用程序无法访问该设备。

我使用带有 LXC 1.0.0 的 Ubuntu 12.04 x64 主机,容器是从 12.04 模板创建的。 (我在askubuntu上很活跃,但我相信这个问题更适合这里)

问题:

如何通过 USB 传递到(特权)LXC 容器。

所采取的行动:

我的主机的 udev 规则和容器的 udev 规则是相同的

SUBSYSTEM=="usb", ATTR{idProduct}=="0609", ATTR{idVendor}=="1d27",
MODE:="0666", OWNER:="root", GROUP:="video"

在主机上,设备节点可见为:

$ ls -l /dev/bus/usb/001/015
crw-rw-rw- 1 root video 189, 14 Jun 18 15:27 /dev/bus/usb/001/015

在容器中,设备节点可见为:

$ ls -l /dev/bus/usb/001/015 
crw-rw-rw- 1 root video 189, 14 Jun 18 22:07 /dev/bus/usb/001/015

另外,我已经通过了

sudo lxc-cgroup  --n CN1 devices.allow "c 189:* rwm"

为了将 lxc 的 USB 设备列入白名单

不幸的是,当我尝试在主机上运行应用程序时,设备被识别并按预期工作。在容器中运行相同的应用程序(具有相同的相关库)会导致应用程序无法找到设备,即使我显式传递 URI 也是如此。

我正在尝试将问题范围缩小到库错误(我可以修复,但我还不想提交这个兔子洞)或我缺少 LXC 容器权限的问题。

答案1

添加白名单规则lxc-cgroup并不是持久性的,在测试我的 LXC 容器时,我在某个时刻重置了容器,并且没有重新添加规则。即使没有lxc白名单(默认的 lxc 规则) ,设备节点也会在容器中正确创建,c *:* m但 lxc 容器在尝试使用设备时会被拒绝访问该设备,如果没有正确的 cgroup 权限,它将无法工作

解决方法是添加

  lxc.cgroup.devices.allow = c 189:* rwm

lxc.conf与您的系统相关的。

相关内容