Biometric authentication for Linux — a PAM-integrated authentication system inspired by Windows Hello, built in Rust.
  • Rust 64.2%
  • QML 25%
  • Shell 4.8%
  • Makefile 2.1%
  • HTML 1.3%
  • Other 2.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Giacomo 'Mr. Wolf' Furlan 1568707c6f
All checks were successful
CI / Toolchain check (rust:1.97) (push) Successful in 1m43s
SAST / SAST (audit · deny · geiger · semgrep) (push) Successful in 2m28s
CI / Format & Lint (push) Successful in 2m34s
CI / Test (push) Successful in 2m26s
remove daemon-side 2s availability poll that hammered the camera even with no client watching; enroll GUI polls on-demand instead
2026-09-11 10:16:37 +02:00
.cargo-husky/hooks chore: add cargo-husky for versioned pre-commit hook (fmt + clippy) 2026-07-27 12:23:33 +02:00
.forgejo/workflows ci: fix spurious exit 1 in release upload loop (grep -q on empty output) 2026-08-28 00:01:47 +02:00
.githooks feat(ci): add package workflow for RPM, DEB, and Arch builds on tag push 2026-07-28 12:04:52 +02:00
assets/icons chore(assets): redesign app icon with indigo enrollment-animation style 2026-08-04 15:02:42 +02:00
config fix: SDDM biometric auth fails on first login due to race condition and SELinux denial 2026-08-28 10:04:32 +02:00
crates remove daemon-side 2s availability poll that hammered the camera even with no client watching; enroll GUI polls on-demand instead 2026-09-11 10:16:37 +02:00
docs docs: add recovery hints to user manual; fix stale references 2026-08-28 00:48:51 +02:00
packaging fix: build scripts exit 0 on success; add libqt6opengl6-dev to deb build 2026-08-27 20:53:32 +02:00
po i18n: add full translation support for all user-facing strings 2026-08-24 11:58:18 +02:00
polkit add key inconsistency detection, TUI 4-tab rewrite, linux-hello-notify service 2026-08-10 08:43:09 +02:00
scripts fix(helper): suppress repeated WARN in demo mode and remove sudo kill in preview 2026-07-29 15:53:09 +02:00
tools/ir-camera-trigger feat(tools): add ir-camera-trigger Windows app for USB protocol RE 2026-07-30 14:59:29 +02:00
ui remove daemon-side 2s availability poll that hammered the camera even with no client watching; enroll GUI polls on-demand instead 2026-09-11 10:16:37 +02:00
.envrc dev: add direnv config and .gitignore entry for .env 2026-07-26 23:13:05 +02:00
.gitignore gitignore: exclude compiled SELinux artifacts (*.mod, *.pp) 2026-08-10 19:54:24 +02:00
.semgrepignore ci: suppress semgrep false positives — nosemgrep for FFI unsafe, temp-dir tests, CLI args 2026-08-21 13:59:32 +02:00
Cargo.toml Bump to v0.1.0-alpha2 2026-08-28 11:57:30 +02:00
CHANGELOG.md remove daemon-side 2s availability poll that hammered the camera even with no client watching; enroll GUI polls on-demand instead 2026-09-11 10:16:37 +02:00
CLAUDE.md docs(CLAUDE.md): update SDDM section to reflect #41/#42/#43 fixes 2026-08-15 00:30:57 +02:00
deny.toml fix: probe_payloads includes GET_DEF candidate, upgrade gettext-rs to 0.8, clean deny.toml 2026-08-27 15:06:46 +02:00
Dockerfile.ci ci: bake SAST tools into linux-hello-ci Docker image 2026-08-15 00:55:46 +02:00
LICENSE Add initial project documentation (README, ARCHITECTURE, LICENSE) 2026-07-24 12:20:45 +02:00
Makefile feat: expose version from single source (Cargo.toml) and display it in UIs 2026-08-27 16:56:28 +02:00
README.md docs: add user manual with per-distro install guides and post-install reference 2026-07-29 13:52:57 +02:00
rust-toolchain.toml feat(packaging): add deb/rpm/PKGBUILD/Nix packaging for Debian, Fedora, Arch, NixOS (EPIC-15) 2026-07-27 23:51:58 +02:00

Linux Hello

Biometric authentication for Linux — a PAM-integrated authentication system inspired by Windows Hello, built in Rust.

Overview

linux-hello brings hardware-backed biometric authentication to Linux desktops and servers. It plugs into PAM as a standard authentication module, meaning it works transparently with any application that uses PAM: login managers (GDM, SDDM), sudo, polkit, screen lockers, and more.

Authentication is handled by a central system daemon that orchestrates one or more authenticators simultaneously. Each authenticator carries a trust score reflecting its resistance to spoofing; the daemon selects the strongest available factor at runtime and compares it against the minimum score required by the requesting service. If the preferred authenticator is unavailable (e.g. a FIDO2 key left at home), the system degrades gracefully to the next best enrolled option.

All sensitive data — biometric templates, encryption keys, configuration — is protected by TPM 2.0. Nothing leaves the device.

Supported Authenticators

Authenticator Trust Score Notes
FIDO2 hardware key 100 Physical possession + PIN/biometric
Recovery token 100 One-time emergency bypass; argon2id-hashed
Fingerprint sensor 70 Via fprintd
TOTP 60 RFC 6238; any authenticator app
Webcam with IR 50 Depth-assisted liveness detection
PIN 40 Numeric PIN, TPM-bound
Webcam (RGB only) 30 Passive liveness detection

Key Features

  • PAM integration — drop-in module, no changes to existing PAM stacks required
  • Trust score model — per-service minimum score, graceful fallback to best available factor
  • Anti-spoofing — face recognition backed by ONNX liveness models; IR depth analysis when available
  • TPM 2.0 storage — biometric templates and config sealed by hardware key, never stored in plaintext
  • Display manager support — authentication is display-agnostic; optional UI overlay for GDM, SDDM, swaylock/hyprlock, and TTY
  • Privacy-first — all inference runs locally; no network calls, no telemetry

Documentation

  • User Manual — installation, PAM configuration, enrollment, trust policies, DM integration
  • Architecture — full HLD: component map, IPC protocol, trust model flow, epic roadmap

Installation

linux-hello must be installed via a package manager — manual installation is not supported.

The PAM module (pam_linux_hello.so) is loaded by PAM at every login, sudo, and screen-unlock. An incorrect file path, wrong permissions, or a missing running service can lock you out of the system. Package manager installation guarantees correct placement, permissions, service activation, and clean removal.

Pre-built packages are available for:

Distribution Init Package Guide
Arch, CachyOS, Manjaro, EndeavourOS systemd .pkg.tar.zst install/arch.md
Artix Linux OpenRC .pkg.tar.zst install/artix-openrc.md
Artix Linux runit .pkg.tar.zst install/artix-runit.md
Debian 12+, Ubuntu 22.04+, Mint, Pop!_OS systemd .deb install/debian.md
Fedora 42+, Bazzite, RHEL 9+ systemd .rpm install/fedora.md
Void Linux runit .xbps install/void.md

Download the latest release from the Releases page.

Status

Active development — core authentication pipeline, TOTP/recovery tokens, and packaging complete.

License

GNU General Public License v3.0 — see LICENSE.