
Grow R503 センサー + Arduino + Rust 製 fprintd 置き換えデーモンを使った Linux デスクトップ指紋ログイン
部品から組み立てる Linux デスクトップ向け USB 指紋リーダーです。部品の合計コストは 15 ドル未満。アップストリームの fprintd のドロップイン代替品で、PAM、KDE 設定、GNOME 設定、fprintd-verify、指での sudo、指での画面ロック解除がすべて動作します。
fw=1.0 / r503d 1.0.0 の時点で、Arduino↔ホスト間の配線は認証されます。すべてのコマンドとレスポンスには、EEPROM 内の TOFU ペアリング済みシークレットを鍵とする SipHash-2-4 MAC が付与されます。USB シリアルリンクに対するリプレイ攻撃とホットスワップ攻撃はブロックされます。脅威モデルがカバーしない内容を含む完全な設計については、SPEC.md §13 を参照してください。

3Dプリンターがあればなあ…``` ┌──────────┐ UART ┌─────────────┐ USB-CDC ┌──────────────────┐ │ Grow │ 57600 8N1│ Arduino │ /dev/r503 │ r503d daemon │ │ R503 │◀─────────▶│ (firmware) │◀──────────▶│ net.reactivated │ │ sensor │ 3.3V TTL │ │ framed, │ .Fprint on D-Bus│ └──────────┘ └─────────────┘ MAC'd └──────────────────┘ │ ▼ PAM, KDE, GNOME, fprintd-verify, …
## なぜ
Linux向けのハードウェアUSB指紋リーダーは希少で高価であり、既存のもの(Validity、Synapticsなど)は、ベンダーのファームウェア更新で壊れる不安定なlibfprintドライバーを通じてリバースエンジニアリングされています。Grow R503のプロトコルは**公開**されており、Arduino側は自作のコードで、libfprint互換レイヤーは単なるD-Busです。
さらに、ソースを上から下まで読める指紋リーダーが手に入ります。
## 部品リスト
| 部品 | メモ | 参考価格 |
|------|-------|------|
| Grow R503 静電容量式指紋センサー | RGBリング付きの丸型 | 約$10 |
| Arduino Uno R3 / Nano / Mega / 任意のATmega328ボード | SoftwareSerialが動作するもの | $5–$25 |
| ジャンパーワイヤー4〜6本 | Dupont / ブレッドボード | 些細なもの |
これだけです。**レベルシフターも分圧器も不要** — その理由は [`SPEC.md` §3.1](https://github.com/matpb/linux-fingerprint-r503/blob/main/SPEC.md) を参照(R503のRXラインは実際には5Vトレラントで、データシートは嘘をついています)。```
R503 Arduino (Uno R3 / Nano / etc.)
---- ------------------------------
Red (VCC) 3V3
White (3.3VT) 3V3 (touch-IC supply; shares rail with red)
Black (GND) GND
Yellow (TXD) D2 ── SoftwareSerial RX
Brown (RXD) D3 ── SoftwareSerial TX (direct — no divider!)
Blue (WAKEUP) D4 (optional; not used by firmware yet)
If your R503 ships with the JST-SH connector, snip a 6-pin JST-SH-to-Dupont pigtail to break the wires out. Brown is sometimes green depending on the seller — verify against the wire that goes into the RXD pin of the JST header, not the colour.
Fedora 44 KDEでテスト済み。fprintd、pam_fprintd、および最新のRustツールチェーンを備えたsystemdベースのディストリビューションであれば動作するはずです。
システムパッケージ:
| ディストリビューション | ビルド | ランタイム |
|---|---|---|
| Fedora / RHEL | rust cargo arduino-cli tpm2-tss-devel | fprintd pam fprintd-pam tpm2-tss |
| Debian / Ubuntu | rustc cargo arduino-cli libtss2-dev | fprintd libpam-fprintd libtss2-esys-3.0.2-0 |
tss-esapiパッケージは、--pair --seal-tpm(SPEC §13.12)を使用する予定がある場合にのみ必要です。それ以外の場合、デーモンはTPMなしでもビルドおよび実行できます。tss-esapiはビルド時の必須依存関係ですが、実行時の任意依存関係です(コードパスは/var/lib/r503d/key.tpmが存在する場合にのみ実行されます)。
Rust 1.95+、arduino-cliが$PATHに含まれていること。
TPM2はありますか?```bash ls /dev/tpmrm0 && tpm2_pcrread sha256:7 | head -3
両方が成功した場合、ホストはシールドキーパスを使用できます。`/dev/tpmrm0` が
ない場合 (古いハードウェア、BIOSでTPMが無効、または仮想TPMを持たないVM)、
デフォルトの平文キーフローを使用してください。
## ビルドとインストール
### 1. ファームウェアを書き込む
Arduino IDE で `firmware/r503fp/r503fp.ino` を開き、アップロードします。または
`arduino-cli` を使う:```bash
# Uno R3:
arduino-cli compile --fqbn arduino:avr:uno firmware/r503fp/
arduino-cli upload --fqbn arduino:avr:uno --port /dev/ttyACM0 firmware/r503fp/
# Nano (modern Optiboot, including most Elegoo / WAVGAT clones):
arduino-cli compile --fqbn arduino:avr:nano:cpu=atmega328 firmware/r503fp/
arduino-cli upload --fqbn arduino:avr:nano:cpu=atmega328 --port /dev/ttyUSB0 firmware/r503fp/
# Nano with legacy 57600-baud bootloader (older clones):
# replace `cpu=atmega328` with `cpu=atmega328old`
ファームウェアは Adafruit_Fingerprint を使用します。IDE はそれをインストールする
よう初回コンパイル時に提案します。
arduino-cli upload が not in sync: resp=0x7e で失敗した場合、ブートローダーは
もう一方のバリアントです — atmega328 ↔ atmega328old を入れ替えて再試行してください。両方
動作します。違いはブートローダーのボーレートだけです。
Rust 1.95+ が必要です。```bash cd pcside/daemon cargo build --release
### 3. インストール```bash
sudo bash pcside/daemon/dist/install.sh
そのスクリプト:
target/release/r503d を /usr/local/bin/r503d にインストールします/var/lib/r503d/(モード 0700 root:root)を鍵、状態、および
ユーザースロットレジストリ用に作成します/dev/r503 として公開する udev ルールを書き込み、デバイスノードを
root:root 0600 にロックします(root として実行されているデーモンだけがそれを必要とします;
これによりデフォルトの 0660 root:dialout パスが閉じられ、他のローカルユーザーが
ポートを開けなくなります — セキュリティ監査 2026-05-28 / H1)。結果: インストール後、
/dev/r503 に対する手動の arduino-cli/serial-monitor コマンドには
sudo が必要です。/etc/systemd/system/r503d.service)をインストールしますnet.reactivated.Fprint の D-Bus 自動起動エントリをオーバーライドします/usr/share/polkit-1/actions/net.reactivated.fprint.device.r503d.policy)
これは呼び出し元識別ゲートによって使用されますこれは冪等です — cargo build --release のたびに再実行して、
新しいバイナリを再デプロイします。
書き込み直後の Nano はペアリングされていません — デーモンは通信しようとしますが、 ファームウェアはすべてのフレーム化コマンドを拒否します。以下の2つのフローの いずれかを選択してください; どちらもペアリング済みの Nano と動作するデーモンで終わります。 ホストに TPM2 がある場合(簡単な確認方法は前提条件を参照)は、TPM でシールドされた フローが推奨されます。
両方のフローで使用されるオプトインファイル(/etc/r503d/allow-pair)は、
自分の Nano を持ってあなたの机に駆け寄る攻撃者を阻止するために存在します —
root なしでのペアリングは不可能です。r503d --pair は、Nano に鍵を送信する
前にマーカーを削除します: ホストが Nano 側のコミットとホスト側の永続化の間に
クラッシュした場合、ゲートは既に閉じているため、次のペアリング試行には
管理者がマーカーを再度 touch する必要があります。送信前の早期終了
(マーカーがない、または「すでにペアリング済み」)は、再試行のためにマーカーをそのまま残します。
TPM2 デバイスがない場合、またはオフラインディスク攻撃への耐性が必要ない場合は、 これを使用します。```bash sudo systemctl stop r503d sudo mkdir -p /etc/r503d sudo touch /etc/r503d/allow-pair # opt-in (see SPEC §13.5) sudo r503d --pair # 128-bit key → /var/lib/r503d/key sudo systemctl start r503d
I notice you've provided instructions but the actual content to translate appears to be missing after "INPUT:".
Could you please provide the chunk content you'd like me to translate? I'm ready to translate it to Japanese (ja) following your rules once the source text is provided.```bash
sudo r503d --status
# port: /dev/r503
# firmware: fw=1.1 fmt=2
# firmware paired: true
# firmware counter: 42
# host key.tpm: (absent)
# host key: /var/lib/r503d/key
# host key.bak: /var/lib/r503d/key.bak
# tpm device: (absent)
# allow-pair: (absent)
同じフローで、--seal-tpm を追加します。生成された鍵は PCR7
(Secure Bootポリシー + 鍵)にシールされ、平文の key ファイルの代わりに
/var/lib/r503d/key.tpm に書き込まれます。オフラインディスク攻撃者(
アンマウントされたパーティションの dd、敵対ホストへのSSDの差し替え)が取得できるのは暗号文のみです。```bash
sudo systemctl stop r503d
sudo mkdir -p /etc/r503d
sudo touch /etc/r503d/allow-pair
sudo r503d --pair --seal-tpm # seals new key to current PCR7
sudo systemctl start r503d
INPUTに翻訳対象のコンテンツが含まれていません。翻訳するテキストが提供されていないため、このチャンクの翻訳を実行できません。正しい「INPUT:」セクションを再送信してください。```bash
sudo r503d --status
# port: /dev/r503
# firmware: fw=1.1 fmt=2
# firmware paired: true
# firmware counter: 12
# host key.tpm: /var/lib/r503d/key.tpm
# host key: (missing)
# host key.bak: (missing)
# tpm device: /dev/tpmrm0
# allow-pair: (absent)
カーネル更新、initrd 更新、fwupd UEFI ファームウェア更新、および grub2
更新は PCR7 を変更しないため、再シールは不要です。PCR7 が変化するのは、
セキュアブートポリシーの編集、MOK の登録、またはディスクを別のホストに
移動した場合のみです。その時点でデーモンは TPM_RC_POLICY_FAIL で
起動を拒否し、dist/reseal-tpm.sh が約 90 秒で復旧します。
復旧: PCR7 変更 を参照してください。
fprintd-enroll mat
fprintd-verify mat
sudo whoami
KDE Settings(Plasma 6)とGNOME Control Centerのユーザーアカウント指紋ダイアログは、どちらも上流の`fprintd`を操作するのとまったく同じように`r503d`を操作します。
### 再ペアリング / 鍵のローテーション
新しい鍵を必要とする場合(鍵の漏洩、ハードウェア交換の予定、パラノイア):```bash
sudo systemctl stop r503d
sudo r503d --unpair # framed; wipes Nano EEPROM + host key
sudo touch /etc/r503d/allow-pair
sudo r503d --pair # plaintext-key rotation
# - or -
sudo r503d --pair --seal-tpm # TPM-sealed rotation
sudo systemctl start r503d
元のペアリングパスに合わせてください。 元々 --seal-tpm を使用していた場合は、--seal-tpm でローテーションしてください — そうしないと、ローテーションは黙ってディスク上の平文キーにダウングレードされます。
--pair --seal-tpm を使用し、その後 PCR7 が測定する何かを変更した場合(Secure Boot の無効化/有効化、新しい MOK の登録、ディスクの別マシンへの移設など)、デーモンは TPM_RC_POLICY_FAIL に関するジャーナルメッセージとともに起動を拒否します。復旧は次の1コマンドです:```bash
sudo bash pcside/daemon/dist/reseal-tpm.sh
このスクリプトは`r503d`を停止し、`firmware/r503fp_wipe/`を再フラッシュしてNano EEPROMを消去し、メインファームウェアを再フラッシュして、`/etc/r503d/allow-pair`を作成し、`r503d --reseal-tpm`を実行して*現在の*PCR7にシールされた新しい鍵を生成し、デーモンを再起動します。実時間:約90秒。登録済みの指紋は保持されます — テンプレートはR503センサーのフラッシュに保存されており、Nanoには保存されません。
スクリプトでは`arduino-cli`が利用可能である必要があります。ユーザーの`$HOME/.local/bin`にインストールされている場合、`$SUDO_USER`経由で自動検出されます。それ以外の場合は、実行前に`ARDUINO_CLI=/full/path/to/arduino-cli`を設定してください。
### 復旧:`state.json`の紛失(カウンターのデシンク)
ホスト鍵が無傷でも`/var/lib/r503d/state.json`が消失しているか、ロールバックされている場合(古いバックアップを復元した、誤ってrmした)、デーモンのカウンターがNanoの`last_seen`より遅れ、フレーム化されたすべてのコマンドが`ERR replay`ではじかれます。`r503d --status`でこの状態が示されます。修正は1つのコマンドだけです:```bash
sudo systemctl stop r503d
sudo r503d --resync # reads Nano last_seen, sets host counter to last_seen+1
sudo systemctl start r503d
再ペアリングも再フラッシュも不要 — 鍵は決して移動しません。--resync が依存する status クエリは
認証されていませんが、ホストカウンターを 前方 にしか進めず、
Nano がすでにコミットした内容に一致させるだけです。したがって、古いフレームを
再生可能にすることは決してできません(最悪の場合、嘘をつく MITM が別の ERR replay を強制しますが、
これは、フレームを改ざんすることで既に可能でした)。 SPEC.md §13.11 を参照してください。
認証された --unpair は、承認のために鍵を必要とします。ディスク上のすべての
コピーが失われた場合(ディスククラッシュ、誤った rm、key と key.bak
の両方が削除された、または key.tpm ブロブが失われた)、reflash-to-wipe エスケープ
ハッチが必要です — dist/reseal-tpm.sh が上記の PCR7 変更ケースで
自動化するのと同じ手順です:```bash
sudo systemctl stop r503d
sudo arduino-cli upload --fqbn arduino:avr:nano:cpu=atmega328 --port /dev/r503 firmware/r503fp_wipe/
sudo arduino-cli upload --fqbn arduino:avr:nano:cpu=atmega328 --port /dev/r503 firmware/r503fp/ sudo touch /etc/r503d/allow-pair sudo r503d --pair sudo systemctl start r503d
`sudo arduino-cli` が command-not-found と表示される場合(arduino-cli は `~/.local/bin` にあり、root の `PATH` には含まれていません)、`sudo env "PATH=$PATH" arduino-cli …` のように実行するか、絶対パスを指定してください。
これは攻撃者が利用できるバックドアではありません。再ペアリングにはホスト側での root 権限が必要であり(オプトインファイルと `--pair` CLI の両方に root が必要)、そのため、あなたがすでに root でない限り、書き換えられた Nano を信頼対象にすることはできません。
### アンインストール```bash
sudo bash pcside/daemon/dist/uninstall.sh
すべてを元に戻し、fprintd のマスクを解除し、/var/lib/r503d/(キー、
状態、ユーザー)を後で再インストールしたい場合に備えてそのまま残します。その後、
本当にクリーンな状態にしたい場合は、そのディレクトリを手動で削除してください。
Arduino は小さな ASCII プロトコルファームウェア(firmware/r503fp/)を実行し、
UART 側では R503 独自の R30x("Sync Word")バイナリプロトコルを話し、
USB-CDC 経由でホストと行指向のテキストコマンドを交換します:
ping、info、enroll N、verify、delete N、clear、
led off。完全な v1 プロトコルは SPEC.md §5 にあります。
fw=1.0(v2 認証チャネル作業のマイルストーン E)以降、すべての
コマンドとレスポンスは C <counter> <body> M <mac> /
R <counter> <seq> <body> M <mac> フレームでラップされ、TOFU でペアリングされた
128 ビットキーによる SipHash-2-4 で MAC 化されます。Nano は EEPROM にウェアレベリングされた
単調増加カウンタを保持し、デーモンは /var/lib/r503d/state.json に対応するカウンタを保持します。
リプレイ試行(ファームウェア側の incoming <= last_seen)は ERR replay
として拒否され、改ざんされたフレームは ERR mac_invalid になります。完全な仕様、脅威
モデル、既知の制限事項は SPEC.md §13 にあります。
レイアウト:``` firmware/r503fp/ Arduino firmware (v2 framed ASCII protocol) firmware/r503fp_wipe/ Emergency one-shot EEPROM wipe (lost-key recovery) firmware/* Diagnostic / development sketches (ping, loopback, ...) pcside/daemon/ Rust daemon (the fprintd replacement) pcside/daemon/src/{crypto,framing,keystore,state,pairing}.rs v2 wire protocol implementation pcside/daemon/src/auth.rs caller-identity gating for D-Bus methods pcside/daemon/dist/ udev rule, systemd unit, polkit + bus policy, install scripts docs/ Decision logs + troubleshooting SPEC.md Full architecture + protocol spec (§13 = v2 auth)
## セキュリティモデル — 概要
ワイヤーレベルの認証が対象とする脅威は、
**「5分と予備のNanoを持った邪悪なメイド」** と、`/dev/r503` 上の悪意あるローカルプロセスの組み合わせです。
国家レベルの攻撃者や、ラボを持つハードウェア攻撃者は対象外です。シングルユーザーのデスクトップ展開を想定し、スコープ外リストを文書化しています。
完全な脅威モデルは [`SPEC.md` §13.1](https://github.com/matpb/linux-fingerprint-r503/blob/main/SPEC.md) にあり、実装・レビューの証跡は
[`docs/REVIEW-2026-05-28.md`](https://github.com/matpb/linux-fingerprint-r503/blob/main/docs/REVIEW-2026-05-28.md) にあります。別途実施した
敵対的権限昇格監査(2026-05-28)と、その主張ごとの検証・是正パスは
[`docs/SECURITY-AUDIT-2026-05-28.html`](https://github.com/matpb/linux-fingerprint-r503/blob/main/docs/SECURITY-AUDIT-2026-05-28.html)
および
[`docs/SECURITY-AUDIT-2026-05-28-VALIDATION.html`](https://github.com/matpb/linux-fingerprint-r503/blob/main/docs/SECURITY-AUDIT-2026-05-28-VALIDATION.html)
にあります。
**防御対象:**
- Nanoの悪意あるユニットへのホットスワップ(鍵がない → すべてのフレームがMAC検証に失敗)。
- `/dev/r503` に偽のマッチ応答を注入するローカルプロセス。2層で防御:
デバイスノードは `root:root 0600`(udevルール)で、デーモンは `TIOCEXCL` で保持するため、
非rootプロセスはオープンできません。たとえオープンできたとしても鍵がないため、フレームはMAC検証に失敗します。
- 将来のセッションで記録された `OK match=...` フレームのリプレイ。
- 任意のフレームフィールドへのビット反転改ざん(定数時間MAC比較)。
- カウンタ枯渇による破壊: `--resync` 中のワンショットMITMやピアが単調カウンタを `u64::MAX` まで進め、
チャネルを恒久的に不能にする攻撃は、両端で強制される予約済みカウンタ上限(`fw=1.1+`; SPEC §13.4 / 2026-05-28監査 DoS-2)で阻止されます。
- ローカルユーザーによるセンサーへのDoS: 単一のキャプチャスロットゲートが進行中のエンロール/検証処理を制限し、
削除パスはアクションゲート付きのため、`Start`/`Stop`(または同時削除)の flood で認証を妨害できません。
- ローカルの非rootユーザーによるクロスユーザー指紋の登録・消去・列挙
(例: `mallory` が `Claim "root"` を呼び出して自分の指を登録する)— `username` を取るすべてのD-Busメソッドで
呼び出し元の身元を確認し、システムバスポリシーはブローカー層で非 `wheel` 呼び出し元を拒否します。
- **`--seal-tpm` と併用した場合のホスト鍵へのオフライン・ディスク攻撃**:
ディスク上の鍵はPCR7にTPM2シールされているため、アンマウントされたパーティションの `dd` や、
敵対的ホストへのSSDの差し替えでは暗号文しか得られません。
同じマシン、同じSecure Bootポリシーの下でのみアンシールされます。
[SPEC §13.12](https://github.com/matpb/linux-fingerprint-r503/blob/main/SPEC.md) を参照。
**防御対象外:**
- ホストのroot権限侵害(鍵は `/var/lib/r503d/key` にあり、`0600 root:root`)。
稼働中のホストのrootはTPMシール版の鍵もアンシールできます — シールは *オフライン* 攻撃を鈍らせるだけで、オンライン攻撃は防ぎません。
- Nanoへの物理攻撃(ISPによるEEPROM読み出し約30秒、チップのデキャップ等)。
- ファームウェア再書き込み攻撃(Arduinoブートローダーは署名なし — ただし再ペアリングにはホストのroot権限が必要なため、
ホストが侵害されない限り、再書き込みされたNanoを信頼状態に持ち込むことはできません)。
- R503側の侵害(R30xプロトコルには認証が一切なく、スコープ外)。
- **暗号ポスチャ。** SipHash-2-4 MAC、128ビット共有鍵、64ビットMAC出力、ドメイン分離されたMAC入力。
2つの独立した実装(AVR上の手書きC++で起動時KAT自己テスト付き、ホスト上の手書きRustでCIで1024のランダムベクトルに対し
サードパーティ製 `siphasher` クレートとビット単位で相互検証)。ホストのMAC比較は
`subtle::ConstantTimeEq` を使用。ワイヤーパーサーはCI実行ごとにプロパティファジング(約135,000入力)。
`cargo audit` クリーン。SipHash鍵は `zeroize::Zeroizing<...>` でラップされ、ドロップ時に消去されます
(フレームごとのMAC入力バッファも同様)。`cargo fuzz`
libFuzzerターゲットは `pcside/daemon/fuzz/` に同梱され、nightlyでの長期コーパス実行に対応。
有料の第三者による人による監査は未実施 — それがあれば有用です。PR歓迎。
根拠付きの完全な脅威モデル: [`SPEC.md` §13.1](https://github.com/matpb/linux-fingerprint-r503/blob/main/SPEC.md)。
## 制限事項
- **マルチユーザーは機能しますが、`wheel` メンバーのみ対象です。** 呼び出し元の身元は
`username` を取るすべてのD-Busメソッド(`Claim`、`EnrollStart`、`VerifyStart`、`ListEnrolledFingers`、
`DeleteEnrolledFingers`)で確認され、自己リクエストと `uid 0`(PAM)は黙って成功し、
非root呼び出し元からのクロスユーザー操作は `net.reactivated.Fprint.Error.PermissionDenied` で拒否されます。
システムバスポリシーは、会話を開始できるアカウントをさらに制限します:
`root` と `wheel` メンバーのみがデーモンに到達でき、それ以外はブローカー層で
`org.freedesktop.DBus.Error.AccessDenied` を受け取ります。
クロスユーザーのエンロールが必要ですか? rootになります: `sudo fprintd-enroll target-user`。
キオスク/マルチユーザーラボ向けにクロスユーザーゲートを緩めたいですか?
`/etc/polkit-1/rules.d/` にJSルールを置き、
[`net.reactivated.fprint.device.setusername`](https://gitlab.freedesktop.org/libfprint/fprintd/-/blob/master/src/net.reactivated.fprint.device.policy.in)
を対象にしてください — アクション名は上流のfprintdと完全に同じです。
- **リーダーは1つ。** デーモンはD-Bus上に単一のDeviceオブジェクトを公開します。
複数リーダー構成にはManagerの拡張が必要です。
- **`finger-present` / `finger-needed` ヒントプロパティの `PropertiesChanged` 発行なし。**
一般的なfprintdクライアント(PAM、KDE設定、GNOME)はすべて、ポーリング型のヒントではなく
`EnrollStatus` / `VerifyStatus` シグナル(発行されます)で動作します — しかし
`Get + PropertiesChanged` を行う厳密なクライアントは古い値を見ることになります。
- **単一Nano = 単一障害点。** Nanoが死ぬと、予備を再フラッシュして再ペアリングするまで指紋ログインは使えません。
パスワード認証をバックアップとして有効にしておいてください。
- **State.jsonの喪失は1コマンドで復旧可能。** ファームウェアがまだ高い `last_seen` を持っている間に `state.json` が失われると、
デーモンは最初の送信で `ERR replay` に達します。`sudo r503d --resync` を実行してNanoのカウンタを読み取り、
ホストを再調整してください — 再ペアリングは不要です。[`SPEC.md` §13.11](https://github.com/matpb/linux-fingerprint-r503/blob/main/SPEC.md) を参照。
## トラブルシューティング```bash
# Daemon logs:
sudo journalctl -u r503d.service -f
# Confirm the sensor enumerates correctly:
ls -l /dev/r503
busctl --system call net.reactivated.Fprint /net/reactivated/Fprint/Device/0 \
net.reactivated.Fprint.Device ListEnrolledFingers s ""
# Confirm fprintd is masked and r503d owns the bus name:
systemctl is-enabled fprintd # should print "masked"
busctl --system list | grep -i fprint
デーモンが起動しない、またはセンサーが応答しない場合、最も一般的な
修正方法は配線です — SPEC.md §3を参照してください。特に
"分圧器なし" の注記が§3.1にあります。より詳細なランブックは
docs/TROUBLESHOOTING.md にあります。
MIT — LICENSE を参照してください。
fprintd プロジェクト — クリーンなD-Busインターフェースの設計に対して。
このデーモンは libfprint のソースを一切読むことなく
そのインターフェースを実装できた。/etc/dbus-1/system.d/net.reactivated.Fprint.conf)— root と wheel メンバーのみが
デーモンと通信できます; それ以外の全員は、ブローカーで AccessDenied になり、
デーモンが呼び出しを確認する前に拒否されますfprintd.service を停止してマスクしますr503d.service を起動します