問題:
因此,我一直在嘗試讓 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
與您的系統相關的。