速度と利便性のために数分間席を空にしたときにシステムをシャットダウンするのではなく、システムをシャットダウンしますpm-suspend
。システムが「中断解除」/再開されたとき(Xおよび他のすべての端末で)(画面)ロックを設定し、しばらくログインが発生しない場合は強制終了を開始する必要があります。
いくつかの方法が私に指摘されました。この質問で求める具体的な側面は次のとおりです。
- すべての仮想端末(tty1-tty6)にアクセスできないはずです。
- Xにはアクセスできないはずです。
- また、回復/覚醒後しばらくして再度ログインしたいと思います。それ以外の場合は、システムを「自己破壊」する必要があります。
1つの重要な理由/背景は、ロック解除されたLUKSパーティションが公開されるリスクを制限したいことです。ディスクは起動時に保護されますが、システムを一時停止状態にしても保護されません。
答え1
このsleep.d
スクリプトは機能する必要があります(<youruser>
パスワードを持つユーザーに置き換えてください。最初はrootとして実行しましたが、再インポートできませんでした)。
#!/bin/sh
case "$1" in
hibernate|suspend)
;;
thaw|resume)
USER=<youruser> /usr/bin/vlock -ans &
echo $! > /var/run/vlock.pid
/opt/bin/timeout_vlock.sh &
;;
*) exit $NA
;;
esac
コンテンツ/opt/bin/timeout_vlock.sh
:
#!/bin/bash
TIMEOUT=10
while kill -0 $(< /var/run/vlock.pid); do
[ $TIMEOUT -le 0 ] && break
sleep 1
let TIMEOUT--
done
rm /var/run/vlock.pid
[ $TIMEOUT -le 0 ] && shutdown -h now
必要な値に調整し、TIMEOUT
実行権限を付与します。 "chmod +x /opt/bin/timeout_vlock.sh"。
スクリプトsleep.d
はvlockを使用してすべてのtty(Xがある場合も含む)をロックし、sysrqを無効にしてロック解除するユーザーパスワードを求めるメッセージを表示します。後で使用するためにvlockのpidを保存します。
vlockが完了するのを待ちますtimeout_vlock.sh
(パスワードを入力すると発生します)。タイムアウトに達すると、システムはシャットダウンします。
答え2
この答えは@ gnpが提案した答えに基づいています。違いは、コンソールにパッチを適用する一般的なハッキングによって影響を受けるvlock
仮想コンソール/ターミナル切り替えロックのリスクを減らすことです。pm-suspend
@gnpの答えと同様に、2つのファイルが必要です。
/etc/pm/sleep.d/20_lock_with_countdown
(+x ファイル権限を使用)
#!/bin/sh
case "$1" in
hibernate|suspend)
# generate a kernel/console keymap that has no Console_1 .... Console7
# and no Incr_Console and no Decr_Console keymappings
dumpkeys -f |\
tee /tmp/oldkeymap |\
sed 's/Console_[0-9]*/VoidSymbol/g' |\
sed 's/Incr_Console/VoidSymbol/g' |\
sed 's/Decr_Console/VoidSymbol/g' > /tmp/keymap.with.chvtkeys.disabled
#set the new "castrated" keymap
loadkeys /tmp/keymap.with.chvtkeys.disabled
;;
thaw|resume)
USER=<username> /usr/bin/vlock -ans &
echo $! > /var/run/vlock.pid
/opt/bin/timeout_vlock.sh &
;;
*) exit $NA
;;
esac
その後、ロックを解除するためのカウントダウンスクリプトがあります
/opt/bin/timeout_vlock.sh
。
#!/bin/bash
TIMEOUT=<timeout>
while kill -0 $(< /var/run/vlock.pid); do
[ $TIMEOUT -le 0 ] && break
sleep 1
let TIMEOUT--
done
rm /var/run/vlock.pid
# restore keymap with previous "chvt enabled" keys enabled
loadkeys /tmp/oldkeymap
[ $TIMEOUT -le 0 ] && shutdown -h now
他の答えのフィールドと同様に、<timeout>
これは<username>
スクリプトで調整する必要があります。
最後に最後の行を切り替えることが可能です
/opt/bin/timeout_vlock.sh
< [ $TIMEOUT -le 0 ] && shutdown -h now
----
> [ $TIMEOUT -le 0 ] && echo u > /proc/sysrq-trigger `
> [ $TIMEOUT -le 0 ] && echo o > /proc/sysrq-trigger
`
悪意のある相互作用が発生する可能性がある別の短い機会を避けるために、必ずしもそうではありませんshutdown -h now
。コンピュータの電源を切る最速の方法