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 容器權限的東西。
通過添加白名單規則
lxc-cgroup
不是持久的,在測試我的 LXC 容器時,我在某個時候重置了容器並且沒有重新添加規則。lxc
即使沒有白名單(預設 lxc 規則) ,設備節點也會在容器中正確創建,c *:* m
但是當 lxc 容器嘗試使用它時,它會被拒絕訪問設備,如果沒有正確的 cgroup 權限,它就無法工作解決方法是添加
lxc.cgroup.devices.allow = c 189:* rwm
與
lxc.conf
您的系統相關。