Usb

LXC 容器的 USB 直通

  • June 18, 2014

問題:

所以我一直在嘗試讓一個 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您的系統相關。

引用自:https://unix.stackexchange.com/questions/137931