Linux USB CAMERA, wie Video-Port herausfinden?
TS
- kamera
- linux
- usb
Hello,
ist ein altes Thema aufgewärmt. Aber ich habe leider vergessen, wie es geht.
Ich habe eine USB-Video-Cam.
lsusb
zeigt mir z. B. am Laptop:
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 1bcf:2c18 Sunplus Innovation Technology Inc.
Bus 001 Device 007: ID 0489:e04e Foxconn / Hon Hai
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
* Bus 003 Device 004: ID 05a3:9310 ARC International USB 2.0 Camera
Bus 003 Device 002: ID 046d:c52f Logitech, Inc. Unifying Receiver
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Der Stern vor der Position ist von mir. Das ist die CAM.
mit ls -l /dev/
kann ich die möglichen Video-Devices erfragen.
Das sind üblicherweise immer erst mal vier.
crw-rw----+ 1 root video 81, 0 Mär 14 12:16 video0
crw-rw----+ 1 root video 81, 1 Mär 14 12:16 video1
crw-rw----+ 1 root video 81, 2 Mär 15 08:34 video2
crw-rw----+ 1 root video 81, 3 Mär 15 08:34 video3
An einem dieser Devices hängt dann die USB-Cam, die ich abfragen möchte. Z. B. mit
fswebcam -d /dev/video1 --skip 1 -r 800x640 20220315-0852.jpg
Ich weiß aber nicht, ob sie an video0, video1, ... hängt.
Auf dem Laptop habe ich noch die eingebaute Kamera. Die hängt (scheinbar immer) an video0.
Die USB-Cam kam dann eben auf /dev/video2
Normalerweise hängt das Ding an meiner Himbeere und wird per PHP-Script und Sensor-Trigger, oder Cronjob abgefragt. Leider weiß ich auch da immer nicht, auf welchem Device sie aufschlägt.
Wie kann ich das vorher feststellen und am besten auch festlegen?
Glück Auf
Tom vom Berg
sudo journalctl -n0 -f
im Terminal eine berechtigten Benutzers eingeben. Das zeigt (nach Passworteingabe) erstmal, was soll: Nichts.…
Mär 15 19:16:02 rpi400.home kernel: input: UVC Camera (046d:0994) as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input36
…
UVC-Kamera also:
fastix@rpi400:~$ ls -l /dev/video*
crw-rw----+ 1 root video 81, 12 Mär 15 19:16 /dev/video0
crw-rw----+ 1 root video 81, 13 Mär 15 19:16 /dev/video1
crw-rw----+ 1 root video 81, 0 Mär 13 16:17 /dev/video10
fastix@rpi400:~$ getfacl /dev/video0
# …
# … ich habe Rechte.
# …
fastix@rpi400:~$ grep video /etc/group
video:x:44:fastix
(Und bin in der Gruppe video)
Erinnern: Am 13.3. gebootet, am 15.3 um 19:16 Kamera angeschlossen... Aha?
fastix@rpi400:~$ sudo apt install fswebcam
fastix@rpi400:~$ man fswebcam
… T2R (time to read) …
fastix@rpi400:~/Bilder$ fswebcam -d v4l2:/dev/video0 -r 1024x768 output1.jpeg
--- Opening v4l2:/dev/video0...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 1024x768 to 960x720.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'output1.jpeg'.
Hat im ersten Versuch geklappt.
Hallo,
soll dein Beitrag jetzt informativ, also eine Hilfe sein? Oder eher ein verworrenes Rätsel?
fastix@rpi400:~$ ls -l /dev/video* crw-rw----+ 1 root video 81, 12 Mär 15 19:16 /dev/video0 crw-rw----+ 1 root video 81, 13 Mär 15 19:16 /dev/video1 crw-rw----+ 1 root video 81, 0 Mär 13 16:17 /dev/video10
Was hast du da für seltsame Datumsangaben? Ich kann die nicht übersetzen.
Erinnern: Am 15.3. gebootet, am 13.3 um 19:16 Kamera angeschlossen... Aha?
Hä??
fastix@rpi400:~/Bilder$ fswebcam -d v4l2:/dev/video0 -r 1024x768 output1.jpeg --- Opening v4l2:/dev/video0... /dev/video0 opened. No input was specified, using the first. Adjusting resolution from 1024x768 to 960x720. --- Capturing frame... Captured frame in 0.00 seconds. --- Processing captured image... Writing JPEG image to 'output1.jpeg'.
Hat im ersten Versuch geklappt.
Ja, und was sagt uns das jetzt?
Einen schönen Tag noch
Martin
Die per USB angeschlossene Kamera ist regelmäßig die neueste.
Etwas wie
ls --sort=t /dev/video* | sort | head -1
kann also weiterhelfen. Der Output ist bei mir: "/dev/video0";
also das Bild damit schießen:
cam=$((ls --sort=t /dev/video* | sort | head -1));
fswebcam -d v4l2:$cam -r 960x720 output1.jpeg
n'Abend,
Die per USB angeschlossene Kamera ist regelmäßig die neueste.
ja, das klingt logisch. Das erklärt aber noch nicht deine kaputten Datumsangaben.
ls --sort=t /dev/video* | sort | head -1
kann also weiterhelfen. Der Output ist bei mir: "/dev/video0";
Gut. Die Information fehlte im vorhergehenden Posting.
Einen schönen Tag noch
Martin
Das erklärt aber noch nicht deine kaputten Datumsangaben.
Einfach 2 Minuten warten, dann hab ich solche Vertipper repariert.
Moin,
Das erklärt aber noch nicht deine kaputten Datumsangaben.
Einfach 2 Minuten warten, dann hab ich solche Vertipper repariert.
nö, ich meine keinen Vertipper, sondern das hier:
fastix@rpi400:~$ ls -l /dev/video* crw-rw----+ 1 root video 81, 12 Mär 15 19:16 /dev/video0 crw-rw----+ 1 root video 81, 13 Mär 15 19:16 /dev/video1 crw-rw----+ 1 root video 81, 0 Mär 13 16:17 /dev/video10
Was soll 12 Mär 15 oder 0 Mär 13 für eine Angabe sein?
Die 81 davor kann ich übrigens auch nicht deuten.
Einen schönen Tag noch
Martin
Moin,
Das erklärt aber noch nicht deine kaputten Datumsangaben.
Einfach 2 Minuten warten, dann hab ich solche Vertipper repariert.
nö, ich meine keinen Vertipper, sondern das hier:
fastix@rpi400:~$ ls -l /dev/video* crw-rw----+ 1 root video 81, 12 Mär 15 19:16 /dev/video0 crw-rw----+ 1 root video 81, 13 Mär 15 19:16 /dev/video1 crw-rw----+ 1 root video 81, 0 Mär 13 16:17 /dev/video10
Was soll 12 Mär 15 oder 0 Mär 13 für eine Angabe sein?
Die 81 davor kann ich übrigens auch nicht deuten.
Das sind die originalen Ausgaben von ls -l
auf meinem Gerät. (Manpage).
Die "81, 12", "81, 0" stehen in der Spalte, die bei Dateien die Größe angibt, zeigen aber etwas anderes (Geräteklasse und, kommagetrennt, eine weitere, fortlaufende Nummer). Der Zeitpunkt die letzte Änderung ist mit „Mär 15 19:16“ angegeben, meint also 15. März 2022 19:16. Nach einem Jahr stände da „Mär 15 2022“. Es sind also nicht „meine kaputten Datumsangaben“ - Du warst wohl nur etwas zu müde um das zu sehen.
Ich weiß, dass ich lustige Konstruktionen aus Pumpen, Rohren, Filtern, Extraktoren und Reaktoren „baue“, die manchen wohl seltsam erscheinen… Genau genommen habe ich ja mal Chemieanlagenbauer gelernt. Eine Linux-Shell funktioniert genau wie diese - halt nur mit Bits und Bytes.
Hallo,
Was soll 12 Mär 15 oder 0 Mär 13 für eine Angabe sein?
Die 81 davor kann ich übrigens auch nicht deuten.Das sind die originalen Ausgaben von
ls -l
auf meinem Gerät. (Manpage).Die "81, 12", "81, 0" stehen in der Spalte, die bei Dateien die Größe angibt, zeigen aber etwas anderes (Geräteklasse und, kommagetrennt, eine weitere, fortlaufende Nummer).
aha ...
Bei mir sieht das ordentlicher aus:
mk@barbara /data/Download/TV: ls
total 19639728
drwxrwxr-x 2 1000 1000 4096 2022-03-13 21:29 WWDS
-rw-rw-r-- 1 1000 1000 948723551 2021-10-11 09:42 960-1_981313.mp4
-rw-rw-r-- 1 1000 1000 899073622 2022-03-07 01:28 Amerikas beste Idee - Nationalparks.avi
-rw-rw-r-- 1 1000 1000 411468534 2022-03-10 10:33 JOB_69936_sendeton_960x540-50p-1600kbit.mp4
Der Zeitpunkt die letzte Änderung ist mit „Mär 15 19:16“ angegeben, meint also 15. März 2022 19:16. Nach einem Jahr stände da „Mär 15 2022“. Es sind also nicht „meine kaputten Datumsangaben“
Okay, ich nehme "deine" zurück, aber "kaputt" bleibt. Das Monatskürzel sieht irgendwie deutsch aus, im Deutschen wird aber nie der Monat dem Tag vorangestellt (außer man verwendet das ISO-Datumsformat). Und ein Datum ohne Jahreszahl ist per se "kaputt".
Du warst wohl nur etwas zu müde um das zu sehen.
Ähm, nee. Ich konnte mir auf das Durcheinander von Zahlen einfach keinen Reim machen.
Einen schönen Tag noch
Martin
Bei mir sieht das ordentlicher aus:
mk@barbara /data/Download/TV: ls total 19639728 drwxrwxr-x 2 1000 1000 4096 2022-03-13 21:29 WWDS
Definiere „ordentlicher“.
Offensichtlich hast entweder Du selbst oder der Hersteller/Distributor Deines OS den ls
Befehl „verbogen“. Dieses wohl via Skript oder Alias.
Die Folge ist, dass womöglich andere Skripte (welche von ls einfach nur eine Liste mit Namen von Dateissystemobjekten erwarten) nicht ordnungsgemäß funktionieren. Aus diesem Grund sollte man nicht derart existentielle Befehle verbiegen. Im vorliegendem Fall wäre etwas wie „ll“ ein besserer Name für den Alias.
Ich bin mir auch nicht ganz sicher, ob es Absicht ist, das statt der Namen von Benutzer und Gruppe die UID bzw. GID erscheint. Das kommt sonst nur vor, wenn man sich den Inhalt von Partition ansieht, welche auf einem System erstellt wurde, auf welchem es Nutzer mit UID/GIDS gibt, die das aktuelle System nicht kennt oder wenn „eher selten benutzte“ Optionen gesetzt werden.
Hallo,
Bei mir sieht das ordentlicher aus:
mk@barbara /data/Download/TV: ls total 19639728 drwxrwxr-x 2 1000 1000 4096 2022-03-13 21:29 WWDS
Definiere „ordentlicher“.
in diesem Fall: Homogen, jede Zeile hat die gleiche Struktur.
Offensichtlich hast entweder Du selbst oder der Hersteller/Distributor Deines OS den
ls
Befehl „verbogen“. Dieses wohl via Skript oder Alias.
Ich selbst, ja. Ich habe einige Switches wie z.B. -l, die Sortierung, die einheitliche Datumsanzeige im ISO-Format und noch zwei, drei Kleinigkeiten als Default eingestellt.
Die Folge ist, dass womöglich andere Skripte (welche von ls einfach nur eine Liste mit Namen von Dateissystemobjekten erwarten) nicht ordnungsgemäß funktionieren.
Das ist wohl denkbar, aber den Fall hatte ich noch nicht.
Ich bin mir auch nicht ganz sicher, ob es Absicht ist, das statt der Namen von Benutzer und Gruppe die UID bzw. GID erscheint.
Doch, das ist Absicht. Damit auch diese beiden Spalten eine einheitliche Breite haben.
oder wenn „eher selten benutzte“ Optionen gesetzt werden.
In diesem Fall -n.
Einen schönen Tag noch
Martin
Hello Jörg,
danke fürs mitprobieren.
Soweit war ich ja auch schon.
Meine Frage ist aber, wie bekomme ich die richtige Kamera (von mehreren) ausgewählt, bzw. kann feststellen, an welchem /dev/video* diese hängt, um sie gezielt anzusprechen?
Wie bekomme ich die namentliche Nennung aus lsusb mit den /dev/video* zusammen?
Glück Auf
Tom vom Berg
cd /dev; ls -lR | grep -P "video[0-9]+"
Da kommt bei mir (ausgewählte Zeilen):
lrwxrwxrwx 1 root root 12 Mär 15 20:42 usb-046d_0994_C5808560-video-index0 -> ../../video0
lrwxrwxrwx 1 root root 12 Mär 15 20:42 usb-046d_0994_C5808560-video-index1 -> ../../video1
und lsusb
sagt (ausgewählte Zeilen):
Bus 001 Device 031: ID 046d:0994 Logitech, Inc. QuickCam Orbit/Sphere AF
Die ID 046d:0994 kommt also, wenn man sich die Links anschaut und wenn man sich das Gerät mit lsusb ansieht (Allerdings leicht abgewandelt). Der Rest ist mit cut
(meinetwegen auch sed
), tr
, grep
und einigen Pipes machbar.
Brauchst Du ein Skript? 😃😁
Brauchst Du ein Skript? 😃😁
#!/bin/bash
## finddevice4usbcam
cam="QuickCam Orbit/Sphere AF";
# cam="ARC International USB 2.0 Camera";
id=$(lsusb | grep "${cam}" | cut -d " " -f6 | tr ":" "_");
cd /dev;
dev=$(ls -lR | grep -P "video[0-9]+" | grep "${id}" | sed -e "s/.* -> //" | tr -d "/." | head -n1);
cd "${OLDPWD}";
echo "/dev/${dev}";
Jetzt denken alle: „Der Raketenwilli muss bekloppt sein!“