Рейтинг:1

Фокус Logitech c930e возвращается к настройкам по умолчанию даже с пользовательскими правилами udev

флаг cn

ОС: Ubuntu 20.04 (Фокусная яма)

Недавно я купил камеру Logitech c930e для использования на онлайн-экзаменах под наблюдением, где наблюдатель может попросить предъявить удостоверение личности государственного образца. Камера имеет функцию автофокуса, которая может изначально фокусироваться на близких объектах (если один из них помещается перед камерой при ее запуске), но как только она переключает фокус на удаленные объекты, она не может повторно обнаруживать и перефокусироваться на близких объектах впоследствии. поставили перед камерой. Это приводит к тому, что текст на выданных государством удостоверениях личности, помещенных перед камерой, становится неразборчивым.

После некоторых первоначальных исследований оказалось, что я могу установить v4l-утилиты и получить список параметров, которые я могу настроить на камере следующим образом (при условии, что связанный узел устройства /dev/видео1):

$ v4l2-ctl -d /dev/video1 --list-ctrls

Фильтрация вывода для включения только параметров, связанных с фокусом, дает:

$ v4l2-ctl -d /dev/video1 --list-ctrls | grep фокус
                 focus_absolute 0x009a090a (int): мин.=0 макс.=255 шаг=5 по умолчанию=0 значение=0 флаги=неактивно
                     focus_auto 0x009a090c (логическое значение): по умолчанию = 1 значение = 1

Так focus_auto установлен на 1 и focus_absolute к 0 по умолчанию, что также можно увидеть, выполнив следующие команды:

$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolute: 0

После некоторых ручных экспериментов кажется, что focus_auto: 0 и focus_absolute: 75 дает хороший баланс, делая текст крупным планом достаточно четким, не слишком сильно размывая удаленные объекты:

$ v4l2-ctl -d /dev/video1 --set-ctrl focus_auto=0
$ v4l2-ctl -d /dev/video1 --set-ctrl focus_absolute=75

Итак, я пишу файл правил udev /etc/udev/rules.d/90-logitech-c930e.rules для применения этих настроек:

KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", RUN+="/usr/bin/v4l2- ctl -d $devnode --set-ctrl focus_auto=0", RUN+="/usr/bin/v4l2-ctl -d $devnode --set-ctrl focus_absolute=75"

Этот файл также можно найти на GitHub

idVendor: 046d и idProduct: 0843 я получил с lsusb:

$ lsusb | grep Logitech
Шина 001 Устройство 002: ID 046d:0843 Веб-камера Logitech, Inc. C930e

Затем я перезагружаю systemd-udevd.service:

$ sudo systemctl перезапустить systemd-udevd.service

Отключите камеру и снова подключите ее. Первые несколько секунд focus_auto установлен на 0 и focus_absolute к 75 как и ожидалось:

$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 0
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolute: 75

Но самое большее через несколько десятков секунд настройки возвращаются к значениям по умолчанию:

$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolute: 0

Почему это может быть? Можно ли отключить это поведение? Если да, то как?

Рейтинг:1
флаг cn

После некоторых дополнительных исследований кажется, что автоматическое восстановление настроек по умолчанию — это функция, а не ошибка (TM): https://www.reddit.com/r/obs/comments/fflg5g/logitech_cam_keeps_resetting_video_settings_back/

Поэтому у меня возникла идея: что, если бы я мог устанавливать фокус каждые несколько секунд или около того, чтобы настройки не возвращались к значениям по умолчанию? Оказывается, это возможно, хотя и не напрямую с udev, поскольку это длительный процесс, а правила udev блокируют его. Вместо этого я использовал комбинацию правил udev, юнитов устройств systemd и сервисных юнитов.

Идея высокого уровня заключается в следующем:

  • Создайте файл правил udev, который пометит systemd, чтобы был создан связанный модуль устройства, и установите SYSTEMD_ХОЧЕТ указать на файл модуля шаблона службы, передав второстепенный номер устройства в шаблон
  • Модуль шаблона службы запускает сценарий, передавая свой аргумент (младший номер устройства) сценарию.
  • Сценарий использует младший номер устройства для ссылки на правильную камеру и повторно устанавливает параметры фокусировки на этой камере с интервалом в 5 секунд.

Подробное решение можно найти в это суть.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.