スリープ復帰時にコマンドを実行し、確実に指紋認証する
Live With Linux::tips
- TOP
- Articles
- Live With Linux
- スリープ復帰時にコマンドを実行し、確実に指紋認証する
序
Linux環境において割と難しい存在なのが指紋認証だ。
指紋認証はその認証機構がハードウェアのセキュリティチップとして実装されており、セキュリティ上の理由から仕様は公開されていない場合が多い。
それでもLinuxで動作するデバイスがないわけではなく、またリバースエンジニアリングなどによって動作するようになっている指紋認証デバイスも存在する。
だが、Linuxで指紋認証を行うためのfprintdはだいぶ不安定で、かなり頻繁に動作しなくなる。
ショルダーハッキング防止の観点から、外ではスリープ復帰時にパスワード入力を避けたい、ということがあったりするのだが、スリープ復帰時は特にfprintdがうまく動作していないことが多く、あまり実用的でないということが多い。
もしfprintdの再起動によってこの問題が解消するのであれば、スリープ復帰時にfprintdを再起動できれば良いはずだ。
スリープをトリガーにしてコマンドを実行する (Systemd)
それを実現するのが、systemd-sleepトリガーだ。
/lib/systemd/system-sleep/tlp
には次のようになっている。
#!/bin/sh
# tlp - systemd suspend/resume hook
#
# Copyright (c) 2023 Thomas Koch <linrunner at gmx.net> and others.
# This software is licensed under the GPL v2 or later.
case $1 in
pre) tlp suspend ;;
post) tlp resume ;;
esac
つまり、/lib/systemd/system-sleep/
以下にある実行可能ファイルが、スリープ/復帰時に実行される。
スリープ時は引数としてpre
が、復帰時は引数としてpost
が与えられる。
復帰時に実行したい場合は
if [[ $1 == post ]]
とかやっておけばいいわけだ。
実際に書いてみたのがこちら。
#!/bin/zsh
if [[ $1 == post ]]
then
systemctl restart python3-validity
fi
Thinkpad X1 Carbon
Gen5用に書いたので、python3-validity
ユニットを再起動している。
Systemdは便利だ。
little hack
外でコマンドを避けるためにsudo
に指紋認証を使うようにしていても、いざというときにfprintdが動かない、ということがままある。
このようなケースでも、スリープ復帰時にfprintdを再起動するようにしておくと、一旦スリープさせて復帰させるという方法でfprintdを復活させることができる。