web-dev-qa-db-ja.com

Arch / systemdでふたを閉じるときに画面を一時停止してロックする

画面をロックして蓋を閉じるときに一時停止する最も簡単な方法は何ですか?私は/etc/systemd/logind.confでイベントフックを使用しており、ふたを閉じると正常に中断します。しかし、ロックの部分に関しては迷っています。スクリーンセーバーサービスを有効にする必要がありますか。また、logind.confで2つのイベントを一度にトリガーするにはどうすればよいですか。

23
pldimitrov

Arch Wiki にはいくつかの例があります。

基本的には、画面ロッカーのサービスファイルを作成し、suspendhibernate、またはsleepターゲットのいずれかにフックされるようにします。

slock のような単純な画面ロッカーを使用する場合、/etc/systemd/system/lock.serviceは次のようになります。

[Unit]
Description=Lock the screen on resume from suspend

[Service]
User=jason
Environment=DISPLAY=:0
ExecStart=/usr/bin/slock

[Install]
WantedBy=suspend.target

Wikiの他の例には、他のサービスのシャットダウンや起動など、より複雑なオプションがあります。

17
jasonwryan

Jasonwryanの応答は正しいですが、不完全です。一時停止の前ではなく安全にロックするために、非ルートプロセスがカーネルの一時停止を妨げる可能性がある場合、Before =インスタンスを追加する必要がありますsystemdを強制しますExecStartslockの呼び出しが開始するのを待ってから、一時停止します。 sleep.targetを使用すると、サスペンド、ハイバネート、ハイブリッドスリープがカバーされます。

[Unit]
 Description=Lock
+Before=sleep.target

 [Service]
 User=mustapha
 Environment=DISPLAY=:0
 ExecStart=/usr/local/bin/slock

 [Install]
-WantedBy=suspend.target
+WantedBy=sleep.target
1
musabi

openrcelogindとともに使用する場合、代替の解決策があります(systemdに依存しません)。

#!/bin/sh
#
# /lib/elogind/system-sleep/lock.sh
# Lock before suspend integration with elogind

username=lerax
userhome=/home/$username
export XAUTHORITY="$userhome/.Xauthority"
export DISPLAY=":0.0"

case "${1}" in
        pre)
            su $username -c "/usr/bin/slock" &
            sleep 1s;
            ;;
esac

ref: https://Gist.github.com/ryukinix/bd0c1ddcbbafdb4149ae70e41b7c822b

これが機能する適切な方法を見つけることが非常に困難であり、このスレッドが「サスペンド後のロック」などについてのグーグルの最初の結果に表示されるため、これを投稿しています。

1
Manoel Vilela