我想编写一个 shell 脚本来禁用 KDE 屏幕锁定器,休眠一段时间,然后重新启用它。但我不知道用于控制屏幕锁定器的 shell 命令。我该怎么做?
答案1
事实证明,屏幕锁定器可以通过 D-Bus RPC 机制进行控制。您可以使用命令通过 D-Bus 发送查询和命令qdbus
。可寻址方法被分组到属于服务的对象中。运行
qdbus
打印出服务列表,您可以查看此列表以找到屏幕锁定服务,即org.freedesktop.ScreenSaver
。然后
qdbus org.freedesktop.ScreenSaver
打印出屏幕保护程序服务中可寻址对象的列表,其中包括/MainApplication
。(它还包括/ScreenSaver
,虽然它有许多有用的方法,但没有我想要的。)然后
qdbus org.freedesktop.ScreenSaver /MainApplication
打印出可调用方法及其参数和返回类型的列表。这里你需要的是
method void org.kde.KApplication.reparseConfiguration()
配置文件本身是$HOME/.kde/share/config/kscreensaverrc
简单的格式。您可以编辑此文件(如果需要,可以通过编程方式),然后调用
qdbus org.freedesktop.ScreenSaver /MainApplication reparseConfiguration
使用新配置重新配置屏幕锁定器。
完整的shell脚本是:
timeout=${1:-3600}
perl -i -lpe 's/^Enabled=.*/Enabled=False/' $HOME/.kde/share/config/kscreensaverrc
qdbus org.freedesktop.ScreenSaver /MainApplication reparseConfiguration
sleep $timeout
perl -i -lpe 's/^Enabled=.*/Enabled=True/' $HOME/.kde/share/config/kscreensaverrc
qdbus org.freedesktop.ScreenSaver /MainApplication reparseConfiguration
Frew Schmidt 还指出,通常有一个单独的系统配置设置,用于为某些鼠标指针位置分配功能,这样就可以通过将指针放在右上角或其他位置来暂时禁用屏幕锁定器。在 KDE 中,这可以通过系统设置 → 工作区行为 → 屏幕边缘进行控制。
答案2
我正在寻找同样的问题,我在这里找到了你的问题,但你的解决方案在 KDE plasma 5.9 中没有修改就无法工作,所以我继续搜索,找到了你的博客文章。我按照你的步骤操作,并成功了:
switch-screenlocker() {
enabled=""
case "$1" in
'on') enabled='true' ;;
'off') enabled='false' ;;
esac
if [ -z "${enabled}" -o "$#" -ne 1 ]; then echo "Usage: $0 { on | off }"; return -1; fi
sed -ni "/Autolock=.*/!{s/\[Daemon]/[Daemon]\nAutolock=${enabled}/;p}" ~/.config/kscreenlockerrc
qdbus org.freedesktop.ScreenSaver /ScreenSaver configure
}
我已更改:
- 配置文件位置
~/.kde/share/config/kscreensaverrc
→~/.config/kscreenlockerrc
- 替换命令。我更喜欢
sed
上面的命令perl
,但显著的变化是让它Autolock=true
在配置中没有行时工作。kcmshell5 screenlocker
删除它,因为它是默认的 - 我把它包装成函数
更新:看来 5 分钟超时也是默认设置,如果超时设置为 5 分钟并启用了锁屏,整个[Daemon]
部分可能会丢失。我没有找到轻松处理这种情况的方法,sed
但这里有一个awk
处理这种情况的命令:
awk -i inplace 'function p(){set=1;print "[Daemon]\nAutolock='${enabled}'"}
/\[Daemon]/{p();next}
/Autolock.*/{next}
{print}
ENDFILE{if(!set){print "";p()}}' ~/.config/kscreenlockerrc
答案3
正如 Jacob 所建议的,kwriteconfig5
可以用作编辑配置文件的更优雅的方式。但是,一些文件和功能已被移动/重命名。在 KDE 5.27 中,正确的命令是:
kwriteconfig5 --file kscreenlockerrc --group Daemon --key Autolock false
qdbus org.freedesktop.ScreenSaver /ScreenSaver configure
替换false
为true
以启用屏幕锁定器。
答案4
在较新版本的 KDE 中,你可以使用 kwriteconfig,而不必使用 awk
kwriteconfig5 --file kscreensaverrc --group Daemon --key Autolock false
qdbus-qt5 org.freedesktop.ScreenSaver /MainApplication reparseConfiguration