LXC USB passthrough: /dev/ttyUSB0 vs. /dev/serial/by-id/...

anderl1969

Member
Jul 10, 2022
100
20
23
Disclaimer: Ich habe viel gegoogelt, aber hauptsächlich Beschreibungen gefunden, die das manuelle Anpassen der <pct>.conf für Proxmox 7 und älter beschreiben. Ich möchte aber die einfachere, offizielle Methode für Proxmox 8/9 über die WebUI nutzen.

Auf dem Proxmox Host habe ich einen nano CUL angesteckt:
Bash:
> lsusb
Bus 001 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 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 0e8d:c616 MediaTek Inc. Wireless_Device
Bus 003 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

> ls -l /dev/ttyU*
crw-rw---- 1 root dialout 188, 0 Aug  9 20:54 /dev/ttyUSB0

> ls -l /dev/serial/by-id/
total 0
lrwxrwxrwx 1 root root 13 Aug  9 20:54 usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0 -> ../../ttyUSB0

Wenn ich das Device in der WebUI (Ressourcen / Device Passthrough) meinem LXC Container als /dev/ttyUSB0 hinzufüge, wird es als solches auch in den Container gemappt. Das funktioniert einwandfrei!

Der Nachteil ist (wenn ich es richtig verstehe), dass ttyUSB0 sich ändern kann, wenn weitere USB Geräte an den Host angeschlossen sind.

Um das zu Umgehen, habe ich stattdessen /dev/serial/by-id/usb-FTDI...port0 in den Container gemappt. Auch das funktioniert grundsätzlich, aber das Gerät existiert im Container dann auch nur unter dem Pfad /dev/serial/by-id/.

Die Anwendung, die im Container läuft (AsksinAnalyzerXS) erwartet aber ein /dev/ttyUSBx oder /dev/ttySxy und findet es entsprechend nicht. Gibt es hier eine Lösung, das Device auch als /dev/ttyUSB0 im Container zur Verfügung zu stellen, obwohl es als /dev/serial/by-id/... durchgereicht wurde?

Ein ls -s /dev/serial/by-id/usb-FTDI...port0 /dev/ttyUSB0 funktioniert zwar, überlebt aber auch keinen Reboot.
 
Ich würde das auf PVE Seite definitiv mit by-id belassen. Ein Workaround wäre das hier via crontab im Container
Bash:
@reboot /usr/bin/ln -s /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0 /dev/ttyUSB0
 
Last edited:
  • Like
Reactions: anderl1969