D-Bus

檢測螢幕保護程序是否處於活動狀態

  • November 16, 2020

我想檢測螢幕保護程序是否處於活動狀態。在 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 腳截圖

如何檢測螢幕保護程序活動,最好以獨立於桌面的方式?有一個相關的問題,但是沒有解決。

您沒有誤解 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

根據您的環境:

$ 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)

引用自:https://unix.stackexchange.com/questions/197032