检测屏幕保护程序是否处于活动状态

检测屏幕保护程序是否处于活动状态

我想检测屏幕保护程序是否处于活动状态。在 Ubuntu 14.04 和 Fedora 21 上,我尝试了以下命令:

$ dbus-send --print-reply=literal --dest=org.freedesktop.ScreenSaver /org/freedesktop/ScreenSaver org.freedesktop.ScreenSaver.Lock
Error org.freedesktop.DBus.Error.NotSupported: This method is not implemented

我可能误解了,dbus-send因为 d-feet 告诉我该方法GetActive是可用的。

d脚截图

如何我检测屏幕保护程序活动,最好以独立于桌面的方式?有一个相关问题,然而这并没有解决。

答案1

根据您的环境:

$ qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive

$ qdbus org.kde.screensaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive

$ qdbus org.gnome.ScreenSaver /ScreenSaver org.gnome.ScreenSaver.GetActive

正确的人应该给出正确或错误的陈述。不正确的就会报错。

$ qdbus org.gnome.ScreenSaver /ScreenSaver org.gnome.ScreenSaver.GetActive
false

$ qdbus org.kde.screensaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive
Service 'org.kde.screensaver' does not exist.

(我正在运行 Gnome)

答案2

您没有误解 dbus-send。

只是这样Gnome-Shell 在撒谎。这意味着 Gnome-Shell 开发人员实际上按原样采用 KDE API 描述,并且只实现了属于 freedesktop 一部分的 2 个方法怠速抑制规范。因此,其他方法会返回未实现的错误:

+        } else if (g_strcmp0 (method_name, "GetActive") == 0) {
+                goto unimplemented;
+        } else ...

认为这种方法令人困惑的评论评论被忽略了。

这仍然是 Gnome-Shell 3.38.1 的现状(例如在 Fedora 33 上):

$ qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive
Error: org.freedesktop.DBus.Error.NotSupported
This method is not implemented
$ qdbus org.freedesktop.ScreenSaver /org/freedesktop/ScreenSaver org.freedesktop.ScreenSaver.GetActive
Error: org.freedesktop.DBus.Error.NotSupported
This method is not implemented

因此,最好的方法是尝试多种方法,直到不再出现错误NotSupported为止。

例如检查 Gnome-Shell:

$ qdbus org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.GetActive                
false

相关内容