我有一个用 bash 编写的脚本,如果屏幕保护程序当前正在运行,我需要采取不同的路线。这是带有 Xorg 和 KDE 的 Linux。从 cron 调用脚本,它连接到 DISPLAY=:0。
任何提示/想法如何检查屏幕保护程序的状态?
我有一个用 bash 编写的脚本,如果屏幕保护程序当前正在运行,我需要采取不同的路线。这是带有 Xorg 和 KDE 的 Linux。从 cron 调用脚本,它连接到 DISPLAY=:0。
任何提示/想法如何检查屏幕保护程序的状态?
如果你运行的是 KDE4,可以使用 dbus 来检查屏幕保护程序是否在运行:
$ qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive
或者
$ qdbus org.kde.screensaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive
这也适用于 gnome,但它们以不遵循 FreeDesktop 标准而闻名,因此您必须使用:
$ qdbus org.gnome.ScreenSaver /ScreenSaver org.gnome.ScreenSaver.GetActive
最后但同样重要的是,您可以使用 XScreenSaverQueryInfo() 并检查状态字段来检查标准 X 屏幕服务器是否正在运行。
显然,在运行屏幕保护程序时,除了屏幕保护程序二进制文件之外,还有这个进程正在运行:
/usr/lib/kde4/libexec/kscreenlocker
所以,我可以简单地做ps uw -C kscreenlocker
并检查结果。
在 Gnome 40 上,您可以使用
dbus-send --session --print-reply=literal --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.GetActive
它会打印出这样的东西
boolean false