nazo6 noteblog

Linuxで顔認証を動作させる

作成:2025/04/26

更新:2025/04/26

この記事は、Zennにも投稿しています。
Linuxで、Windows Helloのように色々な所で顔認証を使う方法

1. Howdyをインストール

基本的にLinuxで顔認証したい場合はhowdyを使う。これをまずはインストールする。ただし、リリース版は非常に古いため、git版を使うことを前提にする。
ArchであればAURにパッケージがあるため、
paru -Sy howdy-git
などとしてインストールできる

2. howdyの設定

まずは目的のカメラを探そう。例えばmpvがインストールされていれば
mpv /dev/video0
などとしてカメラ映像を見ることができる。video0の数字部分を変えながらどれが正解か試して探す。
目的のカメラのパスが分かったら
sudo howdy config
で設定ファイルを開き(nanoがインストールされている必要がある)、
`
device_path =
の行に先程の/dev/video0などを書き足す。
次に、
sudo howdy add
を実行し、顔を登録する。登録し終わったら
sudo howdy test
で、きちんと顔が認識されていることを確認する。

3. PAMの設定

ここまででHowdy自体の設定は終わったが、次にどこでHowdyを使うか決めるため、PAMの設定をいじる。まず、
cd /etc/pam.d
ls
を実行してみると、様々なファイルが見えるはず。例えばsudoというファイルがあるはずで、これはsudoを使う際にどのような認証方法を使うかの設定を記述している。

sudo

ではまずsudoの挙動を設定するために好きなエディタでsudoファイルを開いてみよう
sudo vim sudo
すると、
#%PAM-1.0
auth include system-auth
account include system-auth
session include system-auth
このようなファイルとなっているはずだ。この#%PAMの行の後に
auth sufficient /lib/security/pam_howdy.so
を追加して保存する。なお、日本語版Arch Wikiでは若干違う記述になっているが、それは古いものなので注意。
これでsudoを実行すると、顔認証によって認証がされるはず。

GUI特権ダイアログ

次に、ファイラーなどで特権操作を行う場合などに表示されるGUIのダイアログで顔認証を使えるようにする。自分はKDEでしか確認していないが恐らく他のDEでも動くはず。このためにはpolkitの設定を変更する。
ただ、自分の場合はpolkitのPAM設定ファイルが無かったが、このissue

Does not work with GNOME GUI password popups · Issue #623 · boltgolt/howdy

When I try to enter any application using the GNOME PolKit window (vscode, systemctl), the camera LED flashes, the popup doesn't appear until I re-enable howdy. sudo -i works fine with same setup a...

github.com

を見ると、/usr/lib/pam.d/polkit-1をコピーしてくればいいようだ。
sudo cp /usr/lib/pam.d/polkit-1 .
このpolkit-1ファイルを編集し、先と同じようにHowdyの設定を追加する。
これで、GUIでの特権認証時に顔認証できるようになる。

KDE(ロック解除)

次に、KDEのロック解除を設定する。これはKDEから明示的にロックした場合に用いられるものであり、SDDMなどのディスプレイマネージャによって行われる初回ロック解除時とは違うものであることに注意。
これも先程と同様にpam.dフォルダにkdeというファイルがあるはずなのでそれを同じく編集するだけ。

SDDM(非推奨)

KDEのデフォルトディスプレイマネージャであるSDDMは起動直後やスリープ解除後のログインなどを司り、これについても先程と同様にsddmというファイルを編集することで顔認証による解除ができるようになる…
のだが、これはおすすめしない。というのも、SDDMを顔認証で解除するとKWalletのロックが解除されず、パスワードを求められるからである。KWalletとは資格情報を安全に保管しておくためのシステムで、git-credential-managerなどで内部的に使われている。
KWalletのパスワードはユーザーパスワードと基本的に同じため、SDDMで直接パスワードが入力された場合自動でKWalletのロックを解除できる。しかし、Howdyではパスワードを入力しないためそうはいかない。これを実現するためにはHowdyにパスワードを保管しておく必要があり、セキュリティ上よろしくないため実装されていない。詳しくは↓

Integration with KWallet · Issue #56 · boltgolt/howdy

Just installed Howdy on Manjaro, and was able to setup everything fairly easily by following the ArchWiki instructions. My use case is to just use howdy at the graphical login screen. So, I've modi...

github.com

今回はKDE(KWallet)の話だが、Gnome Keyringなどでも同じ問題が起きると考えられる。