我有一个用bash编写的脚本,需要在屏幕保护程序运行时采取不同的路线。这是Linux系统,并且使用Xorg和KDE桌面环境。该脚本由cron调用,并连接到DISPLAY:= 0。
有没有提示/想法如何检查屏幕保护程序的状态?
我有一个用bash编写的脚本,需要在屏幕保护程序运行时采取不同的路线。这是Linux系统,并且使用Xorg和KDE桌面环境。该脚本由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
显然,在运行屏幕保护程序时,除了屏幕保护二进制文件外,还有这个进程在运行:
/usr/lib/kde4/libexec/kscreenlocker
ps uw -C kscreenlocker
并检查结果。
dbus-send --session --print-reply=literal --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.GetActive
boolean false
xdg-screensaver status
,但它只会告诉你它是否启用,而不是何时运行。GNOME 屏幕保护程序似乎有一个不稳定的 DBus 接口来公开这个信息,但我不确定如何访问它。KDE 也可能有一种特定的方法,但需要其他人去找。 :) - Stéphan Kochendcop
,在KDE 4中使用qdbus
完成了这个任务,但现在我无法访问存储脚本的家用机。请尝试使用kdcop
或qdbusviewer
来检查kdesktop;通过一些试错即可解决问题。 - user229044