Включаем поддержку отпечатка пальца на Dell 5411

Установка

Итак, у нас на руках есть Dell 5411 с датчиком отпечатка пальца и система Manjaro с ядром Linux 6.6.32-1-MANJARO. Инструкция подходит и для других ноутбуков Dell/Thinkpad с датчиком Broadcom.

Проверим, какой датчик у нас стоит:

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0a5c:5843 Broadcom Corp. 58200
Bus 001 Device 003: ID 0c45:6a09 Microdia Integrated_Webcam_HD
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

У нас установлен Broadcom 58200, с idVendor = 0a5c, idProduct = 5843. Обратившись к сайту https://linux-hardware.org/?id=usb:0a5c-5843 узнаем, что поддержка есть, но не без танцев с бубном

В обычной ситуации, мы бы установили fprintd (отвечает за работу с датчиком отпечатка пальца и передачу его в систему). Он в свою очередь в качестве зависимости устанавливает libfprint.

Но если мы сейчас так сделаем, то получим конфликт со следующим пакетом. Поэтому, в данной ситуации, нам нужно сначала установить libfprint-2-tod1-broadcom

$ pamac build libfprint-2-tod1-broadcom

В свою очередь этот пакет установит также libfprint-tod (форк libfprint для работы с сенсорными датчикам отпечатка пальца) и libfprint. Пакет libfprint-2-tod1-broadcom — это проприетарные драйвера Dell для датчиков Broadcom из репозитория ubuntu.

Не всегда они вовремя обновляются, поэтому скачиваем актуальные драйвера (Dell ControlVault3 Driver and Firmware) с сайта Dell для вашего устройства. В моем случае это 5.14.10.10, A26 (Dell-ControlVault3-Driver-and-Firmware_8CHRT_WIN_5.14.10.10_A26_01.EXE). Открываем любым архиватором и распаковываем. В моем случае это File Roller.

По пути production/Windows10-x64/18356/Drivers/cv/firmware лежат драйвера для вашего устройства. Копируем их в /var/lib/fprint/fw

# cp /home/user/production/Windows10-x64/18356/Drivers/cv/firmware/* /var/lib/fprint/fw

Перед следующим шагом рекомендую открыть journalctl и проконтроллировать процесс обновления прошивки

# journalctl -f

Учитывайте, что обновление прошивки может занимать несколько минут. Если выполнить перезапуск демона fprint, можно получить ошибку таймаута. Пугаться не стоит, нужно подождать и проверить, что отображается в журнале. В моем случае:

янв 01 01:50:49 user systemd[1]: Starting Fingerprint Authentication Daemon...
янв 01 01:50:49 user fprintd[24831]: In cvif_IsUshThere(), cv_get_ush_ver() status: (0x0)
янв 01 01:50:49 user fprintd[24831]: Control Vault getting chip type
янв 01 01:50:49 user fprintd[24831]: Citadel A0 CID7 Chip Found....
янв 01 01:50:49 user fprintd[24831]: Current AAI Version = 5.12.18.0
янв 01 01:50:49 user fprintd[24831]: Current SBI Version = 181
янв 01 01:50:49 user fprintd[24831]: AAI version available for upgrade = 5.14.3.0
янв 01 01:50:49 user fprintd[24831]: SBI version available for upgrade = 202
янв 01 01:50:49 user fprintd[24831]: Updating ControlVault firmware from 5.12.18.0 to 5.14.3.0
янв 01 01:50:49 user fprintd[24831]: Event: FwUpgradeStarted
янв 01 01:50:49 user fprintd[24831]: Upgrade the SBI from 181 to 202, first clear SCD
янв 01 01:50:49 user fprintd[24831]: Writing /var/lib/fprint/fw/bcm_cv_clearscd.bin to flash
янв 01 01:50:49 user fprintd[24831]: cv_flash_update() successful
янв 01 01:50:49 user fprintd[24831]: Reset to SBI to update the SBI....
янв 01 01:50:52 user fprintd[24831]: In cvif_IsUshThere(), cv_get_ush_ver() status: (0x13)
янв 01 01:50:52 user kernel: usb 1-10: USB disconnect, device number 7
янв 01 01:50:53 user kernel: usb 1-10: new high-speed USB device number 8 using xhci_hcd
янв 01 01:50:53 user kernel: usb 1-10: New USB device found, idVendor=0a5c, idProduct=5841, bcdDevice= 1.02
янв 01 01:50:53 user kernel: usb 1-10: New USB device strings: Mfr=1, Product=2, SerialNumber=3
янв 01 01:50:53 user kernel: usb 1-10: Product: 58200
янв 01 01:50:53 user kernel: usb 1-10: Manufacturer: Broadcom Corp
янв 01 01:50:53 user kernel: usb 1-10: SerialNumber: 0123456789ABCD
янв 01 01:50:53 user mtp-probe[24874]: checking bus 1, device 8: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-10"
янв 01 01:50:53 user mtp-probe[24874]: bus: 1, device: 8 was not an MTP device
янв 01 01:50:53 user mtp-probe[24888]: checking bus 1, device 8: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-10"
янв 01 01:50:53 user mtp-probe[24888]: bus: 1, device: 8 was not an MTP device
янв 01 01:50:53 user fprintd[24831]: In cvif_IsUshThere(), cv_get_ush_ver() status: (0x0)
янв 01 01:50:53 user fprintd[24831]: Found ControlVault Chip Type: CITADEL A0 CID7
янв 01 01:50:53 user fprintd[24831]: Event: FwUpgradeInProgress 1
янв 01 01:50:53 user fprintd[24831]: Going to update SBI (bcmsbiCitadelA0_7.otp)
янв 01 01:50:53 user fprintd[24831]: Writing /var/lib/fprint/fw/bcmsbiCitadelA0_7.otp to flash
янв 01 01:50:58 user fprintd[24831]: cv_flash_update() successful
янв 01 01:50:58 user fprintd[24831]: BCM Update attempt 1
янв 01 01:50:58 user fprintd[24831]: Event: FwUpgradeInProgress 2
янв 01 01:50:58 user fprintd[24831]: Going to clear SCD
янв 01 01:50:58 user fprintd[24831]: Writing /var/lib/fprint/fw/bcm_cv_clearscd.bin to flash
янв 01 01:50:49 user fprintd[23772]: More fingers needed
янв 01 01:50:49 user fprintd[23772]: Capture Initiated, Please place your finger now on the sensor now
янв 01 01:50:49 user fprintd[23772]: The interrupt processed data 3
янв 01 01:50:49 user fprintd[23772]: Update enrollment is successful
янв 01 01:50:49 user fprintd[23772]: Enrollment procedure successfully completed
янв 01 01:50:49 user fprintd[23772]: call cv_fingerprint_commit_enrollment
янв 01 01:50:49 user fprintd[23772]: Capture Initiated, Please place your finger now on the sensor now

Далее, необходимо установить fprintd

# pacman -S fprintd

После установки, проверим видит ли fprint наше устройство

$ fprintd-list user

И добавим наш отпечаток пальца

$ fprintd-enroll

На этом установка закончена. Теперь средствами системы можно включить\выключить вход по отпечатку пальца, и вход в sudo

Возможные проблемы

Проблема 1. ERROR: A failure occurred in package()

До конца не понял причину ее появления, решил просто пошагово выполнить то, что лежит в PKGBUILD. Для этого склонировал репозиторий с AUR. Запустил makepkg, а затем из директории src скопировал нужные файлы

$ git clone https://aur.archlinux.org/libfprint-2-tod1-broadcom.git
$ makepkg
$ cd src/libfprint-2-tod1-broadcom
# cp usr/lib/x86_64-linux-gnu/libfprint-2/tod-1/libfprint-2-tod-1-broadcom.so /usr/lib/libfprint-2/tod-1/
# cp lib/udev/rules.d/60-libfprint-2-device-broadcom.rules /usr/lib/udev/rules.d/
# mkdir -p /var/lib/fprint/fw/
# cp var/lib/fprint/fw/* /var/lib/fprint/fw/

Проблема 2. После спящего режима датчик отпечатка пальца не работает, исчезает из lsusb

Проблема связана с тем, что датчик для сна отключился и не запустился. Первое решение — перевести питание в режим auto, что делается в пакете libfprint-2-tod1-broadcom.

# cat /usr/lib/udev/rules.d/60-libfprint-2-device-broadcom.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5842", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5842", ENV{LIBFPRINT_DRIVER}="Broadcom Sensors"

Проверьте, что ваше устройство там есть. Если нет, добавьте сами. idVendor:idProduct можно найти, если выполнить lsusb. Чтобы устройство вновь появилось, выключите и включите ноутбук (только холодный запуск, перезагрузка не поможет)

В моем случае код устройства почему-то изменился на 5841, поэтому я добавил строчку с ним

# nano /usr/lib/udev/rules.d/60-libfprint-2-device-broadcom.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5841", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5841", ENV{LIBFPRINT_DRIVER}="Broadcom Sensors"

При желании можно отключить режим сна для устройства

Проблема 3. Во время обновления прошивки устройства появляется segfault (fprintd.service: Main process exited, code=dumped)

Решилось тем, что я полностью удалил fprintd/libfprint и установил заново. Интернет подсказывает, что библиотека используемая в libfprint-2-tod1-broadcom не подошла к текущей версии libc

Проблема 4. FwUpgradeError. Check Firmware Files or CID used or Hardware etc.

Случилась, когда не все файлы были скопированы по пути /var/lib/fprint/fw/

Проблема 5. Impossible to verify: GDBus.Error:net.reactivated.Fprint.Error.NoSuchDevice: No devices available

Скорее всего устройство либо выключено, либо не хватает библиотеки ibfprint-2-tod-1-broadcom.so. Fprintd не видит устройство

Отдельная благодарность этому человеку, за статью с описанием как обновить прошивку

Теги: Broadcom fingerprint reader 0a5c:5843 driver, Dell ControlVault broadcom, bcmCitadel_7.otp, 0a5c disappear after deep sleep, usb fingerprint disappear after deep sleep, Fingerprint reader not detected after suspend

Абакумов Дмитрий

Веб-разработчик и увлеченный турист

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *