web-dev-qa-db-ja.com

Ubuntu 16.04上のLXDコンテナーのUSBパススルー

USBインターフェイスをLXDコンテナーに公開する必要があり、Ubuntu 16.04マシンを使用しています。 「lsusb」を実行すると、ホストとコンテナの両方で同じインターフェイスが表示されます。

コンテナ内では、このUSBインターフェイス(および関連する接続デバイス)を利用するソフトウェアを使用していますが、実行フェーズ中に次のメッセージが表示されます。

「USBのオープンに失敗しました:権限が不十分です」

必要なパススルーを永続的に追加する方法は?

どんな提案も大歓迎です

どうもありがとう

1

私は回答が初めてなので、必要に応じて編集してください。

最近、PS3コントローラーをコンテナーに追加する必要がありましたが、次の方法で追加できました。

まず、デバイス情報を見つける必要があります。つまり、vendoridproductidなので、lsusbを実行しましょう

出力は次のようになります。

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

コンテナについては、ID部分に関心があります。だから私の場合は054c:0268

054cが「ベンダー」になり、0268が「生産ID」になります

そのため、構成ドキュメントに基づいて、デバイスを追加するために次のようなコマンドを実行する必要があります

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

ベンダーIDのみが指定されているため、デバイスを追加するために必要な最小値は、一致するベンダーIDを持つすべてのデバイスを追加することです。特定の1つのデバイスのみが必要な場合は、productidも指定できます。

したがって、私の場合(具体的な例を示すため)があります。

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

示されているように、私のContainerNameは「pcsx2」であり、DeviceNameには任意の名前を指定できます。何にも対応する必要はないため、「ps3controllerblack」に設定します。

最後に注意することは、デバイスがコンテナに追加された場合でも、コントローラーが適切に機能するためには、デバイスのデバイスファイルもコンテナに追加する必要があったことです。

そのため、私はデバイスファイルを見つけ、そのタイプ(unix-charまたはunix-block)を判別してから追加する必要がありました。

私のコントローラーは/dev/input/js0でキャラクターデバイスを提供するため、私のコマンドは次のようになります。

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

それにより、USBデバイスにアクセスできるようになります。コンテナ内の適切なユーザーがアクセスできるように、構成にさらに追加して、モード、uid、またはgidを指定する必要がある場合があります。

間違った情報をコマンドに入力し、それをやり直す必要がある場合は、最初にデバイスを取り外してから再試行してください

lxc config device remove <ContainerName> <DeviceName>

例:

lxc config device remove pcsx2 ps3controllerblack
2
HelpfulGuest

LXD GitHubには、構成に関連する多くのドキュメントがあります。

https://github.com/lxc/lxd/blob/master/doc/configuration.md

そこでUSBを検索すると、必要なものが見つかります。

quote:デバイス構成

LXDは常に、標準POSIXシステムが機能するために必要な基本的なデバイスをコンテナーに提供します。これらは、コンテナまたはプロファイルの構成では表示されず、オーバーライドされない場合があります。

それらが含まれます:

/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)

それ以外は、コンテナ構成またはそのプロファイルのいずれかで定義する必要があります。通常、デフォルトプロファイルには、コンテナ内でeth0になるネットワークインターフェイスが含まれます。

コンテナに追加のデバイスを追加するには、デバイスエントリをコンテナまたはプロファイルに直接追加できます。

コンテナの実行中にデバイスを追加または削除できます。

すべてのデバイスエントリは一意の名前で識別されます。同じ名前が後続のプロファイルまたはコンテナ自体の構成で使用される場合、エントリ全体が新しい定義によって上書きされます。

デバイスエントリは、lxc config device add [key = value] ...を介して追加されます。

= = =引用終了= = =

コマンドの例:

lxc profile device add [key = value] ...

また、LXDを使用する場合は、開発者がそれを監視し、Q&Aに毎日答えるため、lxc-usersメールエイリアスにサブスクライブすることを強くお勧めします。

https://lists.linuxcontainers.org/

最後に、RedditにはLXD sub-redditがあります(Redditを使用している場合)。これはサポート用ではありませんが、LXDに関する多くの優れた情報を提供します。

https://www.reddit.com/r/LXD/

0
bmullan