![检测到用户交互时执行命令(例如:移动鼠标、按键)](https://linux22.com/image/9135/%E6%A3%80%E6%B5%8B%E5%88%B0%E7%94%A8%E6%88%B7%E4%BA%A4%E4%BA%92%E6%97%B6%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%88%E4%BE%8B%E5%A6%82%EF%BC%9A%E7%A7%BB%E5%8A%A8%E9%BC%A0%E6%A0%87%E3%80%81%E6%8C%89%E9%94%AE%EF%BC%89.png)
我正在尝试制作一个 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
定期进行,因此用户输入和脚本响应之间会有延迟,具体取决于您轮询的频率。