5.18.9-arch1-1指紋センサー:27c6:63ac Shenzhen Goodix Technology Co.、Ltd。 Goodix USB2.0 その他
システムが休止状態で起動したときにbashスクリプトを実行するsystemdサービスを作成しました。
[Unit]
Description=User resume actions
After=hibernate.target
[Service]
User=marc
Type=forking
Environment=DISPLAY=:0
ExecStart=/usr/bin/lock.sh
[Install]
WantedBy=hibernate.target
これはlock.shです。
#!/bin/bash
thisPid=$$
xsecurelock &
lock=$!
# loop until $lock is gone, or fingerprint is verified
until ! kill -0 $lock || fprintd-verify; do
echo "FAILURE"
done
#kill the pid for the lock and thisPid
kill $lock
kill $thisPid
このスクリプトは xsecurelock を生成し、対応する pid をキャプチャします。次に fprintd-verify を実行し、指紋を正常に読み取るまでブロックします。その後、スクリプトはxsecurelockとそれ自体を終了します。これは重複していることがわかります。
systemdサービスが正しく実行されています。覚醒後にxsecurelockが生成されますが、指紋で殺すことはできません。
lock.shを手動で実行すると、完全に実行されます。 xsecurelockがオンになっており、指紋で削除できます。ただし、画面を起動すると(lock.shをトリガーするsystemdファイルトリガー)、画面はxsecurelockでロックされ、パスワードを入力してロックを解除できますが、fprintd-verifyは失敗します。 systemctlの状態は次のとおりです。
Jul 07 12:33:49 manray lock.sh[6630]: failed to claim device: GDBus.Error:net.reactivated.Fprint.Error.PermissionDenied: Not Authorized: ne>
Jul 07 12:33:49 manray lock.sh[4760]: FAILURE
Jul 07 12:33:49 manray lock.sh[6634]: Using device /net/reactivated/Fprint/Device/0
Jul 07 12:33:49 manray lock.sh[6634]: failed to claim device: GDBus.Error:net.reactivated.Fprint.Error.PermissionDenied: Not Authorized: ne>
Jul 07 12:33:49 manray lock.sh[4760]: FAILURE
デバイスを請求するためにfprintd-verifyを取得するにはどうすればよいですか?
編集:ユーザーをrootに設定すると、systemctlは次のように言います。
Jul 07 13:14:43 manray systemd[1]: Starting User resume actions...
Jul 07 13:14:43 manray lock.sh[25997]: Authorization required, but no authorization protocol specified
Jul 07 13:14:43 manray lock.sh[25997]: 2022-07-07T17:14:43Z 25997 xsecurelock: Could not connect to $DISPLAY.
Jul 07 13:14:44 manray lock.sh[25998]: Using device /net/reactivated/Fprint/Device/0
Jul 07 13:14:44 manray lock.sh[25998]: ListEnrolledFingers failed: GDBus.Error:net.reactivated.Fprint.Error.NoEnrolledPrints: Failed to dis>
Jul 07 13:14:44 manray lock.sh[25996]: FAILURE
rootとして実行すると、xsecurelockはディスプレイを検出できず、指紋センサーはまだ機能しません。近指が登録されていないようで、追加できません。
答え1
解決策は、次の場所に新しいルールを追加することです/usr/share/polkit-1/rules.d/50-net.reactivated.fprint.device.verify.rules
。
polkit.addRule(function (action, subject) {
if (action.id == "net.reactivated.fprint.device.verify") {
return polkit.Result.YES
}
})
このルールを使用すると、polkit 認証に関係なく常に fprintd-verify を実行できます。
私はこの解決策が安全ではないようで、気に入らない。