USB Device Dauerhaft vom Host an einen LXC Container durchreichen

peterwalber

Member
Aug 24, 2023
12
0
6
Ich habe einen LXC Container in Proxmox . Dieser Container läuft in PVE 8 auf einem Intel NUC. In diesem Container läuft zigbee2mqtt. Ich habe auch einen Sonoff Zigebee Stick an einem USB Port des Intel NUC.

Code:
lsusb

Bus 001 Device 006: ID 10c4:ea60 Silicon Labs CP210x UART Bridge

Diesen Stick habe ich in der GUI von Proxmox und bei selektiertem Container mit Ressourcen->Hinzufügen an den Container durchgerecht. Funktioniert auch.

Ich kann auf den Sonoff Zigbee Stick im Container dann mit

Code:
root@ace-nuc:~# ls -la /dev/serial/by-id/
total 0
drwxr-xr-x 2 root root 60 Sep  8 18:16 .
drwxr-xr-x 4 root root 80 Sep  8 18:16 ..
lrwxrwxrwx 1 root root 13 Sep  8 18:16 usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_1cc3e44770d9ee11be41b44c37b89984-if00-port0 -> ../../ttyUSB0
root@ace-nuc:~#

zugreifen und zigbee2mqtt kann den Stcik finden.

Ich habe das Durchreichen in der GUI gemacht und keine Container Configurationen editiert.

Aber nach jedem reboot oder Stromausfall des NUCs ist das USB device wieder weg aus dem Container und wieder dem Host zugewiesen. Und dann muss ich wieder manuell durchreichen. Wie kann ich das Durchreichen des Sonoff Sticks so dauerhaft machen, dass auch nach einem reboot des NUCs der Sonoff Stick wieder zum Zielcontainer durchgereicht ist. Bei VMs funktioniert das doch problemlos.
 
Last edited:
Teil bitte mal pct config CTIDHIER.
pct config 107

Code:
root@ace-nuc:~# pct config 107
arch: amd64
cores: 2
description: <div align='center'>%0A  <a href='https%3A//Helper-Scripts.com' target='_blank' rel='noopener noreferrer'>%0A    <img src='https%3A//raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png' alt='Logo' style='width%3A81px;height%3A112px;'/>%0A  </a>%0A%0A  <h2 style='font-size%3A 24px; margin%3A 20px 0;'>Zigbee2MQTT LXC</h2>%0A%0A  <p style='margin%3A 16px 0;'>%0A    <a href='https%3A//ko-fi.com/community_scripts' target='_blank' rel='noopener noreferrer'>%0A      <img src='https%3A//img.shields.io/badge/&#x2615;-Buy us a coffee-blue' alt='spend Coffee' />%0A    </a>%0A  </p>%0A%0A  <span style='margin%3A 0 10px;'>%0A    <i class="fa fa-github fa-fw" style="color%3A #f5f5f5;"></i>%0A    <a href='https%3A//github.com/community-scripts/ProxmoxVE' target='_blank' rel='noopener noreferrer' style='text-decoration%3A none; color%3A #00617f;'>GitHub</a>%0A  </span>%0A  <span style='margin%3A 0 10px;'>%0A    <i class="fa fa-comments fa-fw" style="color%3A #f5f5f5;"></i>%0A    <a href='https%3A//github.com/community-scripts/ProxmoxVE/discussions' target='_blank' rel='noopener noreferrer' style='text-decoration%3A none; color%3A #00617f;'>Discussions</a>%0A  </span>%0A  <span style='margin%3A 0 10px;'>%0A    <i class="fa fa-exclamation-circle fa-fw" style="color%3A #f5f5f5;"></i>%0A    <a href='https%3A//github.com/community-scripts/ProxmoxVE/issues' target='_blank' rel='noopener noreferrer' style='text-decoration%3A none; color%3A #00617f;'>Issues</a>%0A  </span>%0A</div>%0A
features: nesting=1,fuse=1
hostname: zigbee2mqtt
memory: 1024
net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:29:67:D6,ip=dhcp,type=veth
onboot: 1
ostype: debian
rootfs: local-lvm:vm-107-disk-0,size=5G
swap: 512
tags: community-script;mqtt;smarthome;zigbee
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 188:* rwm
lxc.cgroup2.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/serial/by-id  dev/serial/by-id  none bind,optional,create=dir
lxc.mount.entry: /dev/ttyUSB0       dev/ttyUSB0       none bind,optional,create=file
lxc.mount.entry: /dev/ttyUSB1       dev/ttyUSB1       none bind,optional,create=file
lxc.mount.entry: /dev/ttyACM0       dev/ttyACM0       none bind,optional,create=file
lxc.mount.entry: /dev/ttyACM1       dev/ttyACM1       none bind,optional,create=file
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
root@ace-nuc:~#
 
Ich sehe hier keine via GUI erstellte Durchreichung. Das würde dev[n]: benutzen. Was du da hast sollte aber dennoch funktionieren.
Soweit ich weiß sollte es genügen /dev/serial/by-id/usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_1cc3e44770d9ee11be41b44c37b89984-if00-port0 durchzureichen.
Was sagt ls -l /dev/serial/by-id/ auf der node und im CT denn nach einem reboot? Wie schaut die Z2M config aus?
 
Last edited:
Ich sehe hier keine via GUI erstellte Durchreichung. Das würde dev[n]: benutzen. Was du da hast sollte aber dennoch funktionieren.
Generell sollte es genügen /dev/serial/by-id/usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_1cc3e44770d9ee11be41b44c37b89984-if00-port0 durchzureichen.
Was sagt ls -l /dev/serial/by-id/ auf der node und im CT denn nach einem reboot? Wie schaut die Z2M config aus?
nach einem Reboot auf dem LXC container

Code:
root@zigbee2mqtt:~# ls -l /dev/serial/by-id/
total 0
lrwxrwxrwx 1 root root 13 Sep  8 18:16 usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_1cc3e44770d9ee11be41b44c37b89984-if00-port0 -> ../../ttyUSB0
root@zigbee2mqtt:~#

nach einem reboot auf dem Proxmox host

Code:
Linux ace-nuc 6.8.12-13-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.12-13 (2025-07-22T10:00Z) x86_64


root@ace-nuc:~# ls -al /dev/serial/by-id/
total 0
drwxr-xr-x 2 root root 60 Sep  8 18:16 .
drwxr-xr-x 4 root root 80 Sep  8 18:16 ..
lrwxrwxrwx 1 root root 13 Sep  8 18:16 usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_1cc3e44770d9ee11be41b44c37b89984-if00-port0 -> ../../ttyUSB0
root@ace-nuc:~#

ist jetzt auf beiden Systemen zu sehen. Auf dem proxmox host ace-nuc und auf dem zigbeemqtt container
 
Last edited:
Soll heißen das Problem taucht nicht mehr auf? Nur zur Klarstellung, in Z2M wird folgendes genutzt?
YAML:
serial:
    port: /dev/serial/by-id/usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_1cc3e44770d9ee11be41b44c37b89984-if00-port0
 
Last edited:
Nach diesem Reboot scheint es funktioniert zu haben. Ich verstehe trotzdem nicht, warum /dev/serial/by-id/ bei einem vorherigen reboot aus dem Container verschwunden ist. Und ich verstehe nicht, warum jetzt /dev/serial/by-id/ im Container und im Host zu sehen ist. Ich dachte, eine Interface kann immer nur in einem System auftauchen
 
Möglicherweise liegt es ja auch an diesem Block des Helper-Scripts:

Code:
lxc.cgroup2.devices.allow: c 188:* rwm
lxc.cgroup2.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/serial/by-id  dev/serial/by-id  none bind,optional,create=dir
lxc.mount.entry: /dev/ttyUSB0       dev/ttyUSB0       none bind,optional,create=file
lxc.mount.entry: /dev/ttyUSB1       dev/ttyUSB1       none bind,optional,create=file
lxc.mount.entry: /dev/ttyACM0       dev/ttyACM0       none bind,optional,create=file
lxc.mount.entry: /dev/ttyACM1       dev/ttyACM1       none bind,optional,create=file

Dadurch mountest du den Stick ja mindesten 2 x in den Container ...
 
verstehen tue ich das jetzt nicht. Sind die beiden mounts /dev/serial/by-id und /dev/ttyUSB0 ? Was soll ich denn machen ?
Soll ich den mount von /dev/ttyUSB0 löschen ?
 
Last edited:
Sind die beiden mounts /dev/serial/by-id und /dev/ttyUSB0 ?
Das verstehen wohl nur die Ersteller des Scriptes ... ;)

Ich verwende den Sonoff-Zigbee Stick seit langer Zeit absolut problemlos mit folgender Config in IOBroker:

Code:
arch: amd64
cores: 1
dev0: /dev/ttyUSB0,mode=0666
features: mount=cifs,nesting=1
hostname: iob22
memory: 3072
net0: name=eth0,bridge=vmbr0,gw=192.168.0.2,hwaddr=BC:24:11:F9:6B:A6,ip=192.168.0.201/24,type=veth
onboot: 1
ostype: debian
rootfs: local-lvm:vm-1201-disk-0,size=4G
startup: order=3
swap: 768
tags: system

Bevor es die GUI Möglichkeit gab waren für den Stick auch nur folgende Zeilen notwendig.

Code:
lxc.cgroup2.devices.allow: c 188:* rwm
lxc.cgroup2.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/ttyUSB0       dev/ttyUSB0       none bind,optional,create=file

Ich würde das alles auskommentieren, und die Verbindung über GUI einrichten.
 
/dev/ttyUSB0 ist nicht wirklich ein verlässlicher Name. Selbes mit /dev/sda.
 
Last edited:
Habs gleich nach dem posten umgebaut. Diese Sonoff-Sticks haben so lange Namen dass man sie in der Proxmox-Shell schwer kopieren kann.

Code:
/dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_be0d204d8c29ec119ad36f7840c9ce8d-if00-port0

Aber heute hab ich mich durchgerungen und es endlich gemacht :)
Hatte aber jahrelang kein Problem, mit 3 angeschlossenen USB-Geräten (USV, Zigbee und HDD). Zigbee war stabil ttyUSB0
 
  • Like
Reactions: Impact
Habs gleich nach dem posten umgebaut. Diese Sonoff-Sticks haben so lange Namen dass man sie in der Proxmox-Shell schwer kopieren kann.

Code:
/dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_be0d204d8c29ec119ad36f7840c9ce8d-if00-port0

Aber heute hab ich mich durchgerungen und es endlich gemacht :)
Hatte aber jahrelang kein Problem, mit 3 angeschlossenen USB-Geräten (USV, Zigbee und HDD). Zigbee war stabil ttyUSB0
Ich lass es erst mal wie ist es. Scheint ja jetzt zu laufen
 
Super wenns jetzt passt!

Ich würde jetzt aber trotzdem alle nicht verwendeten Zeilen auskommentieren. Spätestens wenn du wieder einen LXC mit so einem Script installierts (+ Reboot), wird es wieder zu seltsamen Effekten kommen ....

Ich hab keine Ahnung was passiert, wenn ein USB-Gerät gleichzeitig an mehrere Container durchgereicht wird.
 
Last edited:
Ja aber was sind die nicht verwendeten Zeilen ?
Code:
lxc.mount.entry: /dev/ttyUSB1       dev/ttyUSB1       none bind,optional,create=file
lxc.mount.entry: /dev/ttyACM0       dev/ttyACM0       none bind,optional,create=file
lxc.mount.entry: /dev/ttyACM1       dev/ttyACM1       none bind,optional,create=file
 
Für Z2M wirst du vermutlich außer dem Gerät selbst via dev[n]: keine der lxc. Zeilen brauchen.