USB passthrough para o contêiner LXD no Ubuntu 16.04

0

Eu preciso expor minha interface USB ao meu contêiner LXD e estou usando uma máquina Ubuntu 16.04. Executando "lsusb", posso ver as mesmas interfaces no meu host e no meu contêiner.

Dentro do meu contêiner Estou usando um software que explora essa interface USB (e o dispositivo conectado relacionado), mas durante a fase de execução, uma mensagem dizia:

"A abertura do USB falhou: permissões insuficientes"

Como adicionar permanentemente o repasse necessário?

Qualquer sugestão será apreciada

Muito obrigado

    
por Damiano Manicone 20.03.2017 / 17:24

2 respostas

1

O LXD GitHub tem muita documentação relacionada à configuração.

link

Pesquise por USB e você encontrará o que precisa.

citação: Configuração de dispositivos

O LXD sempre fornecerá ao container os dispositivos básicos necessários para que um sistema POSIX padrão funcione. Estes não são visíveis na configuração do contêiner ou do perfil e não podem ser substituídos.

Isso inclui:

/dev/null (character device)
/dev/zero (character device)
/dev/full (character device)
/dev/console (character device)
/dev/tty (character device)
/dev/random (character device)
/dev/urandom (character device)
/dev/net/tun (character device)
/dev/fuse (character device)
lo (network interface)

Qualquer outra coisa precisa ser definida na configuração do contêiner ou em um de seus perfis. O perfil padrão normalmente contém uma interface de rede para se tornar eth0 no contêiner.

Para adicionar dispositivos extras a um contêiner, as entradas do dispositivo podem ser adicionadas diretamente a um contêiner ou a um perfil.

Os dispositivos podem ser adicionados ou removidos enquanto o contêiner estiver sendo executado.

Cada entrada de dispositivo é identificada por um nome exclusivo. Se o mesmo nome for usado em um perfil subsequente ou na própria configuração do contêiner, a entrada inteira será substituída pela nova definição.

As entradas do dispositivo são adicionadas através de: lxc config device add [key = value] ...

= = = end quote = = =

Um exemplo de comando:

dispositivo de perfil lxc add [key = value] ...

Além disso, se você usar o LXD, é altamente recomendável assinar o alias de e-mail lxc-users, pois os desenvolvedores monitoram isso e respondem às perguntas e respostas diariamente.

link

Por fim, há um sub-reddit LXD no Reddit (se você usa o Reddit?) que não é para suporte, mas fornece muitas informações sobre o LXD.

link

    
por bmullan 21.03.2017 / 19:07
1

Por favor, tenha em mente que sou novo em responder, então edite conforme necessário.

Recentemente, precisei adicionar um controlador PS3 a um contêiner e consegui fazer o seguinte:

Primeiro, precisamos encontrar informações sobre nossos dispositivos. ou seja, é vendorid e productid então vamos executar lsusb

A saída deve ser semelhante a esta:

Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 058f:6362 Alcor Micro Corp. Flash Card Reader/Writer
Bus 001 Device 006: ID 054c:0268 Sony Corp. Batoh Device / PlayStation 3 Controller

Para o nosso contêiner, estamos interessados na parte do ID. Então, no meu caso 054c:0268

O 054c será o nosso "vendorid" e o 0268 é o nosso "productid"

Portanto, com base na documentação de configuração, devemos acabar com um comando como este para adicionar nosso dispositivo

lxc config device add \
<ContainerName> \
<DeviceName> \
usb \
vendorid=<vendorid>

Esse é o mínimo necessário para adicionar um dispositivo MAS, uma vez que somente o vendorid é especificado, ele adicionará TODOS os dispositivos com um fornecedor de correspondência. Se você quiser apenas um dispositivo específico, você também pode especificar o ID do produto.

Então, no meu caso (para mostrar um exemplo concreto), tenho:

lxc config device add \
pcsx2 \
ps3controllerblack \
usb \
vendorid=054c \
productid=0268

Como mostrado, meu ContainerName é "pcsx2" e o DeviceName pode ser o que você quiser, não precisa ser nada, então o meu é definido como "ps3controllerblack", algo fácil de lembrar

Uma última coisa a notar é que, mesmo com o dispositivo adicionado ao contêiner, para o meu controlador funcionar corretamente, eu também precisava adicionar seu arquivo de dispositivo ao container.

Então para mim eu tive que encontrar o arquivo do dispositivo, determinar seu tipo (unix-char ou unix-block) e depois adicioná-lo.

Meu controlador fornece um dispositivo de caractere em /dev/input/js0 então meu comando acaba sendo:

lxc config device add \
pcsx2 \
joystickdevice \
unix-char \
path=/dev/input/js0

E com isso eu deveria ter acesso ao meu dispositivo usb. Pode ser necessário adicionar mais à configuração e especificar o modo, uid ou gid para que os usuários adequados dentro do contêiner possam acessá-lo.

Se você inserir as informações incorretas no comando e precisar fazer isso, primeiro remova o dispositivo e tente novamente

lxc config device remove <ContainerName> <DeviceName>

Exemplo:

lxc config device remove pcsx2 ps3controllerblack
    
por HelpfulGuest 16.04.2017 / 03:47