속도와 편의를 위해 몇 분 동안 자리를 비울 때 시스템을 종료하는 대신 시스템을 종료합니다 pm-suspend
! 시스템이 "일시 중단 해제"/재개될 때 (X 및 기타 모든 터미널에서) (화면) 잠금을 설정하고, 또한 한동안 로그인이 발생하지 않으면 강제 종료를 시작해야 합니다.
몇 가지 방법이 나에게 지적되었습니다. 이 질문에서 추구하는 특정 측면은 다음과 같습니다.
- 모든 가상 터미널(tty1-tty6)에 액세스할 수 없어야 합니다.
- X에는 접근할 수 없어야 합니다.
- 또한 복구/깨우기 후 잠시 후에 다시 로그인하기를 원합니다. 그렇지 않으면 시스템이 "자체 파괴"되어야 합니다.
한 가지 중요한 이유/배경은 잠금 해제된 LUKS 파티션이 노출될 위험을 제한하고 싶다는 것입니다. 디스크는 부팅 시 보호되지만 시스템을 일시 중지 상태로 두면 보호되지 않습니다.
답변1
이 sleep.d
스크립트는 작동해야 합니다( <youruser>
비밀번호가 있는 사용자로 바꾸십시오. 처음에는 루트로 실행했지만 다시 가져올 수 없었습니다).
#!/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의 답변과 유사하게 두 개의 파일이 필요합니다.
/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
.컴퓨터 전원을 끄는 가장 빠른 방법