问题:
因此,我一直在尝试让 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
与您的系统相关的。