수면 이벤트를 모니터링하는 방법은 무엇입니까?

수면 이벤트를 모니터링하는 방법은 무엇입니까?

모니터가 절전 모드로 설정되어 있을 때 연결할 수 있는 이벤트가 있나요? PC 절전/일시 중지가 아닌 모니터 DPMS 절전을 의미합니다.

내 의도는 모니터가 절전 모드로 전환되었지만 PC는 여전히 켜져 있을 때 스크립트를 실행하는 것입니다.

마찬가지로 모니터가 절전 모드에서 다시 시작될 때 트리거되는 이벤트가 있습니까?

답변1

xset -q모니터가 켜져 있는지 꺼져 있는지 알려줍니다.

일반적으로 "모니터가 켜져 있습니다"라고 표시됩니다. 하지만 모니터를 끈 후 명령을 실행하면 모니터가 꺼졌다고 나옵니다.

다음을 입력하여 시도해 보세요.

sleep 1; xset dpms force off; sleep 1; xset -q

( sleepX가 이벤트 순서를 뒤섞는 것을 방지하기 위한 명령이 있습니다). 그런 다음 마우스를 움직여 화면을 다시 가져옵니다.

스크립트에서 다음 중 하나를 수행하면 변수 $(xset -q|grep Monitor|awk '{print $3;}')가 제공됩니다 .OnOff

X복잡한 짐승이지만 내 시스템에서는 매번 올바르게 작동합니다.

답변2

저는 오늘 일주일 정도 후에 더 나은 답변을 제공할 수 있는 bash 스크립트를 만들고 있습니다. 그러던 중에 이걸 발견했어요레딧 답변bash 스크립트를 사용하면 다음을 사용할 수 있습니다.

#!/bin/bash
jsdev=${1:-"/dev/input/js0"}
getxss() {
    xset q | grep -e 'timeout\:\|Standby\:' \
        | awk '{a[NR]=$1}END{asort(a);print a[1]}' RS=' '
}
tellit() { notify-send "controller xss holder" "${1:-"date"}: $(date +%T)"; }
fin() { tellit "${1:-"bye"}"; exit; }
trap 'fin "sigint recieved"' INT
slt=$((($(getxss)/5)*4)); [ $slt -lt 1 ] && slt=1; w=60
until [[ -e "$jsdev" || $w -lt 1 ]]; do
    t=$(date +%s); f="$(inotifywait -qq -e create --format '%w%f' -t $w "$(dirname $jsdev)")"
    [ "$f" == "$jsdev" ] && break || t=$(($(date +%s)-$t)) && ((w-=$t))
done; [ $w -lt 1 ] && fin "dev not found" && exit
tellit "connected"; while [ -e "$jsdev" ]; do
    read -rn1< <(jstest --nonblock "$jsdev" 2>/dev/null) \
        && [ -e "$jsdev" ] && xset -display :0 s reset dpms force on
    inotifywait -qq -e delete_self --format '%w%f' -t $slt $jsdev 2>/dev/null
done; fin "disconnected"

관련 정보