2 gleiche Kameras - wie für udev unterscheiden?
2 gleiche Kameras - wie für udev unterscheiden?
Schönen 1. Advent!
Ich habe hier einen Raspberry Pi mit debian buster, und daran stecken 2 USB-Kameras. Seriennummer, und Hersteller sind gleich, das einzig unterschiedliche ist der USB-Port, wo sie dranstecken.
Aber kann der sich auch ändern ohne unstecken?
Mein Problem ist, das beim booten mal die eine und mal die andere auf /dev/video0 und /dev/video2 landet, zufällig.
(Wie) kann man die udev-Regel an USB-steckplatz festmachen?
Ich habe hier einen Raspberry Pi mit debian buster, und daran stecken 2 USB-Kameras. Seriennummer, und Hersteller sind gleich, das einzig unterschiedliche ist der USB-Port, wo sie dranstecken.
Aber kann der sich auch ändern ohne unstecken?
Mein Problem ist, das beim booten mal die eine und mal die andere auf /dev/video0 und /dev/video2 landet, zufällig.
(Wie) kann man die udev-Regel an USB-steckplatz festmachen?
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Servus
Schau Dir das mal an, sind die Ausgaben jeweils exakt gleich ?
oder
gruss
Schau Dir das mal an, sind die Ausgaben jeweils exakt gleich ?
Code: Alles auswählen
udevinfo -a -n /dev/video0
udevinfo -a -n /dev/video2
Code: Alles auswählen
udevadm info --a --name /dev/video0
udevadm info --a --name /dev/video2
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Sieht so aus:
https://pastebin.com/3NxkK8g2
Ich weiß eben nur nicht, welche Einträge beim Booten bestehen bleiben, und welche sich spontan ändern können.
Also ich werde sie immer an den gleichen USB-buchsen stecken lassen..
https://pastebin.com/3NxkK8g2
Ich weiß eben nur nicht, welche Einträge beim Booten bestehen bleiben, und welche sich spontan ändern können.
Also ich werde sie immer an den gleichen USB-buchsen stecken lassen..
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Dann sollte doch ein zusätzlicher Eintrag in deinen udev-rules reichen:raiuns hat geschrieben: Also ich werde sie immer an den gleichen USB-buchsen stecken lassen.
Code: Alles auswählen
KERNELS=="1-1.5:1.0"
KERNELS=="1-1.4:1.0"
https://unix.stackexchange.com/a/533464
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!
Macht ohne Haftung funktioniert nicht!
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Also wahrscheinlich habe ich was falsch verstanden, oder mir fehlt noch eine Angabe, jedenfalls sind die Kameras noch unverändert:
Ich habe in "/etc/udev/rules.d" eine Datei "60-usbvideo.rules" angelegt, mit diesem Inhalt:
KERNEL=="video?", KERNELS=="1-1.4:1.0", SUBSYSTEMS=="usb", SYMLINK+="video0"
KERNEL=="video?", KERNELS=="1-1.5:1.0", SUBSYSTEMS=="usb", SYMLINK+="video2"
Also was an 1-1.4 steckt soll /dev/video0 heißen und was an 1-1.5 steckt, soll /dev/video2 heißen
Danach udev gestoppt und gestartet - aber keine Änderung.
Fragen: wofür ist der Kernel-Paramter (der erste)? Und muss ich noch Action=add hinzufügen, auch wenn die Kameras immer stecken bleiben?
Was ist falsch?
Ich habe in "/etc/udev/rules.d" eine Datei "60-usbvideo.rules" angelegt, mit diesem Inhalt:
KERNEL=="video?", KERNELS=="1-1.4:1.0", SUBSYSTEMS=="usb", SYMLINK+="video0"
KERNEL=="video?", KERNELS=="1-1.5:1.0", SUBSYSTEMS=="usb", SYMLINK+="video2"
Also was an 1-1.4 steckt soll /dev/video0 heißen und was an 1-1.5 steckt, soll /dev/video2 heißen
Danach udev gestoppt und gestartet - aber keine Änderung.
Fragen: wofür ist der Kernel-Paramter (der erste)? Und muss ich noch Action=add hinzufügen, auch wenn die Kameras immer stecken bleiben?
Was ist falsch?
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
-
- Beiträge: 67
- Registriert: 14.02.2011 09:45:53
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Hi
Action=add und Action=remove ist für's einstecken / abziehen gedacht.
Wehrend des Booten und starten deines Rechner wurde von udev deinen Kameras die NAME="video0" und NAME="video2" vergeben.
Somit müssen die Symlinks anders benannt werden wie z.B. SYMLINK+="USBKAMERA1".
Danach ein Neustart und die Links sollten unter /dev erreichbar sein.
Action=add und Action=remove ist für's einstecken / abziehen gedacht.
Wehrend des Booten und starten deines Rechner wurde von udev deinen Kameras die NAME="video0" und NAME="video2" vergeben.
Somit müssen die Symlinks anders benannt werden wie z.B. SYMLINK+="USBKAMERA1".
Danach ein Neustart und die Links sollten unter /dev erreichbar sein.
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Ach so.. und ich dachte, ich könnte mit den udev-Regeln gezielt beeinflussen, welche Kamera den Namen "video0" oder "video2" bekommt - ist das ein Verständnisfehler?bitschubser hat geschrieben:01.12.2020 04:00:37Wehrend des Booten und starten deines Rechner wurde von udev deinen Kameras die NAME="video0" und NAME="video2" vergeben.
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
-
- Beiträge: 67
- Registriert: 14.02.2011 09:45:53
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Hi
Ja mit udev kannst du Einfluss auf das Verzeichnis /dev nehmen. Aber vielleicht nicht so wie gedacht.
Vor etlicher Zeit konnte man mit "NAME==" den Namen ändern, heute ist das nur noch bei Netzwerkkarten erlaubt.
Somit kannst du mal folgendes Probieren,
Nachtrag,
du kannst auch mal mit SUBSYSTEM=="video4linux" probieren
Ja mit udev kannst du Einfluss auf das Verzeichnis /dev nehmen. Aber vielleicht nicht so wie gedacht.
Vor etlicher Zeit konnte man mit "NAME==" den Namen ändern, heute ist das nur noch bei Netzwerkkarten erlaubt.
NAME
The name to use for a network interface. See
systemd.link(5) for a higher-level mechanism
for setting the interface name. The name of a
device node cannot be changed by udev, only
additional symlinks can be created.
Ich benutze diese udev Regel z.B.weil ich noch alte ZIP-Disk habe und mir das Gerät /dev/sdb4 fehlt, was ja richtig ist, da ja keine Diskkette eingelegt ist/wahr zum Systemstart.Code: Alles auswählen
SUBSYSTEMS=="scsi", KERNEL=="sdb", ATTRS{model}=="ZIP 100*", RUN+="/bin/mknod -m 660 /dev/sdb4 b 8 20", RUN+="/bin/chown root:floppy /dev/sdb4"
Somit kannst du mal folgendes Probieren,
Code: Alles auswählen
SUBSYSTEMS=="usb", KERNELS=="1-1.4", ATTRS{idVendor}=="12d1", SYMLINK+="usbcam0"
SUBSYSTEMS=="usb", KERNELS=="1-1.5", ATTRS{idVendor}=="12d1", SYMLINK+="usbcam1"
du kannst auch mal mit SUBSYSTEM=="video4linux" probieren
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Also ich bekomme 2 neue Symlinks, aber ich kann sie nicht als Kamera verwenden, aber ich sehe gerade, ich habe das Attr vergessen, ich probiere gleich nochmal. Stand bis jetzt:
Code: Alles auswählen
$ cat /etc/udev/rules.d/60-usbvideo.rules
KERNELS=="1-1.4:1.0", SUBSYSTEMS=="usb", SYMLINK+="cam0"
KERNELS=="1-1.5:1.0", SUBSYSTEMS=="usb", SYMLINK+="cam2"
$ ls -la /dev/ca*
crw------- 1 root root 10, 63 Dec 1 12:53 /dev/cachefiles
lrwxrwxrwx 1 root root 12 Dec 1 12:53 /dev/cam0 -> input/event0
lrwxrwxrwx 1 root root 12 Dec 1 12:53 /dev/cam2 -> input/event1
$ ls -la /dev/vi*
crw-rw---- 1 root video 81, 0 Dec 1 12:53 /dev/video0
crw-rw---- 1 root video 81, 1 Dec 1 12:53 /dev/video1
crw-rw---- 1 root video 81, 8 Dec 1 12:53 /dev/video10
crw-rw---- 1 root video 81, 9 Dec 1 12:53 /dev/video11
crw-rw---- 1 root video 81, 10 Dec 1 12:53 /dev/video12
crw-rw---- 1 root video 81, 4 Dec 1 12:53 /dev/video13
crw-rw---- 1 root video 81, 5 Dec 1 12:53 /dev/video14
crw-rw---- 1 root video 81, 6 Dec 1 12:53 /dev/video15
crw-rw---- 1 root video 81, 7 Dec 1 12:53 /dev/video16
crw-rw---- 1 root video 81, 2 Dec 1 12:53 /dev/video2
crw-rw---- 1 root video 81, 3 Dec 1 12:53 /dev/video3
$ ffmpeg -i /dev/cam2 -t 8 -v "debug" test.mp4
ffmpeg version 4.1.6-1~deb10u1+rpt1 Copyright (c) 2000-2020 the FFmpeg developers
...
Opening an input file: /dev/cam2.
[NULL @ 0x1f5c1c0] Opening '/dev/cam2' for reading
[file @ 0x1f5c950] Setting default whitelist 'file,crypto'
/dev/cam2: Permission denied
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
Re: 2 gleiche Kameras - wie für udev unterscheiden?
jetzt habe ich ATTR mit drin, aber dafür keine links mehr..?
Das ist aber auch was kompliziert.. Was muss ich korrigieren?
Code: Alles auswählen
$ ls -la /dev/ca*
crw------- 1 root root 10, 63 Dec 1 13:09 /dev/cachefiles
$ cat /etc/udev/rules.d/60-usbvideo.rules
KERNELS=="1-1.4:1.0", SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", SYMLINK+="cam0"
KERNELS=="1-1.5:1.0", SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", SYMLINK+="cam2"
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Wenn du es so schreibst muss es anstelle von SUBSYSTEMS dann SUBSYSTEM=="video4linux" heißen.
Re: 2 gleiche Kameras - wie für udev unterscheiden?
hilft nicht.. welcher Parameter muss denn womit übereinstimmen? Bzw. wie kann ich noch debuggen? So sieht es jetzt aus
Code: Alles auswählen
$ ls -la /dev/ca*
crw------- 1 root root 10, 63 Dec 1 13:27 /dev/cachefiles
$ cat /etc/udev/rules.d/60-usbvideo.rules
KERNELS=="1-1.4:1.0", SUBSYSTEM=="video4linux", ATTRS{idVendor}=="12d1", SYMLINK+="cam0"
KERNELS=="1-1.5:1.0", SUBSYSTEM=="video4linux", ATTRS{idVendor}=="12d1", SYMLINK+="cam2"
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Subsystem muss al erstes stehen
EDIT: Du mixt jetzt mit KERNELS und ATTRS Attribute von zwei verschiedenen parent devices. Das ist imho nicht möglich. Nimm die ATTRS-Regel raus, die ist eh als Unterscheidungskriterium ungeeignet.
EDIT: Du mixt jetzt mit KERNELS und ATTRS Attribute von zwei verschiedenen parent devices. Das ist imho nicht möglich. Nimm die ATTRS-Regel raus, die ist eh als Unterscheidungskriterium ungeeignet.
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Jetzt sieht es wieder anders (besser) aus, aber ich kann damit noch nicht filmen - was feht jetzt noch? Ist doch so gemeint, dass ich dann den symlink verwende, oder?:
Code: Alles auswählen
$ ls -la /dev/ca*
crw------- 1 root root 10, 63 Dec 1 14:02 /dev/cachefiles
lrwxrwxrwx 1 root root 6 Dec 1 14:02 /dev/cam0 -> video0
lrwxrwxrwx 1 root root 6 Dec 1 14:02 /dev/cam2 -> video2
$ cat /etc/udev/rules.d/60-usbvideo.rules
SUBSYSTEM=="video4linux", KERNELS=="1-1.4:1.0", SYMLINK+="cam0"
SUBSYSTEM=="video4linux", KERNELS=="1-1.5:1.0", SYMLINK+="cam2"
$ ffmpeg -i /dev/cam2 -t 8 -v "debug" video/test.mp4
ffmpeg version 4.1.6-1~deb10u1+rpt1 Copyright (c) 2000-2020 the FFmpeg developers
...
...
Splitting the commandline.
Reading option '-i' ... matched as input url with argument '/dev/cam2'.
Reading option '-t' ... matched as option 't' (record or transcode "duration" seconds of audio/video) with argument '8'.
Reading option '-v' ... matched as option 'v' (set logging level) with argument 'debug'.
Reading option 'video/test.mp4' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument debug.
Successfully parsed a group of options.
Parsing a group of options: input url /dev/cam2.
Successfully parsed a group of options.
Opening an input file: /dev/cam2.
[NULL @ 0x18281c0] Opening '/dev/cam2' for reading
[file @ 0x1828950] Setting default whitelist 'file,crypto'
[AVIOContext @ 0x1830b20] Statistics: 0 bytes read, 0 seeks
/dev/cam2: Invalid argument
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Hast du das richtige Gerät verwendet? Also funktioniert es wenn du direkt auf die Datei anstatt auf den Symlink zugreifst?
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Ich denke schon - also wenn ich in dieser Programmzeile statt /dev/cam2
/dev/video0 oder /dev/video2 einsetze, dann bekomme ich ein Video:
und zugeordnet sollte auch richtig sein:
Vielleicht funktioniert das udev jetzt, aber ffmpeg kann mit den Symlinks nicht umgehen?
/dev/video0 oder /dev/video2 einsetze, dann bekomme ich ein Video:
Code: Alles auswählen
$ ffmpeg -i /dev/cam2 -t 8 -v "debug" video/test.mp4
Code: Alles auswählen
$ ls -la /dev/cam*
lrwxrwxrwx 1 root root 6 Dec 1 14:02 /dev/cam0 -> video0
lrwxrwxrwx 1 root root 6 Dec 1 14:02 /dev/cam2 -> video2
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Ich habe jetzt noch ein paar mal gebootet, und die Zuordnung scheint nun stabil.
Für ffmpeg werde ich einen extra Thread aufmachen. Danke an alle.
Für ffmpeg werde ich einen extra Thread aufmachen. Danke an alle.
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Bei meinen Versuchen mit einer Mikroskopkamera musste ich leider auch feststellen das hier keiner der in irgendeiner Art und Weise erzeugten Symlinks funktioniert, weder mit ffmpeg, vlc, smplayer oder mpv.raiuns hat geschrieben:Vielleicht funktioniert das udev jetzt, aber ffmpeg kann mit den Symlinks nicht umgehen?
Jeder erstellte SYMLINK hat volle Zugriffsrechte, dennoch ist darüber nichts zu sehen/aufzunehmen...
Abhilfe schafften ein paar Zeilen Skript in der $HOME/.bashrc, bei dir vielleicht so:
Code: Alles auswählen
for i in $(ls /dev/video*); do
Knl=$(udevadm info -a $i | awk -F'"' '/KERNEL/{print $2}')
Vid=$(echo $Knl | awk '{print $1}')
VNr=$(echo $Knl | awk '{print $2}')
case $VNr in
"1-1.5:1.0") export cam0=/dev/$Vid;;
"1-1.4:1.0") export cam1=/dev/$Vid;;
esac
done
dann sollte die ausgewählte Kamera auch immer so ansprechbar sein: ffmpeg -i cam0 oder cam1
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!
Macht ohne Haftung funktioniert nicht!
Re: 2 gleiche Kameras - wie für udev unterscheiden?
Vielen Dank für das Script!
Wenn meine Zuordnung jetzt nicht stabil bleibt, werde ich es so probieren.
Wenn meine Zuordnung jetzt nicht stabil bleibt, werde ich es so probieren.
ASRock ION 330 Nettop (Intel Atom N330 1.6GHz, 2GB RAM, 320GB HDD, nVidia 9400-Ion)