como conectar para monitorar eventos de sono?

como conectar para monitorar eventos de sono?

Existe algum evento ao qual eu possa me conectar quando o monitor estiver configurado para hibernar? Quero dizer, apenas o monitor DPMS dorme, não o PC dorme/suspende.

Minha intenção é executar um script quando o monitor for colocado em suspensão, mas o PC ainda estiver ligado.

Da mesma forma, existe um evento que é acionado quando o monitor sai do modo de suspensão?

Responder1

xset -qdirá se o monitor está ligado ou desligado.

Normalmente, ele dirá "Monitor está ligado". No entanto, se você desligar o monitor e executar o comando, ele informará que está desligado.

Experimente digitando:

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

(os sleepcomandos existem para evitar que o X misture a ordem dos eventos). Em seguida, mexa o mouse para recuperar a tela.

Em um script, fazer $(xset -q|grep Monitor|awk '{print $3;}')fornecerá uma variável que é Onou Off.

Xé uma fera complicada, mas no meu sistema funciona corretamente sempre.

Responder2

Estou criando um script bash hoje que pode fornecer uma resposta melhor em mais ou menos uma semana. Enquanto isso eu descobri issorespostacom um script bash você pode usar:

#!/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"

informação relacionada