TS: Linux USB CAMERA, wie Video-Port herausfinden?

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

--
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.
    1. Webcam suchen ... gefunden
    2. sudo journalctl -n0 -f im Terminal eine berechtigten Benutzers eingeben. Das zeigt (nach Passworteingabe) erstmal, was soll: Nichts.
    3. Kamera anschließen.
    …
    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.

    1. 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

      --
      Мир для України.
      1. 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
        
        1. 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

          --
          Мир для України.
          1. Das erklärt aber noch nicht deine kaputten Datumsangaben.

            Einfach 2 Minuten warten, dann hab ich solche Vertipper repariert.

            1. 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

              --
              Мир для України.
              1. 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.

                1. 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

                  --
                  Мир для України.
                  1. 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.

                    1. 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

                      --
                      Мир для України.
    2. 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

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
      1. 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? 😃😁

        1. 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!“