
當顯示器設定為睡眠狀態時,是否有我可以連接的事件?我的意思是只是顯示器 DPMS 睡眠,而不是 PC 睡眠/掛起。
我的目的是在顯示器進入睡眠狀態但電腦仍處於開啟狀態時執行腳本。
同樣,當顯示器從睡眠狀態恢復時是否會觸發事件?
答案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"