¿Cómo conectar para monitorear el evento de sueño?

¿Cómo conectar para monitorear el evento de sueño?

¿Hay algún evento al que pueda conectarme cuando el monitor está en modo de suspensión? Me refiero solo al modo de suspensión DPMS del monitor, no al modo de suspensión/suspensión de la PC.

Mi intención es ejecutar un script cuando el monitor se pone en suspensión pero la PC todavía está encendida.

De manera similar, ¿hay algún evento que se activa cuando el monitor sale del estado de suspensión?

Respuesta1

xset -qLe indicará si el monitor está encendido o apagado.

Normalmente le dirá "El monitor está encendido". Sin embargo, si apaga el monitor y luego ejecuta el comando, le indicará que está apagado.

Pruébalo ingresando:

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

(los sleepcomandos están ahí para evitar que X mezcle el orden de los eventos). Luego mueva el mouse para recuperar la pantalla.

En un script, hacer $(xset -q|grep Monitor|awk '{print $3;}')le dará una variable que es Ono Off.

XEs una bestia complicada, pero en mi sistema siempre funciona correctamente.

Respuesta2

Estoy creando un script bash hoy que puede proporcionar una mejor respuesta en aproximadamente una semana. Mientras tanto encontré estorespuesta redditcon un script bash puedes 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"

información relacionada