PROBLEMA:
Estou tentando obter um dispositivo USB (primesense - a referência OEM para o Kinect) para passar para um contêiner LXC para que eu possa desenvolver sem me preocupar em poluir meu sistema estável com bibliotecas experimentais.
Acho que fiz tudo o que é necessário, mas os aplicativos em execução no contêiner não podem acessar o dispositivo.
Estou usando o host Ubuntu 12.04 x64 com o LXC 1.0.0, o contêiner é criado a partir do modelo 12.04. (Eu estou ativo no askubuntu, mas acredito que a questão se encaixa mais aqui)
Pergunta:
Como você passa pelo usb para um contêiner LXC (privilegiado).
Ações tomadas:
Minhas regras do udev para o host e as regras do udev para o contêiner são as mesmas
SUBSYSTEM=="usb", ATTR{idProduct}=="0609", ATTR{idVendor}=="1d27",
MODE:="0666", OWNER:="root", GROUP:="video"
No host, o nó do dispositivo é visível como:
$ ls -l /dev/bus/usb/001/015
crw-rw-rw- 1 root video 189, 14 Jun 18 15:27 /dev/bus/usb/001/015
No contêiner, o nó do dispositivo é visível como:
$ ls -l /dev/bus/usb/001/015
crw-rw-rw- 1 root video 189, 14 Jun 18 22:07 /dev/bus/usb/001/015
Além disso, passei
sudo lxc-cgroup --n CN1 devices.allow "c 189:* rwm"
Para colocar na lista branca dispositivos usb para lxc
Infelizmente, quando tento executar um aplicativo no host, o dispositivo é reconhecido e funciona como esperado. Executar o mesmo aplicativo no contêiner (com as mesmas bibliotecas relevantes) faz com que o aplicativo não consiga encontrar o dispositivo, mesmo quando eu explicitamente passar o URI.
Estou tentando restringir o problema a um bug da biblioteca (que eu poderia consertar, mas não quero comprometer esse buraco ainda) ou algo que estou perdendo com as permissões para os contêineres do LXC.