我正在将笔记本电脑重新用作家庭服务器(运行 Ubuntu Server 22.04 LTS)。为了节省能源(并延长背光寿命),我正在寻找一种方法,当我按下某个键时,显示器会自动关闭并重新打开。
具体要求如下:
自动开启:当我按下物理键盘上的任意键时,笔记本电脑显示器会自动打开,并在一段时间后关闭。
自动关闭:交互一段时间后它应该会重新关闭。
当通过 SSH 连接到服务器时,我成功使用sudo vbetool dpms off
并打开和sudo vbetool dpms on
关闭监视器。
我也成功使用evtest
来识别键盘/dev/input
。
在一些人工智能的帮助下,我使用了以下脚本并将其作为服务运行:
#!/bin/bash
while true; do
sudo vbetool dpms off
# turn on if anything from the keyboard
sudo cat "\dev\input\event4" | (
# Read a byte if any
read -n 1
sudo vbetool dpms on
sleep 10 #seconds
)
done
我在检测物理输入以重新激活显示器时遇到问题。使用 sudo cat 时,\dev\input\event4
我看到按下某个键时出现了一些垃圾,但服务运行时显示器不会重新打开。
有人可以提出解决办法吗?
谢谢你!
答案1
手动检查:
sudo vbetool dpms off; sleep 5; sudo vbetool dpms on
如果显示器 5 秒后仍未唤醒,则
sudo vbetool dpms on
然后请使用“编辑”按钮更新问题,并提供相应信息以确认其是否有效。
答案2
#!/bin/bash
KEYBOARD_DEVICE="/dev/input/event4"
IDLE_TIME=10
turn_off_monitor() {
echo 'OFF'
sudo vbetool dpms off
}
turn_on_monitor() {
echo 'ON'
sudo vbetool dpms on
}
turn_on_monitor
reset_timer() {
if [[ -n $TIMER_PID ]]; then
kill $TIMER_PID 2>/dev/null
fi
# Special for MURU from the comments: SLEEP, again...
(sleep $IDLE_TIME; turn_off_monitor) &
TIMER_PID=$!
}
reset_timer
sudo evtest "$KEYBOARD_DEVICE" | while read line; do
turn_on_monitor
reset_timer
done
我刚刚尝试了一下,效果与预期一致。首先,请注释掉以下行sudo vbetool dpms on和sudo vbetool dpms 关闭。然后,只需在终端中测试一下,确保你看到在和离开消息按预期显示。确认后,您可以取消注释工具行并再次测试。