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
我可能誤解
dbus-send
了,因為 d-feet 向我展示了該方法GetActive
是可用的。如何檢測螢幕保護程序活動,最好以獨立於桌面的方式?有一個相關的問題,但是沒有解決。
您沒有誤解 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)