スクリーンセーバーが有効になっていることを確認したいと思います。 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