Proxmox - USB-Geräte in LXC-Container

Mit ** gekennzeichnete Links auf dieser Seite sind Affiliatelinks.

Proxmox - USB-Geräte in LXC-Container
Proxmox - USB-Geräte in LXC-Container
  • Matthias Kleine
  • 26.05.2023
  • Proxmox

Ich wurde jetzt schon mehrfach gefragt, wie man am besten die USB-Geräte (wie Zigbee-Sticks) in einen LXC-Container unter Proxmox durchreicht. Nun habe ich mir die Mühe gemacht, das Ganze in einem Video anhand von drei Beispielen zu dokumentieren. Als erstes reiche ich meinen 3D-Drucker an den OctoPrint-Container durch, danach die Webcam für die Timelapse-Erstellung und zum Schluss noch einen Zigbee-Stick für den ioBroker. Damit solltest Du erstmal alle Fälle erschlagen können. Falls nicht, gerne auf YouTube unter dem Video einen Kommentar da lassen. Alle Befehle und Infos findest Du hier im Beitrag.

Vom Prinzip wird immer per udev eine neue Datei angelegt, welche das Gerät genau identifiziert und keinen generischen Namen mehr hat. Und genau diese Datei wird dann in einen Container gemappt. Vom Prinzip eigentlich ganz einfach. Nur leider erlaubt die grafische Proxmox-Oberfläche das nicht direkt. Also muss die Shell ran. Aber auch das ist kein Problem, da ich Dir ja alle Schritte im Video zeige.

Video

Hausbau-Kurs

3D-Drucker (Snapmaker)

Damit ich direkt aus OctoPrint drucken kann, brauche ich eine USB-Verbindung zum Drucker um die einzelnen Befehle dorthin senden zu können. Hier alle Befehle aus dem Video:

lsusb
dmesg -C

lsusb
demesg

Nachdem wir nun die VendorID und ProductID kennen, können wir eine Regel für udev anlegen. Diese kommt in folgende Datei:

nano /etc/udev/rules.d/99-usb-serial.rules

Der Inhalt sieht wie folgt aus:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523" SYMLINK+="ttySNAPMAKER0"
KERNEL=="ttyUSB[0-9]*",MODE="0666"

Jetzt kann die neue Regel angewendet werden und wir überprüfen das Ergebnis:

udevadm trigger
ls -la /dev/tty*

Im nächsten Schritt wird die neu erstellte Datei in den Container gemappt:

cd /etc/pve/nodes/$(hostname)/lxc
ls -la
nano <id>.conf

In meinem Fall sieht der Eintrag wie folgt aus (bitte anpassen):

lxc.mount.entry: /dev/ttySNAPMAKER0 dev/ttyUSB0 none bind,optional,create=file

Nachdem der Container gestoppt und gestaret wurde, sollte alles funktionieren.

Fehlersuche

Wie Du im Video gesehen hast, hatte ich einen fehlerhaften Eintrag in der Container-Konfiguration. Mit diesen Befehlen bin ich der Sache auf den Grund gegangen:

lxc-start -n 104 -d --logfile 104-lxc.log -l debug
nano 104-lxc.log
systemctl status pve-container@104.service

Die ID des Containers muss natürlich entsprechend angepasst werden.

USB-Kamera

lsusb
dmesg -C

lsusb
demesg

udevadm info -a -n /dev/video0

Nachdem wir nun die VendorID und ProductID kennen, können wir eine Regel für udev anlegen. Diese kommt in folgende Datei:

nano /etc/udev/rules.d/99-usb-serial.rules

Der Inhalt sieht wie folgt aus:

SUBSYSTEM=="video4linux", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0825" SYMLINK+="videoLOGITECH0"
KERNEL=="video[0-9]*",MODE="0666"

Jetzt kann die neue Regel angewendet werden und wir überprüfen das Ergebnis:

udevadm trigger
ls -la /dev/video*

Im nächsten Schritt wird die neu erstellte Datei in den Container gemappt:

cd /etc/pve/nodes/$(hostname)/lxc
ls -la
nano <id>.conf

In meinem Fall sieht der Eintrag wie folgt aus (bitte anpassen):

lxc.mount.entry: /dev/videoLOGITECH0 dev/video0 none bind,optional,create=file

Zigbee-Stick

lsusb
dmesg -C

lsusb
demesg

udevadm info -a -n /dev/ttyACM0

Nachdem wir nun die VendorID und ProductID kennen, können wir eine Regel für udev anlegen. Diese kommt in folgende Datei:

nano /etc/udev/rules.d/99-usb-serial.rules

Der Inhalt sieht wie folgt aus:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d4" SYMLINK+="ttyZIGBEE0"
KERNEL=="ttyACM[0-9]*",MODE="0666"

Jetzt kann die neue Regel angewendet werden und wir überprüfen das Ergebnis:

udevadm trigger
ls -la /dev/tty*

Im nächsten Schritt wird die neu erstellte Datei in den Container gemappt:

cd /etc/pve/nodes/$(hostname)/lxc
ls -la
nano <id>.conf

In meinem Fall sieht der Eintrag wie folgt aus (bitte anpassen):

lxc.mount.entry: /dev/ttyZIGBEE0 dev/ttyACM0 none bind,optional,create=file
Du willst mehr?

Smart-Home-Trainings von A-Z

Steig noch tiefer in die Themen ein und meistere Deine Projekte! Über 13.000 Teilnehmer konnten sich schon von der Qualität der Online-Kurse überzeugen.

ioBroker-Master-Kurs

ioBroker-Master-Kurs

Mehr Infos
Hausbau-Kurs

Hausbau mit KNX

Mehr Infos
Lox-Kurs

Lox-Kurs

Mehr Infos
Node-RED-Master-Kurs

Node-RED-Master-Kurs

Mehr Infos