检测到用户交互时执行命令(例如:移动鼠标、按键)

检测到用户交互时执行命令(例如:移动鼠标、按键)

我正在尝试制作一个 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定期进行,因此用户输入和脚本响应之间会有延迟,具体取决于您轮询的频率。

相关内容