Многие современные ноутбуки оснащаются сканерами отпечатков, но что делать, если ваш рабочий ПК или старый ноутбук такой возможности не имеет? Китайские маркетплейсы предлагают огромное количество USB-сканеров по цене 1000–2000 рублей. Однако при попытке использовать их в Linux пользователя ждёт сюрприз: официальные драйверы отсутствуют, а встроенная поддержка libfprint часто не работает.
В этой статье я расскажу, как заставить работать сканер Chipsailing CS9711 (ID 2541:0236) в Ubuntu и других дистрибутивах. Мы скомпилируем форк libfprint с поддержкой этого устройства, настроим демон fprintd и подключим аутентификацию по отпечатку в KDE (а также дадим подсказки для других окружений).
Почему это вообще проблема?
Сканеры Chipsailing используют проприетарный протокол, и официальной поддержки в мейнстримном libfprint нет. Энтузиаст archeYR проделал огромную работу, создав форк libfprint, который добавляет поддержку CS9711. Позже появились и другие форки (например, от ddlsmurf и Luigi-Pizzolito), которые также активно развиваются .
Важно: драйвер находится на ранней стадии и основан на экспериментальном распознавании изображений . Базовые функции — регистрация и верификация — работают стабильно, но для критических систем с высокими требованиями к безопасности он пока не рекомендуется .
Что нам потребуется
-
Сканер Chipsailing CS9711 (можно проверить командой
lsusb, должно бытьID 2541:0236). Обратите внимание: регистрация отпечатка требует 15 касаний, так что наберитесь терпения . -
Дистрибутив Linux (тестировалось на Kubuntu 24.04 LTS, но подойдёт любой Debian-based).
-
Доступ в интернет и права sudo.
-
Немного терпения.
Пошаговая инструкция
1. Установка зависимостей для сборки
Нам понадобятся инструменты разработки и библиотеки, необходимые для компиляции 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, но позже мы его подменим.
2. Клонирование и сборка форка
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.2.0.0 -
симлинки
libfprint-2.soиlibfprint-2.so.2
3. Установка fprintd
Демон fprintd отвечает за взаимодействие с PAM и приложениями.
bash
sudo apt install fprintd
При установке подтянется стандартная библиотека libfprint из репозитория — она останется неиспользуемой, но удалять её не обязательно.
4. Подмена библиотеки через LD_PRELOAD (простой способ)
Самый простой способ заставить 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.
4. Альтернатива: полная пересборка fprintd (сложный способ)
Если по каким-то причинам 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 .
5. Регистрация отпечатков для текущего пользователя
Теперь можно добавить свой палец:
bash
sudo fprintd-enroll $USER
По умолчанию регистрируется правый указательный. Чтобы изменить палец, используйте опцию --finger (см. man fprintd-enroll). Во время регистрации нужно будет 15 раз приложить палец, пока прогресс-бар не заполнится — это нормально .
6. Настройка PAM для входа по отпечатку
Включаем аутентификацию по отпечатку в системе:
bash
sudo pam-auth-update
В появившемся меню ставим звёздочку напротив пункта Fingerprint authentication. Нажимаем Ok.
Теперь при входе в систему, блокировке экрана или выполнении команд через sudo (если настроено) система будет предлагать приложить палец. Если сканер не сработает, можно будет ввести пароль как обычно.
Для более тонкой настройки (например, чтобы отпечаток работал только для локального входа, но не для sudo) можно редактировать файлы в /etc/pam.d/ вручную. Например, для KDE нужно добавить в /etc/pam.d/kde строку:
text
auth sufficient pam_fprintd.so
7. Проверка в графическом окружении (KDE/GNOME)
В 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.
Возможные проблемы и их решение
Проблема: примеры enroll/verify падают с ошибкой
Убедитесь, что сканер подключён и определился (lsusb). Попробуйте запустить примеры с правами root — возможно, недостаточно прав для доступа к USB.
Проблема: после перезагрузки fprintd не стартует
Проверьте, не сбросился ли override файл. Иногда systemd обновляет сервис и нужно заново применить изменения.
Проблема: PAM запрашивает отпечаток, но сканер не реагирует
Проверьте, что библиотека подгружается корректно. Можно остановить 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) .
Проблема: верификация не проходит (verify-no-match)
Это известная проблема для данного драйвера . Попробуйте:
-
Перерегистрировать палец, меняя положение и давление.
-
Очистить сенсор микрофиброй.
-
Попробовать альтернативный форк драйвера (например, от Luigi-Pizzolito или ddlsmurf) .
Проблема: ошибки OpenCV (libopencv_features2d.so не найдена)
Иногда после обновления системы версии библиотек 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
(подставьте актуальные версии из сообщения об ошибке).
Проблема: система обновляет самодельную библиотеку через apt
Поскольку мы поставили пакет 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), его качество уже позволяет комфортно использовать устройство для повседневной аутентификации. Это отличный пример того, как сообщество может закрывать аппаратные пробелы даже для бюджетных устройств.
Если вы столкнулись с другими моделями сканеров Chipsailing, возможно, этот же подход сработает и для них — достаточно найти соответствующий форк или написать свой драйвер.
Ссылки:
Автор: leonidsm
