USB Gerät in LXC Container unter Proxmox 7.x

Moin!

Heute machen wir wieder was zum Thema IOBroker. Wie der Titel schon verrät, beschäftigen wir uns mit dem Durchreichen eines USB Gerätes. In diesem Fall verwenden wir einen Zig Bee Stick CC2531. Dies gestaltet sich in einem unprivilegierten LXC Container etwas schwieriger als in einem privilegierten.

Ihr könnt vorab schon mal den Adapter „Zigbee“ installieren. Im Laufe des Beitrags wird der Parameter „ContainerID“ erwähnt. Ersetzt diesen bitte mit eurer Container Nr. 😛

Was wir benötigen:

Wir verbinden uns per SSH auf den Host. Als Erstes stecken wir den Stick ein. Am besten in einen Port, indem das Gerät auf ewig stecken bleiben kann. Anschließend prüfen wir, ob das Gerät erkannt wurde.

lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 051d:0003 American Power Conversion UPS
Bus 003 Device 006: ID 0451:16a8 Texas Instruments, Inc. 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Wir notieren uns für den nächsten Schritt die „Bus“ und „Device“ Zahlen. Mit diesen beiden Zahlenkombinationen können wir nun weiter arbeiten. Im Anschluss eignen wir uns die nächsten Zahlen an. Im unten stehenden Kommando ersetzt ihr einfach meine Zahlenkombination durch eure.

ls -l /dev/bus/usb/003/006
crw-rw-r-- 1 root root 189, 261 Mar  8 18:39 /dev/bus/usb/003/006

Wir beachten, die Zahl nach „root root“ und notieren auch diese. Jetzt editieren wir die „.conf“ eures Containers und tragen dort unsere vorher ermittelten Werte ein. Danach kann der Host eine ttyACM Schnittstelle generieren. Diese benötigen wir, um den Stick durchreichen zu können. Wichtig! Auch hier ersetzt ihr wieder meine Zahlen durch eure.

sudo nano /etc/pve/lxc/ContainerID.conf
lxc.cgroup2.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/bus/usb/003/006 dev/bus/usb/ none bind,optional,create=file

Ist dies erledigt, sollte eine neue Datei angelegt worden sein. Wir prüfen dies und notieren uns erneut die Zahl.

ls -l /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0 Mar  8 19:09 /dev/ttyACM0

Auch hier müssen wir uns erneut Zahlen notieren. In diesem Fall die Ziffern nach „dialout“. Mit der gewonnenen Erkenntnis können wir weiter arbeiten. Also erneut in die Config springen und diese um den unten stehenden Block erweitern. Wichtig! Auch hier ersetzt ihr wieder meine Zahlen durch eure.

sudo nano /etc/pve/lxc/ContainerID.conf
lxc.cgroup2.devices.allow: c 166:* rwm
lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file

Schlussendlich sollte eure Container Config durch die unten stehenden Zeilen erweitert worden sein.

lxc.cgroup2.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/bus/usb/003/006 dev/bus/usb/003/006 none bind,optional,create=file
lxc.cgroup2.devices.allow: c 166:* rwm
lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file

Damit das Gerät in einem LXC Container genutzt werden kann, müssen wir die Berechtigungen anpassen. Dies müssen wir seit Proxmox 7.x mit einer UDEV Regel erledigen. Dazu benötigen wir aber erneut weitere Informationen. Um diese Informationen zu bekommen, werden wir folgende Befehle absetzen und die Ziffernkombinationen nach dem Block „ATTRS…“ notieren.

root@node1:~# udevadm info -a -n /dev/ttyACM0 | grep '{idVendor}' | head -n1
    ATTRS{idVendor}=="0451"
root@node1:~# udevadm info -a -n /dev/ttyACM0 | grep '{idProduct}' | head -n1
    ATTRS{idProduct}=="16a8"

Ein letztes Mal müssen wir uns etwas notieren. Zur Abwechslung eine Kombination aus Zahlen und Buchstaben. Der Block hinter „ATTRS…“ ist für uns relevant. Mit den Informationen können wir unsere UDEV Regel definieren. Wir fügen dazu einfach die Ausgaben der Befehle, aus dem vorherigen Schritt, in den Befehl ein.

nano /etc/udev/rules.d/50-myusb.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", GROUP="users", MODE="0666"

Anschließend müssen wir das Neuladen der UDEV Rules noch manuell anstoßen. Dies erledigen wir wie folgt.

udevadm trigger

Ist das geschafft, starten wir den Container. Wie oben erwähnt, ersetzt ihr bitte die Variabel „ContainerID“ durch eure jeweilige ID des Containers.

sudo pct start ContainerID

Wir schließen das Terminal zum Host und springen in eine SSH Verbindung zum LXC Container. Dort angekommen prüfen wir, ob das Device auch korrekt durchgereicht wurde.

ls -la /dev/
crw-rw-rw-  1 nobody nogroup 166, 0 Mär  8 19:09 ttyACM0

Nun sind wir in den Maschinen fertig und öffnen das Web UI.
Instanzen —> Zigbee —> Auf den Maulschlüssel —> Einstellungen —> Oben links, Schnittstelle /tty/ACM0 auswählen —> Speichern —> Fertig!

Grüße gehen aus dem Archiv!

Abonnieren
Benachrichtige mich bei
guest
13 Kommentare
Älteste
Neuste Meist Bewerteste
Inline Feedbacks
Zeige alle Kommentare
13
0
Bitte lasse uns an deinen Gedanken teilhaben und kommentier den Beitrag.x
Cookie Consent mit Real Cookie Banner