Proxmox: USB Passthrough an LXC Container (UZB-1 Z-Wave USB Stick)
Zusätzlich zum Proxmox und Proxmox: LXC Tutorial möchte ich heute gerne zeigen, wie man einen USB Stick zu einem Container durchreicht. Ich habe so meinen UZB1 Z-Wave USB Stick zu einer LXC mit Ubuntu und FHEM durchgereicht. Analog dazu kannst du jeden CUL oder andere USB-Geräte durchreichen.
Inhalt
Vorbereitungen in Proxmox
Als erster wählen wir uns über SSH in unseren Proxmox Server ein.
ssh root@192.168.178.XX
Nun stoppen wir den LXC Container, an den das USB-Gerät durchgereicht werden soll
pct stop 113
Die Nummer enspricht deiner VM / LXC – ID in Proxmox. Diese findest du im Proxmox Webinterface heraus
Mit folgendem Befehl kannst du nun die verbundenen USB-Geräte auflisten. Es empfiehlt sich zuerst eine Auflistung ohne eingesteckten USB-Stick anzufertigen und dann nochmal, nachdem der Stick eingsteckt wurde
lsusb
Wie du auf dem folgendem Screenshot erkennen kannst, heißt mein UZB1 Stick „Sigma Designs, Inc. und hat die BUS Nummer 1 und Device Nummer 18. Du hast vermutlich eine andere Nummer -> notiere dir diese.
Mittels folgendem Befehl kannst du nun den DeviceTree anzeigen. Wichtig: Trage hier deine BUS und DEVICE Nummer ein
ls -l /dev/bus/usb/001/018
Es werden erneut zwei Zahlen ausgegeben, wobei nur die erste für uns relevant ist
crw-rw-r– 1 root root 189, 17 Jul 12 18:35 /dev/bus/usb/001/018
Die Nummer 189 notierst du dir ebenfalls. Als nächstes müssen wir die Konfigurationsdatei für den LXC Container finden und editieren. Höchstwahrscheinlich findest du deine Konfigurationsdatei unter /etc/pve/nodes/pve/lxc – Schaue dazu am besten noch im Proxmox Webinterface welche ID dein Container hat.
Mit folgendem Befehl wechselst du in den Ordner mit den Konfigurationsdateien
cd /etc/pve/nodes/pve/lxc
mit „ls“ kannst du dir dann den Ordnerinhalt anzeigen lassen
nano 113.conf
Hier fügen wir folgende Zeilen am Ende der Datei ein
lxc.cgroup.devices.allow: c 189:* rwm lxc.mount.entry: /dev/bus/usb/001/018 dev/bus/usb/001/018 none bind,optional,create=file
Trage hier entsprechend die BUS und Devicenummer, sowie die Nummer bei der Ausgabe von ls -l /dev/bus ….. ein
In meinem Fall mit dem UZB1 hat das aber noch nicht ausgereicht. Es wird ein Gerät mit dem Namen ttyACM0 angelegt. Dieses müssen wir ebenfalls durchreichen
Führe folgenden Befehl aus und notiere dir wieder die erste Nummer
ls -l /dev/ttyACM0
Dann bearbeiten wir nochmal die LXC Konfig-Datei:
sudo nano 113.conf
Und fügen am Ende nochmal zwei Zeilen hinzu
lxc.cgroup.devices.allow: c 166:* rwm lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file
Am Ende sieht die Konfig-Datei in etwas so aus:
Dann statten wir das Gerät ttyACM0 noch mit den nötigen Rechten aus
chmod o+rw /dev/ttyACM0
Zuletzt starten wir den LXC Container erneut und können im nächsten Punkt überprüfen, ob alles soweit geklappt hat
pct start 113
Überprüfung im Container
Verbinde dich mittels SSH mit deinem LXC
ssh NUTZERNAME@IP-ADRESSE
mit „lsusb“ kannst du dir auch hier die USB-Geräte anzeigen lassen. Ob das Gerät ttyACM0 angelegt wurde erfährst du unter den Devices:
cd /dev
ls
Fazit
Zugegeben, ein wenig kompliziert ist es leider schon, allerdings funktioniert es wirklich einwandfrei. Wenn du dieses Tutorial auch bei anderen Geräte erfolgreich getestet hast würde ich mich über einen kurzen Kommentar freuen und könnte dies diesem Artikel hinzufügen.
Ähnliche Beiträge
- Proxmox: LXC Linux Container erstellen
- Intel NUC: Proxmox mit Ubuntu VM für FHEM
- Xiaomi Aqara (ZigBee) ohne Mi Smart Gateway verwenden
- deCONZ: Hue-Bridge auf dem Raspberry Pi emulieren
- Kostenloses FHEM Backup in die Cloud (z.B. Dropbox)
- FreeNAS / TrueNAS für PLEX im HP Microserver Gen8 + Steuerung durch FHEM
- HomeMatic CCU2 mit YAHM auf Raspberry Pi 3
- QNAP NAS mit SNMP in FHEM einbinden
- LG Soundbar Airplay-fähig machen mit AirConnect
- Upgrade Raspbian Stretch Lite zur Desktop Version
Hallo Emanuel, ich habe alles genau so gemacht wie beschrieben. Installiert habe ich Debian 9.3. Jetzt wollte ich einen USB Stick wie hier beschrieben durchreichen. Leider scheitert es schon an dem ersten Befehl „pct stop 102“. Es kommt dann „command not found.“ Auch der Befehl lsusb wird mit „command not found“ beantwortet. Hast du eine Idee woran es liegen könnte.
Hey! Gibst du den Befehl pct stop 102 in der Proxmox Konsole ein? Ich schätze du bist in der falschen Shell, die beiden Befehle müssen funktionieren.
lg
Für lsusb musst du da erst folgendes installieren:
sudo apt-get install usbutils
Hallo,
ich steige gerade vom Raspy auf einen Nuc8i3 um. Von diesem Blog inspiriert nutze ich Proxmox und LXC. Das hat soweit auch geklappt und fhem läuft bereits.
Jetzt versuche ich den JeeLink vom Raspberry an den Nuc zu bekommen und bin dabei wie oben beschrieben vorgegangen. Leider stoße ich hier aber auf Probleme.
lsusb funktioniert noch und bringt folgende Antwort
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0aaa Intel Corp.
Bus 001 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Dabei ist der Future Technology Devices International der JeeLink
Bei ls -la /dev/ttyACM* treten Probleme auf und ich bekomme folgende Antwort:
ls: cannot access ‚/dev/ttyACM*‘: No such file or directory
ls -la /dev/ttyUSB* sieht dann wieder besser aus:
crw-rw—- 1 root dialout 188, 0 Feb 19 11:54 /dev/ttyUSB0
Laut Anleitung benötige ich aber auch die Werte der ttyACM abfrage.
Hast Du eine Idee weshalb bei mir hier die Fehlermeldung kommt und wie ich das Problem lösen kann?
Hallo Andy,
bist du weiter gekommen? Habe ein ähnliches Problem mit einem 3D-Drucker…
Bzgl. fhem habe ich das so gelöst, dass ich fhem unter proxmox laufen habe und den CUL an einem Raspi mit Raspbian. Den CUL kannst du dann mit ser2net o.Ä. an die VM weiterreichen. Damit hast du dann die Performace der VW und den CUL trotzdem angebunden (ggf. sogar dezentral, das war bei mir der ausschlaggebende Punkt – großer Server steht im Keller und CUL aufgrund der Reichweite im Erdgeschoss).
Viele Grüße
Felix
Hi,
ich habe da ein ähnlich gelagertes Problem. Ich hatte testweise einen CUL von meinem (noch produktiven) Raspberry Pi abgezogen und mittels dieser Anleitung auch durchgereicht bekommen. Nun habe ich das gleiche (der CUL steckt inzwischen wieder im Raspi) mit einem Bluetooth-Stick probiert.
Der BT-Stick hat die gleichen Daten, wie vorher der CUL (gleicher Steckplatz), in meinem Fall 002/002, nach Umstecken in einen anderen Port dann 002/003.
root@pve:~# lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ls -l /dev/bus/usb/002/003 liefert dann aber ein unerwartet Ergebnis:
crw-rw-r– 1 root root 189, 130 Jun 6 08:22 /dev/bus/usb/002/003
Hier werden also zwei Nummern ausgegeben, die 189 hatte ich auch beim CUL (und nur die) angezeigt bekommen. Daher habe ich mal vermutet, dass 130 hier die richtige Nummer wäre.
DIe 100.conf sieht so aus:
lxc.cgroup.devices.allow: c 130:* rwm
lxc.mount.entry: /dev/bus/usb/002/003 dev/bus/usb/002/003 none bind,optional,create=file
Aber ls -la /dev/ttyACM* liefert mir dann das gleiche Ergebnis wie bei Andy.
Hallo Arne, sorry für die späte Antwort. Also mit einem Bluetooth-Dongle hatte ich auf meine Probleme, hab es dann letztendlich aufgegeben weil ich mehrfach gelesen habe dass es nicht geht 🙁
Wenn du doch eine Lösung findest würde ich mich freuen
lg
Hallo,
ich habe das gleiche Problem wie Andy, mit eine zigbee stick (von dresden eletronik).
irgendwie komme ich nicht weiter. Habt ihr inzwischen eine Lösung gefunden?
Gruß Stephan
Hallo ich noch mal,
ich bin noch nicht so richtig weiter gekommen. Das Thema Bluetooth habe ich erstmal dran gegeben, ist auch nicht so wichtig. Wichtig wäre mir aber, mehrere USB-Sticks durchzuschleifen. Neben einem zigbee2mqtt-Stiick muss da noch ein CUL dran.
Ich kann mich drehen und wenden wie ich will, ALLE Sticks bekommen die gleiche Nummer (189) und unterscheiden sich nur durch das, was dahinter kommt (129; 132, 133).
lsusb liefert:
Bus 001 Device 002: ID 8087:8001 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 006: ID 03eb:204b Atmel Corp. LUFA USB to Serial Adapter Project
Bus 002 Device 005: ID 03eb:204b Atmel Corp. LUFA USB to Serial Adapter Project
Bus 002 Device 002: ID 0451:16a8 Texas Instruments, Inc.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Im Moment sind sogar drei Sticks angeschlossen, einer davon kommt wieder raus.
Mit ls -l /dev/bus/usb/002/00* erhalte ich
root@pve:/etc/pve/nodes/pve/lxc# ls -l /dev/bus/usb/002/00*
crw-rw-r– 1 root root 189, 128 Jun 11 14:04 /dev/bus/usb/002/001
crw-rw-r– 1 root root 189, 129 Jul 15 11:14 /dev/bus/usb/002/002
crw-rw-r– 1 root root 189, 132 Jul 15 11:57 /dev/bus/usb/002/005
crw-rw-r– 1 root root 189, 133 Jul 15 11:58 /dev/bus/usb/002/006
Da scheint noch der BT-Dongle bei zu sein, den habe ich aber schon wieder gezogen. Frage ist, kann ich mit den BEIDEN Zahlen irgendetwas anfangen? Nur die zweite Nummer zu verwenden bringt keinen Erfolg.
LG,
Arne
Hallo,
funktioniert sehr gut bei mir.
Allerdings muss ich nach jedem Reboot vom Proxmox Server chmod o+rw /dev/ttyACM0 ausführen.
Gibt es eine permanente Lösung?
Gruß Arne
hier ebenfalls DresdenElektronik Conbee Stick. Einschließlich hier gehts nicht weiter: chmod o+rw /dev/ttyACM0. Jemnd eine Lösng?
Ich steige gerade vom einem Raspi auf einen Zotac mit Proxmox um.
Bei mir funktioniert es so:
wenn bei Euch ls -la /dev/ttyUSB* statt ls -la /dev/ttyACM* funktioniert, dann muss die letzte Zeile in der xxx.conf
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file
statt
lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file
sein.
So hat es zumindest bei mir funktioniert.
lg
Hi,
danke für die Anleitung, funktioniert für meinen CC2531 sehr gut. Nach einem Reboot des Proxmox Hosts, muss ich jedoch die Rechte per CHMOD neu setzen.
Weißt du wie ich das automatisch nach dem Reboot setzen kann?
Gruß,
Stefan
Hi,
leider hatte ich ähnliche Probleme, jedoch hat es bei mir die Rechte verloren nach einem Neustart. Ich konnte das Problem nicht lösen, daher läuft der Z-WAVE Stick bei mir wieder in einer VM ohne Probleme.
lg
Hi,
Ich hab bei meinem Stick Aeon Lab S2 ein Problem, alle paar Tage verliert er im Container unter /dev/Zwavestick und ttyAMC seine rechte . Ich muss den Container dann Neustarten, danach funktioniert er wieder. Hast ähnliche Probleme beobachtet?
Hi,
leider hatte ich ähnliche Probleme, jedoch hat es bei mir die Rechte verloren nach einem Neustart. Ich konnte das Problem nicht lösen, daher läuft der Z-WAVE Stick bei mir wieder in einer VM ohne Probleme.
lg
Hallo Emanuel
Bei mir läuft der Iobroker in einem Container unter Proxmox. Der ZigbeStick im Raspberry läuft super. Da ich mit dem System
umziehe, habe ich alles nach deiner Anleitung gemacht. Scheint alles soweit geklappt zu haben, die Einträge habe ich auch in der 202.conf. Aber ttyACM0 wird unter /dev nicht erstellt.?? Da ich eher keine Ahnung von der Materie habe, weiss ich auch nicht wo ich suchen soll. Kannst du mir weiterhelfen?
Hallo,
ich habe nun erfolgreich einen enoclean usb-Stick eingebunden und im IOBroker installiert.
Vielleicht kann ich Jemandem weiter helfen:
1. Bei mir wechselt nach jedem einstecken des Sticks die Device Nummer und wird nach einem reboot wieder zurück gesetzt. Deshalb kan es sein, dass man die Device Nummer noch einmal in der xxx.conf anpassen muss.
2. nach jedem reboot muss der Befehl „chmod o+rw /dev/ttyXXXX“ ausgeführt werden.
Dazu kan man einen cronjob erstellen.
In der Shell von PVE:
crontab -e //erstellt die cron Datei, falls noch nicht vorhanden und öffent sie im Editor
@reboot chmod o+rw /dev/ttyXXXX // den Befehl als neue Zeile einfügen. ttyXXXX steht dabei für euer Gerät
Hallo,
es ist eine tolle Anleitung, die schon vielen geholfen hat. Leider ist sie nicht permanent. Vielleicht hast du ja Lust, sie zu überarbeten?
Also,
zuerst sollte man die USB Schnittstelle nicht mit den Zahlen belegen, da diese bei einem Restart anders sein könnten. Dies würde im Teil so aussehen:
lxc.cgroup.devices.allow: c 189:* rwm
lxc.cgroup.devices.allow: c 166:* rwm
lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file
lxc.mount.entry: /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0019430CEE-if00 dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0019430CEE-if00 none bind,optional,create=file
Die Befehle um diese Werte zu bekommen, hast du ja eigentlich schon genannt.
Dann sollte man die ttyACM0 beim Start für den Stick freigeben.
Dies erreicht man, wenn man eine Rule beim start anlegt.
Und zwar in der Datei (ggf. erstellen) /etc/udev/rules.d/50-myusb.rules
Hier folgendes eintragen: ACTION==“add“, KERNEL==“ttyACM[0-9]*“, ATTRS{idVendor}==“ffff“, ATTRS{idProduct}==“0005″, MODE=“0666″
Die Befehle fir idVendor und idProduct hast du ja auch.
Viel Erfolg und danke, das meine ersten Versuche mit der Anleitung klappten!
Erstmal danke, die Anleitung hat gut funktioniert soweit. Das „Reboot“ Problem kann ich bestätigen.
Als Lösungsansatz habe ich folgendes gefunden, ggf. kommt ja damit einer weiter und kann seine Erkenntnisse hier noch mal teilen
https://qastack.com.de/ubuntu/58119/changing-permissions-on-serial-port
Moin Moin,
ich habe es endlich geschafft das auch bei einem reboot der USB stick weiter gereicht wird. Die oben genannte Vorgehensweise ist eine Möglichkeit. Einfacher ist es jedoch mit der ID vom USB Stick zu arbeiten.
Gefunden hab ich das hier : https://forum.iobroker.net/topic/29761/gel%C3%B6st-cc2531-an-proxmox-an-lxc-durchreichen-scheitert/26
Dazu ein Cronjob wie SooL es beschrieben hat.
Das Reboot-Problem lässt sich per Hook-Script beseitigen.
Ich reiche die iGPU der APU an einen LXC durch, die letzte Zeile wird bei jedem Containerstart ausgeführt.
lxc.cgroup2.devices.allow: c 226:128 rwm
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/renderD128 dev/dri/renderD128 none bind,optional,create=file
lxc.hook.autodev: sh -c „chown root:video /dev/dri/renderD128“
Hallo,
vielen Dank für die super Anleitung.
Habe alles wie beschrieben ausgeführt und es klappte auf Anhieb!
Thx – perfekt!
Zur Lösung des „reboot“ Problems: Es kommt bei jedem unplug/plug des USB Sticks vor, nicht nur beim reboot.
Zur Lösung als root auf dem pve Rechner eine Datei /etc/udev/rules.d/50-myusb.rules anlegen mit diesem Inhalt:
KERNEL==“ttyUSB[0-9]*“,MODE=“0666″
Bei Systemen/Stick wo ein /dev/ttyACM angelegt wird entsprechend:
KERNEL==“ttyACM[0-9]*“,MODE=“0666″
Danach einmal den Stick entfernen und wieder einstecken und dann die Berechtigung mit „ls -al /dev/tty*“ überprüfen.
Danke dir für die Info. Ich habe einen DVB Stick, der auch als dvb in dev erkannt wird. Dementsprechend würde ich es mit dvb bzw adapter0 versuchen,richtig?
Hallo Emanuel,
habe gerade versucht mit deiner Anleitung einen Conbee II Stick unter Proxmox in einem Ubuntu 22.04 LXC Container mit Deconz zum laufen zu bringen.
Leider hat dies nicht funktioniert. Ich konnte alle Befehle problemlos abarbeiten und die .conf Datei anpassen. Wenn ich unter PVE in der Shell die /dev aufliste ist das ttyACM0 zu sehen. Unter der virtuellen Maschine in der Shell leider nicht.
In der .conf steht noch unprivileged: 1. Kann das etwas damit zu tun haben?
Gruss Stefan
Danke! Bei mir hat es geholfen.