
Есть ли событие, к которому я могу подключиться, когда монитор переходит в спящий режим? Я имею в виду только сон DPMS монитора, а не сон/приостановку ПК.
Я намерен запустить скрипт, когда монитор переведен в спящий режим, но компьютер все еще включен.
Аналогично, есть ли событие, которое запускается, когда монитор выходит из спящего режима?
решение1
xset -q
сообщит вам, включен монитор или выключен.
Обычно он скажет вам "Монитор включен". Однако, если вы выключите монитор, а затем выполните команду, он скажет вам, что он выключен.
Попробуйте ввести:
sleep 1; xset dpms force off; sleep 1; xset -q
( sleep
команды нужны для того, чтобы X не перепутал порядок событий). Затем пошевелите мышкой, чтобы вернуть экран.
В скрипте выполнение $(xset -q|grep Monitor|awk '{print $3;}')
даст вам переменную, которая имеет значение On
или Off
.
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"