LinuxでWindows Helloの顔認証をする

ブログ

こんにちは、山田ハヤオです。メインはArch Linuxですが当然Windowsも使います。

学校の関係上でリモート授業があり、Webカメラを買いました。

せっかく買うのならということでWindows Helloによる顔認証に対応したカメラにしました。

しかしあくまでもメインのOSはArch Linuxなので、Arch LinuxでWindows Helloの認証ができるようにしました。

スポンサーリンク

今回買ったウェブカメラ

Elecomのウェブカメラで、Amazonで7000円ほどでした。アマギフとクーポンで安く購入、

200万画素で1080pのフルHD対応のスグレモノです(30FPSなのは仕方ない)

遠隔授業用で買ったのですがせっかくなのでいろいろ遊んでみます。

公式サイトを見ると対応OSがWindows 10しかありませんがたぶん大丈夫です。

Linuxにつなげてみる

まずはArch Linuxで認識するかテストします。

lsusbコマンドはUSBに接続されているデバイスを表示してくれます。

とりあえずデバイスドライバも何も考えないでOBSで試してみます。

あっさりとカメラが使えてしまいました。Linux用のドライバなどもなさそうでした。

Windows Helloとは

Windows HellioはMicrosoftが開発したWindows 10以降で使用できる生体認証システムです。

ハードウェアが対応していれば指紋認証や顔認証などができます。

Windows Helloによる顔認証では、赤外線カメラの情報を使って顔認証を行います。

ちなみにデュアルブートしているInsider PreviewのWindows 11ではあっさりと顔認証に成功しました。

今回はこれをLinuxでやろうという企画になります。

Linuxで使うには

LinuxでWindows Helloと同等の機能を使うためのフリーソフトがあります。

「Howdy」というオープンソースのソフトです。

boltgolt/howdy
🛡️ Windows Hello™ style facial authentication for Linux - boltgolt/howdy

こいつを使ってPAMに設定してあげることでsudoやディスプレイマネージャの認証に顔認証を追加することができます。

今回はAlter Linux (Arch Linux)にHowdyをインストール、設定していこうと思います。

Howdyのインストール

まずは依存関係をインストールします。(なぜか自動でインストールされませんが必須です)

yay -S --asdeps openexr python-opencv

上のパッケージをインストールできたら、本体をインストールします。

yay -S --noconfirm howdy

コンパイルにしばらく時間がかかるのでお茶でもしながら待っててください。

カメラを探す

Howdyで使用するカメラを指定する必要があります。

まずは接続したカメラがどこにあるのかを探します。

sudo v4l2-ctl --list-devices

デバイスの一覧が表示されるのでその中から赤外線カメラを見つけてください。

ハヤオは上から3番目でした。

今回はカメラのパスを/dev/video2にしますが、環境によって異なるのでその都度読み替えてください。

カメラを設定

設定をコマンドで行えるようにソフトをインストールします。

yay -S crudini

インストールが終わったら以下のコマンドを実行します。

sudo crudini --set /usr/lib/security/howdy/config.ini video device_path /dev/video2

これで設定が書き込まれたはずです。以下のコマンドで確認します。

sudo crudini --get /usr/lib/security/howdy/config.ini video device_path

設定したパスになっていれば成功です。

なっていない場合、コマンドを打ち間違えていないか確認してください。

Howdyの動作テスト

インストールが終わったらまずはカメラが正しく認識されているかテストしましょう。

ターミナルを開いて以下のコマンドでテストできます。

sudo howdy test

こんな感じで白黒の画面になれば赤外線カメラに設定されています。

起動しなかったりカメラがカラーの場合は設定が間違っているので前に戻ってやり直してください。

顔をHowdyに追加する

自分の顔の情報をHowdyに追加します。以下のコマンドを実行してください。

顔のモデル名が聞かれるので適当に設定してエンターキーを押します。

sudo howdy add

その後、しばらくカメラを見続けると登録が完了します。

ただ1つだけ登録してもうまく動かない場合が多いので、同じ顔で5~7個ほど角度を変えて登録しておくと確実です。

これで顔の登録は完了です。

PAMの設定をする

いよいよ最終段階です。sudoやLightDMにHowdyを使うように設定してあげます。

Linuxの認証システムの1つであるPAMに対して設定を変更してあげます。

それぞれのPAMの設定ファイルの先頭に以下の行を追加します。

auth    sufficient pam_python.so /lib/security/howdy/pam.py

sudo

まずはsudoで顔認証をするように設定します。

先程の行を/etc/pam.d/sudoに記述してください。

こんな感じになるはずです。

#%PAM-1.0
auth		sufficient		pam_python.so /lib/security/howdy/pam.py
auth		include		system-auth
account		include		system-auth
session		include		system-auth

LightDM

LightDMに対しても同じように設定してあげます。

自動ログインを設定している場合は/etc/pam.d/lightdm-autologin

設定してない場合は/etc/pam.d/lightdmです

SDDM

Plasmaを使っている人はSDDMの人が多いと思います。

自動ログインを設定している場合は/etc/pam.d/sddm-autologinです

設定していない場合は/etc/pam.d/sddmです

結果

sudoコマンドを実行すると顔認証が行われ、パスワードなしで昇格できるようになります。

終了

あとは再起動すればsudoやlightdmの起動したタイミングで顔認証が実行されます。

顔認証の有効や無効は以下で切り替えることができます。

無効化するには

sudo crudini --set /usr/lib/security/howdy/config.ini core disabled true

もう一度有効化するには

sudo crudini --set /usr/lib/security/howdy/config.ini core disabled false

で切り替えられます。

その他のトラブルシューティングはこちらをどうぞ

Howdy - ArchWiki

それでは、また今後。

コメント

タイトルとURLをコピーしました