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

Tho*_* W. 9 screensaver d-bus

我想检测屏幕保护程序是否处于活动状态。在 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
Run Code Online (Sandbox Code Playgroud)

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

d-feet 截图

如何我发现屏幕活动,最好在桌面独立的方式?有一个相关的问题,但是没有解决。

max*_*zig 2

您没有误解 dbus-send。

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

+        } else if (g_strcmp0 (method_name, "GetActive") == 0) {
+                goto unimplemented;
+        } else ...
Run Code Online (Sandbox Code Playgroud)

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

这仍然是 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
Run Code Online (Sandbox Code Playgroud)

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

例如检查 Gnome-Shell:

$ qdbus org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.GetActive                
false
Run Code Online (Sandbox Code Playgroud)