- PVSM.RU - https://www.pvsm.ru -
Многие современные ноутбуки оснащаются сканерами отпечатков, но что делать, если ваш рабочий ПК или старый ноутбук такой возможности не имеет? Китайские маркетплейсы предлагают огромное количество USB-сканеров по цене 1000–2000 рублей. Однако при попытке использовать их в Linux пользователя ждёт сюрприз: официальные драйверы отсутствуют, а встроенная поддержка libfprint часто не работает.
В этой статье я расскажу, как заставить работать сканер Chipsailing CS9711 (ID 2541:0236) в Ubuntu и других дистрибутивах. Мы скомпилируем форк libfprint с поддержкой этого устройства, настроим демон fprintd и подключим аутентификацию по отпечатку в KDE (а также дадим подсказки для других окружений).
Сканеры Chipsailing используют проприетарный протокол, и официальной поддержки в мейнстримном libfprint нет. Энтузиаст archeYR [1] проделал огромную работу, создав форк libfprint, который добавляет поддержку CS9711. Позже появились и другие форки (например, от ddlsmurf [2] и Luigi-Pizzolito [3]), которые также активно развиваются .
Важно: драйвер находится на ранней стадии и основан на экспериментальном распознавании изображений . Базовые функции — регистрация и верификация — работают стабильно, но для критических систем с высокими требованиями к безопасности он пока не рекомендуется .
Сканер Chipsailing CS9711 (можно проверить командой lsusb, должно быть ID 2541:0236). Обратите внимание: регистрация отпечатка требует 15 касаний, так что наберитесь терпения .
Дистрибутив Linux (тестировалось на Kubuntu 24.04 LTS, но подойдёт любой Debian-based).
Доступ в интернет и права sudo.
Немного терпения.
Нам понадобятся инструменты разработки и библиотеки, необходимые для компиляции libfprint:
bash
sudo apt update
sudo apt install git meson ninja-build pkg-config
libglib2.0-dev libgusb-dev libgudev-1.0-dev
libopencv-dev gobject-introspection libfprint-2-dev
Обратите внимание: мы ставим и стандартный libfprint-2-dev — он потребуется для удовлетворения зависимостей fprintd, но позже мы его подменим.
bash
git clone https://github.com/archeYR/libfprint-CS9711.git
cd libfprint-CS9711 # перейдите в каталог с исходниками
meson setup build
Если meson сообщит об отсутствующих зависимостях, доустановите их и повторите meson setup build. Затем собираем:
bash
ninja -C build
Важно: Проверьте работоспособность с помощью примеров до установки — это поможет убедиться, что сканер корректно взаимодействует с библиотекой:
bash
cd build/examples
sudo ./enroll # приложите палец 15 раз для регистрации
sudo ./verify # проверьте распознавание
Если примеры работают, можно устанавливать библиотеку в систему:
bash
cd .. # вернуться в каталог libfprint-CS9711
sudo ninja -C build install
sudo ldconfig # обновляем кэш библиотек
Библиотека будет установлена в /usr/local/lib/x86_64-linux-gnu/. Там появятся файлы:
libfprint-2.so [5].2.0.0
симлинки libfprint-2.so [5] и libfprint-2.so [5].2
Демон fprintd отвечает за взаимодействие с PAM и приложениями.
bash
sudo apt install fprintd
При установке подтянется стандартная библиотека libfprint из репозитория — она останется неиспользуемой, но удалять её не обязательно.
Самый простой способ заставить fprintd использовать нашу версию библиотеки — подгружать её через LD_PRELOAD. Для systemd-сервисов это делается через drop-in файл.
Создадим override для сервиса fprintd:
bash
sudo systemctl edit fprintd.service
В открывшемся редакторе (обычно nano) впишем:
text
[Service]
Environment="LD_PRELOAD=/usr/local/lib/x86_64-linux-gnu/libfprint-2.so"
Сохраняем и выходим. Затем перезапускаем сервис и проверяем его статус:
bash
sudo systemctl restart fprintd.service
sudo systemctl status fprintd.service
В выводе не должно быть ошибок, а в drop-in поле должна появиться строка с override.conf.
Если по каким-то причинам LD_PRELOAD не работает (например, в некоторых дистрибутивах), можно пойти другим путём — пересобрать fprintd с привязкой к нашей версии libfprint .
Важный нюанс: на момент написания статьи форк libfprint-CS9711 имеет версию 1.94.6, а актуальный fprintd требует libfprint версии 1.94.9 или выше. Поэтому необходимо использовать старую версию fprintd (1.94.4), которая совместима .
Скачайте исходники fprintd версии 1.94.4, установите дополнительные зависимости и выполните сборку с указанием правильного PKG_CONFIG_PATH. Детальная инструкция есть в репозитории Frainaqua [6] .
Теперь можно добавить свой палец:
bash
sudo fprintd-enroll $USER
По умолчанию регистрируется правый указательный. Чтобы изменить палец, используйте опцию --finger (см. man fprintd-enroll). Во время регистрации нужно будет 15 раз приложить палец, пока прогресс-бар не заполнится — это нормально .
Включаем аутентификацию по отпечатку в системе:
bash
sudo pam-auth-update
В появившемся меню ставим звёздочку напротив пункта Fingerprint authentication. Нажимаем Ok.
Теперь при входе в систему, блокировке экрана или выполнении команд через sudo (если настроено) система будет предлагать приложить палец. Если сканер не сработает, можно будет ввести пароль как обычно.
Для более тонкой настройки (например, чтобы отпечаток работал только для локального входа, но не для sudo) можно редактировать файлы в /etc/pam.d/ вручную. Например, для KDE нужно добавить в /etc/pam.d/kde строку:
text
auth sufficient pam_fprintd.so
В Kubuntu после включения Fingerprint authentication в PAM, экран входа (SDDM) автоматически предложит использовать сканер. В GNOME работает аналогично. Если что-то не так, проверьте, запущен ли fprintd (systemctl status fprintd), и посмотрите логи:
bash
journalctl -u fprintd -f
Для GNOME может потребоваться дополнительная настройка polkit. Создайте файл /etc/pam.d/polkit-1 со следующим содержимым :
text
#%PAM-1.0
auth required pam_env.so
auth sufficient pam_fprintd.so
auth include system-auth
account include system-auth
password include system-auth
session include system-auth
После этого перезапустите polkit: sudo systemctl restart polkit.
Убедитесь, что сканер подключён и определился (lsusb). Попробуйте запустить примеры с правами root — возможно, недостаточно прав для доступа к USB.
Проверьте, не сбросился ли override файл. Иногда systemd обновляет сервис и нужно заново применить изменения.
Проверьте, что библиотека подгружается корректно. Можно остановить fprintd и запустить его вручную с явным указанием LD_PRELOAD:
bash
sudo systemctl stop fprintd
sudo LD_PRELOAD=/usr/local/lib/x86_64-linux-gnu/libfprint-2.so /usr/libexec/fprintd
И в другом терминале попробовать зарегистрировать палец. Если ручной запуск работает — проблема в systemd-окружении.
Возможно, у вас другая модель. Проверьте ID сканера. Для CS9711 должен быть ID 2541:0236. Также существуют варианты с ID 2541:9711 (например, в GPD Win Max 2) .
Это известная проблема для данного драйвера . Попробуйте:
Перерегистрировать палец, меняя положение и давление.
Очистить сенсор микрофиброй.
Попробовать альтернативный форк драйвера (например, от Luigi-Pizzolito [3] или ddlsmurf [2]) .
Иногда после обновления системы версии библиотек OpenCV меняются, и собранный драйвер не может их найти. Решение — создать символические ссылки :
bash
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_features2d.so.4.12 /usr/lib/x86_64-linux-gnu/libopencv_features2d.so.4.11
(подставьте актуальные версии из сообщения об ошибке).
Поскольку мы поставили пакет libfprint-2-dev, apt может попытаться обновить библиотеку из репозитория. Чтобы заблокировать нежелательные обновления, используйте apt-mark :
bash
sudo apt-mark hold fprintd libfprint-2-2 libfprint-2-dev
Для проверки: apt-mark showhold. Для снятия блокировки: sudo apt-mark unhold fprintd libfprint-2-2.
В дистрибутивах на основе RPM (Fedora) используется dnf versionlock .
Чтобы удалить самодельную библиотеку:
bash
cd libfprint-CS9711 # перейдите в каталог с исходниками
sudo ninja -C build uninstall
После этого можно переустановить штатный fprintd (хотя он и так был). Удалите override файл:
bash
sudo rm /etc/systemd/system/fprintd.service.d/override.conf
sudo systemctl daemon-reload
Снимите блокировку с пакетов, если устанавливали:
bash
sudo apt-mark unhold fprintd libfprint-2-2
Мы получили работающий сканер отпечатков за небольшие деньги в Linux. Хотя драйвер пока не входит в официальный libfprint (отслеживать прогресс можно в issue #610 на GitLab [7]), его качество уже позволяет комфортно использовать устройство для повседневной аутентификации. Это отличный пример того, как сообщество может закрывать аппаратные пробелы даже для бюджетных устройств.
Если вы столкнулись с другими моделями сканеров Chipsailing, возможно, этот же подход сработает и для них — достаточно найти соответствующий форк или написать свой драйвер.
Ссылки:
Автор: leonidsm
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/libfprint/445735
Ссылки в тексте:
[1] archeYR: https://github.com/archeYR
[2] ddlsmurf: https://github.com/ddlsmurf/libfprint-CS9711
[3] Luigi-Pizzolito: https://github.com/Luigi-Pizzolito/libfprint-CS9711_Installer
[4] Image: https://sourcecraft.dev/
[5] libfprint-2.so: http://libfprint-2.so
[6] репозитории Frainaqua: https://github.com/Frainaqua/CS9711-fingerprint-linux-install
[7] issue #610 на GitLab: https://gitlab.freedesktop.org/libfprint/libfprint/-/issues/610
[8] Репозиторий драйвера archeYR/libfprint-CS9711: https://github.com/archeYR/libfprint-CS9711
[9] Документация fprintd: https://fprint.freedesktop.org/
[10] PAM и отпечатки пальцев: https://manpages.ubuntu.com/manpages/noble/en/man5/pam.conf.5.html
[11] Источник: https://habr.com/ru/articles/1003468/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1003468
Нажмите здесь для печати.