it-swarm.com.de

USB-Passthrough für LXD-Container unter Ubuntu 16.04

Ich muss meine USB-Schnittstelle für meinen LXD-Container freigeben und verwende einen Ubuntu 16.04-Computer. Wenn ich "lsusb" laufen lasse, kann ich die Schnittstellen sowohl auf meinem Host als auch auf meinem Container gleich sehen.

In meinem Container verwende ich eine Software, die diese USB-Schnittstelle (und das zugehörige angeschlossene Gerät) ausnutzt, aber während der Ausführungsphase wird die folgende Meldung angezeigt:

"USB-Öffnen fehlgeschlagen: unzureichende Berechtigungen"

Wie füge ich das benötigte Passthrough dauerhaft hinzu?

Vorschläge werden geschätzt

Danke vielmals

1

Bitte denken Sie daran, dass ich neu in der Beantwortung bin. Bearbeiten Sie sie daher nach Bedarf.

Vor kurzem musste ich einem Container einen PS3-Controller hinzufügen, und dies gelang mir durch Folgendes:

Zuerst müssen wir die Informationen zu unseren Geräten finden. Das heißt, es ist vendorid und productid, also lasst uns lsusb ausführen.

Die Ausgabe sollte ungefähr so ​​aussehen:

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

Für unseren Container interessieren wir uns für den ID-Teil. Also in meinem Fall 054c:0268

Der 054c wird unsere "Vendorid" sein und der 0268 ist unsere "Productid"

Ausgehend von der Konfigurationsdokumentation sollten wir also einen Befehl wie diesen erhalten, um unser Gerät hinzuzufügen

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

Dies ist das Minimum, das zum Hinzufügen eines Geräts erforderlich ist, ABER da nur die Hersteller-ID angegeben ist, werden ALLE Geräte mit einer entsprechenden Hersteller-ID hinzugefügt. Wenn Sie nur dieses eine Gerät möchten, können Sie auch die Produkt-ID angeben.

Also für meinen Fall (um ein konkretes Beispiel zu zeigen) habe ich:

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

Wie gezeigt, ist mein Containername "pcsx2" und der DeviceName kann alles sein, was Sie wollen. Er muss nicht mit irgendetwas korrespondieren. Deshalb ist meiner auf "ps3controllerblack" gesetzt, etwas, an das ich mich leicht erinnern kann

Eine letzte Sache, die zu beachten ist, ist, dass ich auch mit dem Gerät, das dem Container hinzugefügt wurde, die Gerätedatei zum Container hinzufügen musste, damit mein Controller ordnungsgemäß funktioniert.

Also musste ich die Gerätedatei finden, ihren Typ bestimmen (Unix-Char oder Unix-Block) und sie dann hinzufügen.

Mein Controller stellt bei /dev/input/js0 ein Zeichengerät bereit, sodass mein Befehl letztendlich lautet:

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

Und damit sollte ich Zugriff auf mein USB-Gerät haben. Möglicherweise müssen Sie der Konfiguration weitere hinzufügen und den Modus, die UID oder die GID angeben, damit die richtigen Benutzer im Container darauf zugreifen können.

Wenn Sie zufällig die falschen Informationen in den Befehl eingeben und diese erneut ausführen müssen, entfernen Sie zuerst das Gerät und versuchen Sie es dann erneut

lxc config device remove <ContainerName> <DeviceName>

Beispiel:

lxc config device remove pcsx2 ps3controllerblack
2
HelpfulGuest

Der LXD GitHub verfügt über zahlreiche Dokumentationen zur Konfiguration.

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

Suchen Sie dort nach USB und finden Sie, was Sie brauchen.

zitat: Gerätekonfiguration

LXD stellt dem Container immer die Basisgeräte zur Verfügung, die für das Funktionieren eines Standard-POSIX-Systems erforderlich sind. Diese sind in der Container- oder Profilkonfiguration nicht sichtbar und können möglicherweise nicht überschrieben werden.

Diese beinhalten:

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

Alles andere muss in der Containerkonfiguration oder in einem ihrer Profile definiert werden. Das Standardprofil enthält normalerweise eine Netzwerkschnittstelle, die im Container zu eth0 wird.

Um einem Container zusätzliche Geräte hinzuzufügen, können Geräteeinträge direkt einem Container oder einem Profil hinzugefügt werden.

Geräte können hinzugefügt oder entfernt werden, während der Container ausgeführt wird.

Jeder Geräteeintrag ist durch einen eindeutigen Namen gekennzeichnet. Wenn derselbe Name in einem nachfolgenden Profil oder in der eigenen Konfiguration des Containers verwendet wird, wird der gesamte Eintrag durch die neue Definition überschrieben.

Geräteeinträge werden hinzugefügt durch: lxc config device add [key = value] ...

= = = Zitat beenden = = =

Ein Beispielbefehl:

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

Wenn Sie LXD verwenden, würde ich dringend empfehlen, den Mail-Alias ​​von lxc-users zu abonnieren, da die Entwickler dies überwachen und die Fragen und Antworten täglich beantworten.

https://lists.linuxcontainers.org/

Schließlich gibt es auf Reddit ein LXD-Sub-Reddit (wenn Sie Reddit verwenden?), Das nicht für den Support gedacht ist, aber viele nützliche Informationen zu LXD bietet.

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

0
bmullan