我想覆盖默认的 Ubuntu 屏幕锁定行为。我设置了一个 shell 脚本,当我手动运行它时,它会执行我想要它执行的操作,但是,我似乎找不到任何方法让它在屏幕锁定时自动触发(无论是超时、键盘快捷键、菜单选项还是其他原因)。理想情况下,我还可以从锁定事件中关闭任何其他行为(这样它只运行我的脚本而不运行其他任何内容)。
有人知道这是否可行或如何实现吗?我发现一些较旧的答案暗示使用 dbus-monitor 之类的工具来监听锁定/解锁事件,但这些事件在该版本的 Ubuntu 中似乎不会以相同的方式触发。
答案1
或多或少地明白了:
首先,我在“系统设置”>“屏幕保护程序首选项”中取消选中“计算机空闲时激活屏幕保护程序”和“屏幕保护程序处于活动状态时锁定屏幕”,从而关闭了所有默认屏幕保护程序行为。这意味着 Ubuntu 仍将抛出一个用于锁定/解锁的 IdleHint 事件,但系统不会在发生这种情况时执行任何操作,从而允许我的自定义脚本自行处理屏幕保护程序/锁定行为。
然后,我将此脚本添加为启动应用程序下的启动脚本:
#use gdbus monitor to listen for idle hints from the current session
gdbus monitor -y -d org.freedesktop.login1 --object-path /org/freedesktop/login1 |
( while true
do read X
if grep -q "<true>" <<< "$X"; then
# run custom screensaver behavior on screen lock
bash /home/tom/.screensaver/screensaver.sh
elif grep -q "<false>" <<< "$X"; then
# run any custom unlock behavior, if necessary
fi
done )