2

Как получить серийный номер веб-камеры USB из командной строки Linux?

У меня есть несколько USB веб-камер, подключенных к машине с Ubuntu. Все они отображаются как /dev/video0 , /dev/video1 , /dev/video2 и т.д., Но я не могу найти какой-либо способ программно определить, что есть что. Несколько камер имеют одну и ту же модель, поэтому просто получить название модели недостаточно.

Обратите внимание, я не спрашиваю, как использовать lsusb . Да, я знаю, что вы можете использовать lsusb или libusb, чтобы получить серийный номер устройства, идентификатор продукта, имя производителя и т.д. Но, насколько я могу судить, ничто, показанное lsusb может иметь перекрестные ссылки с путем /dev/video* .

Например, если кто-то подключает две идентичные веб-камеры, и они отображаются как /dev/video1 и /dev/video2 а затем отключает их и подключает их к совершенно другим портам, так что /dev/video2 становится /dev/video3 и /dev/video1 становится /dev/video4 , я сразу могу знать, что текущая /dev/video3 "раньше была" /dev/video2 .

Единственные похожие вопросы, которые я обнаружил, предполагают только такие хаки, как отключение и повторное подключение при сканировании dmesg. Я ищу чисто программное решение, которое не требует аппаратных манипуляций для идентификации веб-камер.

1 ответ1

3

Можно идентифицировать все камеры. Команда

 $ sudo lsusb -v -d 046d:082d | grep -i serial
   iSerial                 1 05C6D16F

возвращает серийный номер моей камеры (веб-камера Logitech HD Pro, используемая в качестве примера с правильным поставщиком: коды продуктов, полученные при предыдущем использовании lsusb). Обратите внимание, что использование sudo абсолютно необходимо: непривилегированный пользователь не получает доступ ко всей информации, доступной через команду.

Серийный номер часто, но не всегда, уникален. Если он не уникален (просто сравните выходные данные вышеупомянутых команд для двух устройств с одним и тем же поставщиком: коды продуктов), вы можете установить их так, чтобы они были различны. Во всем Google есть руководства для этого, я просто укажу на пару из них, ради тщательности: здесь и здесь. Но помните, что эта процедура зависит от устройства , поэтому вам придется выяснить, как это сделать для вашей собственной камеры.

Теперь команда

$ sudo udevadm info --query=all /dev/video1 | grep 'VENDOR_ID\|MODEL_ID\|SERIAL_SHORT'
  E: ID_MODEL_ID=082d
  E: ID_SERIAL_SHORT=05C6D16F
  E: ID_VENDOR_ID=046d

возвращает соответствующие коды для этой конкретной камеры. Метод проб и ошибок на всех устройствах /dev/videoX позволяет использовать их все.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .