화면 보호기가 활성화되어 있는지 확인하고 싶습니다. 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
.
어떻게할 수 있는가급적 데스크탑 독립적인 방식으로 화면 보호기 활동을 감지합니까? 하나 있다관련 질문, 그러나 이로 인해 문제가 해결되지 않았습니다.
답변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