화면 보호기가 활성화되어 있는지 감지

화면 보호기가 활성화되어 있는지 감지

화면 보호기가 활성화되어 있는지 확인하고 싶습니다. 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-sendd-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

관련 정보