
¿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 -q
Le 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 sleep
comandos 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 On
o Off
.
X
Es 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"