我正在尝试制作一个 bash 脚本,在闲置一段时间后将亮度调低到最低,但当它检测到用户交互(无论是来自鼠标还是键盘)时,会恢复到之前的亮度。我知道如何使用 xautolock 执行第一部分,但不知道如何执行第二部分。谢谢
答案1
想必您知道xset dpms
哪个提供了显示器的电源管理,并且布赖特它会进行渐进式背光变化,但如果这些还不够,您可以在处于空闲模式时使用xinput
以下方法检测移动。
简单列出输入设备xinput
,找到你想监听的鼠标和键盘的id。就我而言,是 11 和 9。
Logitech USB Optical Mouse id=11 [slave pointer (2)]
HID 05f3:0007 id=9 [slave keyboard (3)]
然后您可以等待xinput --test
每个 id 的任何输出:
xinput --test 9 | read stuff & pid1=$!
xinput --test 11 | read stuff & pid2=$!
wait -n
kill -hup $pid1 $pid2 2>/dev/null
echo 'ready'
答案2
您可以尝试使用总线。具体来说,使用dbus-send
调用GetSessionIdleTime
以下方法org.freedesktop.ScreenSaver
:
dbus-send --session --dest=org.freedesktop.ScreenSaver --type=method_call --print-reply=literal /ScreenSaver org.freedesktop.ScreenSaver.GetSessionIdleTime
这将打印出 4 个空格,然后是“uint32”,然后是自用户上次按下按键或移动鼠标以来的毫秒数。您可以使用以下命令提取号码cut
命令:
echo $result | cut -d ' ' -f 5
这需要轮询 dbus
定期进行,因此用户输入和脚本响应之间会有延迟,具体取决于您轮询的频率。