覚醒時の指紋を含むシステム画面のロック

覚醒時の指紋を含むシステム画面のロック

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 を実行できます。

私はこの解決策が安全ではないようで、気に入らない。

関連情報