Dies ist eine mobil optimierte Seite, die schnell lädt. Wenn Sie die Seite ohne Optimierung laden möchten, dann klicken Sie auf diesen Text.

Anleitung USB-Serial Gerät an unpriviligierten LXC durchreichen - Beispiel Easymouse mit setserial

RuckZuck

Power Elite User
Premium
Registriert
8. November 2012
Beiträge
2.088
Lösungen
3
Reaktionspunkte
2.447
Punkte
2.130
Ort
World Wide Web
im PVE Host in der Shell über
Code:
apt install setserial -y
setserial installieren.

Dann eine neue UDEV-Rule unter /etc/udev/rules.d/ eine Datei "99-usb-serial.rules" anlegen
Code:
touch /etc/udev/rules.d/99-usb-serial.rules
und anschließend zum bearbeiten öffnen
Code:
nano /etc/udev/rules.d/99-usb-serial.rules
Hier müsst ihr dann noch die Serial eurer Easymouse entsprechend eintragen:
Code:
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A1234567", MODE="0666", SYMLINK+="Mouse01", RUN+="/bin/setserial /dev/Mouse01 low_latency"
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A2345678", MODE="0666", SYMLINK+="Mouse02", RUN+="/bin/setserial /dev/Mouse02 low_latency"
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A3456789", MODE="0666", SYMLINK+="Mouse03", RUN+="/bin/setserial /dev/Mouse03 low_latency"
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A4567890", MODE="0666", SYMLINK+="Mouse04", RUN+="/bin/setserial /dev/Mouse04 low_latency"
MIt Strg+O speichern und mit Strg+X verlassen.

nun noch die config des GESTOPPTEN LXC öffnen:
Code:
nano /etc/pve/nodes/prx/lxc/ContainerID.conf
und fügt am Ende nachfolgende Zeilen hinzu:
Code:
lxc.cgroup2.devices.allow: c 188:* rwm
lxc.mount.entry: /dev/Mouse01 dev/Mouse01 none bind,optional,create=file
lxc.mount.entry: /dev/Mouse02 dev/Mouse02 none bind,optional,create=file
lxc.mount.entry: /dev/Mouse03 dev/Mouse03 none bind,optional,create=file
lxc.mount.entry: /dev/Mouse04 dev/Mouse04 none bind,optional,create=file
wieder mit Strg+O speichern, mit Strg+X schließen.
Nun den LXC Container neu starten und eure 4 Easymouse-Reader sind im Container durchgereicht und als /dev/MouseXY eingebunden.

Edit:
Danke @uf2k für den Hinweis bzgl Rechtevergabe. Habe es mal angepasst.
 
Zuletzt bearbeitet:
Wie findet ihr die ATTRS(serial] eures serial-Geräts / Easymouse raus?

Nutzt diesen Befehl in der Shell des PVE Hosts:
Code:
udevadm info -a -n /dev/ttyUSB1 | grep '{serial}' | head -n1

Ausgabe im Beispiel:
Code:
udevadm info -a -n /dev/ttyUSB1 | grep '{serial}' | head -n1
ATTRS(serial)=="A1234567"

Die Nummer hinter "ttyUSB" könnt ihr dann hochsetzen wenn mehrere Geräte angeschlossen sind.


Alternativ könnt ihr euch direkt mit dem Befehl
Code:
ls -la /dev/serial/by-id/
alle angeschlossenen USB-Geräte anzeigen lassen. Die ATTRS(serial) findet ihr in der ausgegebenen Übersicht in jeder Zeile hinter "...USB_UART".
Ansonsten seht ihr hier welches Gerät auf welchem ttyUSB gelistet ist um mit dem udevadm-Befehl oben nur den einen USB-Anschluss auszulesen.
 
Zuletzt bearbeitet:
Hi,
zu dem MODE="0777" gibt allen Vollzugriff, inkl. execute-Bit, was bei Geräten wie /dev/ttyUSB* keinen Nutzen hat.
Verwende besser MODE="0666" – das ist sicherer und völlig ausreichen und setserial ist nicht mehr nötig da veraltet

hier eine beispiel wie ich das seit jahren auf pve am laufen hab:
Code:
#2x Stinger  USB
SUBSYSTEMS=="usb", ENV{.LOCAL_ifNum}="$attr{bInterfaceNumber}"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ATTRS{serial}=="10000000", ENV{.LOCAL_ifNum}=="00", SYMLINK+="StingerA", MODE="0666"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ATTRS{serial}=="10000000", ENV{.LOCAL_ifNum}=="01", SYMLINK+="StingerB", MODE="0666"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ATTRS{serial}=="20000000", ENV{.LOCAL_ifNum}=="00", SYMLINK+="StingerC", MODE="0666"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ATTRS{serial}=="20000000", ENV{.LOCAL_ifNum}=="01", SYMLINK+="StingerD", MODE="0666"
#2x Easymouse
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="AM020838", SYMLINK+="Mouse01", MODE="0666"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A500CMKC", SYMLINK+="Mouse02", MODE="0666"

Soll nur ein keiner Hinweis sein, ansonsten mach weiter so....
 
Rechtevergabe gebe ich dir recht. Habe es angepasst.
Setserial bringt immernoch ein paar ms in den ECM-Zeiten. Zumindest ist das bei mir so. Habe aber auch schon mehrere Monate nichtmehr ohne getestet.
 
Zuletzt bearbeitet:
Ich habe auf PVE 9.06 geupdatet aber seitdem startet oscam nicht mehr.


Wenn ich diese Zeilen in der Container.conf lösche, startet oscam wieder. In PVE 8.4 lief es ohne Probleme...
Hat jemand eine Lösung für PVE 9.x?
 
Müsste mal testweise ein PVE 9.x aufsetzen und es probieren.
Ich bin noch bei 8.x
 
Hier ein kleines Skript, das die Serials aller angeschlossenen Geräte ausgibt:
Code:
#!/bin/bash

#Anzahl der USB-Gereate ermitteln:
USB=( $(ls /dev | grep ttyUSB) )

#Serial auslesen
for((i=0; i<${#USB[@]}; i++))
do
        Serial=`udevadm info /dev/${USB[i]} -a | grep '{serial}'|sed -n '1p'|cut -d'"' -f2`
        echo "/dev/ttyUSB$i hat die Serial "$Serial
done

@xus:
Läuft auch mit 9.0.6. Du musst irgenwo nen Syntaxfehler oder sowas haben
 
Zuletzt bearbeitet:
Danke für das script, jetzt funktioniert es. Ich hatte vermutlich die Rechte der rules nicht gesetzt..
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…