我买了一台很棒的三星 HDMI 电视/显示器,信号中断时不会进入待机状态。我买了一个 Pulse Eight CEC 命令注入器,并弄清楚了如何从命令行关闭/打开显示器。
问题是我不知道导致这些命令执行的最可靠/未来证明/Ubuntu/Gnome 的方式在哪里 - 到目前为止我已经研究过:
systemd
似乎在用户登录时以及图形系统启动时都有目标,但在登录之前则没有。
酸度
在这里捕捉屏幕睡眠/唤醒机制听起来很完美,但我似乎找不到方法来做到这一点。
gdm3
似乎支持在键盘活动之外的几乎所有情况下添加脚本。
xss 锁
尝试使用脚本在显示器运行时使其进入睡眠状态,并捕获 SIGHUP 以发出唤醒命令 - 但它似乎不能可靠地工作。
我从 2015 年发现了这一点: 如何在屏幕睡眠/唤醒时运行脚本
... 但上面的每个选项都感觉比循环执行后台任务以不断抓取日志流量或按下键后等待 @wait/2 秒才能启动更好。这是最好的解决方案吗?
答案1
我使用以下脚本在闲置 1 分钟后关闭屏幕。代码不属于我,我只是根据自己的需要进行了修改
您需要安装xprintidle
sudo apt install xprintidle
cd ~
mkdir myscripts
cd myscripts
复制并粘贴以下代码到终端以创建 bash 脚本
cat>turnoffscreen.sh<<'EOF'
#!/bin/sh
# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((1*60*1000))
IDLE_WARN=$((((1*60*1000))-((10000))))
# Sequence to execute when timeout triggers.
trigger_cmd() {
# put your code here, the below command just an example
xset s blank ; sleep 1 ; xset s activate
}
sleep_time=$IDLE_TIME
triggered=false
# ceil() instead of floor()
while sleep $(((sleep_time+999)/1000)); do
idle=$(xprintidle)
if [ $idle -ge $IDLE_WARN ]; then
notify-send --icon=info "Turning off the screen ..."
sleep 10
idle_check=$(xprintidle)
if [ $idle_check -ge $idle ]; then
if ! $triggered; then
trigger_cmd
triggered=true
sleep_time=$IDLE_TIME
fi
fi
else
triggered=false
# Give 100 ms buffer to avoid frantic loops shortly before triggers.
sleep_time=$((IDLE_TIME-idle+100))
fi
done
EOF
然后使其可执行
chmod +x turnoffscreen.sh
将其添加到启动应用程序列表
gnome-session-properties