
Gibt es ein Ereignis, das ich aktivieren kann, wenn der Monitor in den Ruhezustand versetzt wird? Ich meine nur den Ruhezustand des Monitor-DPMS, nicht den Ruhezustand/Suspend des PCs.
Meine Absicht ist es, ein Skript auszuführen, wenn der Monitor in den Ruhezustand versetzt wird, der PC aber noch eingeschaltet ist.
Gibt es ebenso ein Ereignis, das ausgelöst wird, wenn der Monitor aus dem Ruhezustand reaktiviert wird?
Antwort1
xset -q
zeigt an, ob der Monitor ein- oder ausgeschaltet ist.
Normalerweise wird Ihnen angezeigt, dass der Monitor eingeschaltet ist. Wenn Sie den Monitor jedoch ausschalten und dann den Befehl ausführen, wird Ihnen angezeigt, dass er ausgeschaltet ist.
Probieren Sie es aus, indem Sie Folgendes eingeben:
sleep 1; xset dpms force off; sleep 1; xset -q
(Die sleep
Befehle sollen verhindern, dass X die Reihenfolge der Ereignisse durcheinanderbringt.) Bewegen Sie dann Ihre Maus, um den Bildschirm wiederherzustellen.
In einem Skript $(xset -q|grep Monitor|awk '{print $3;}')
erhalten Sie durch „doing“ eine Variable, die entweder On
oder ist Off
.
X
ist ein kompliziertes Biest, aber auf meinem System funktioniert es jedes Mal einwandfrei.
Antwort2
Ich erstelle heute ein Bash-Skript, das in etwa einer Woche eine bessere Antwort liefern könnte. In der Zwischenzeit habe ich Folgendes gefundenReddit-Antwortmit einem Bash-Skript könnten Sie Folgendes verwenden:
#!/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"