如何检查屏幕保护程序是否正在运行?

4

我有一个用bash编写的脚本,需要在屏幕保护程序运行时采取不同的路线。这是Linux系统,并且使用Xorg和KDE桌面环境。该脚本由cron调用,并连接到DISPLAY:= 0。

有没有提示/想法如何检查屏幕保护程序的状态?


我能找到的最接近的是 xdg-screensaver status,但它只会告诉你它是否启用,而不是何时运行。GNOME 屏幕保护程序似乎有一个不稳定的 DBus 接口来公开这个信息,但我不确定如何访问它。KDE 也可能有一种特定的方法,但需要其他人去找。 :) - Stéphan Kochen
我曾在KDE 3.5中使用dcop,在KDE 4中使用qdbus完成了这个任务,但现在我无法访问存储脚本的家用机。请尝试使用kdcopqdbusviewer来检查kdesktop;通过一些试错即可解决问题。 - user229044
3个回答

7

如果您正在运行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屏幕服务器是否正在运行,并检查状态字段。

3

显然,在运行屏幕保护程序时,除了屏幕保护二进制文件外,还有这个进程在运行:

/usr/lib/kde4/libexec/kscreenlocker

所以,我可以简单地执行ps uw -C kscreenlocker并检查结果。

1
在Gnome 40上,您可以使用:

dbus-send --session --print-reply=literal --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.GetActive

它将会打印出类似这样的东西。
   boolean false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接