1

X11スクリーンセーバー拡張クライアントライブラリを使用して、最後のユーザー入力からの時間を検出しようとしています。XScreenSaverQueryInfoアイドル時間を取得するために定期的に電話をかけます。私が直面している問題は、この呼び出しで報告されているように、20〜30秒ごとにアイドル時間が0にリセットされることです。これは、その時間に実際のユーザー入力がなかった場合でも発生します。私はこれに完全に戸惑っています。私が持っている唯一のリードは、アンインストールすると問題がなくなるということgnome-screensaverです。私の質問は、gnome-screensaver何らかの理由でユーザー入力をシミュレートするのですか?私はそれがありそうもないように聞こえることを知っています、そしてもしそうなら、それは間違いなくのバグになるでしょうgnome-screensaver、しかし私は今他に何も考えられません。gnome-screensaverどのように機能し、それがどのように影響するかについての詳細情報をどこで見つけることができるか誰かが知っていますか?XScreenSaverQueryInfo実際にコードを確認せずに呼び出します。gnome-screensaver 自宅で情報を確認しましたが、問題に関連するものが見つかりませんでした。

更新:dbus-monitorから次の出力を取得しました。これをどのように解釈しますか:

method call sender=:1.97538 -> dest=org.gnome.ScreenSaver serial=3 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=SimulateUserActivity

いくつかのプロセスがgnome-screensaverにSimulateUserActivityを要求していると思います。または、gnome-screensaverはSimulateUserActivityシグナルをdbusに送信していますか?それが最初の場合、どのプロセスがgnome-screensaverにそれを要求しているのかをどのように見つけることができますか?

4

2 に答える 2

3

プログラム (ビデオ プレーヤーはビデオの再生中にこれを行います) は、スクリーンセーバーがアクティブになるのを防ぐアイドル時間をリセットgnome-screensaver-command --pokeするイベントを送信するコマンドを送信している可能性があります。SimulateUserActivity

于 2011-01-18T08:58:34.040 に答える
2

dbus 送信者を取得したら (dbus-monitor に示されているように)、次のことができます。

dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetConnectionUnixProcessID string:':1.97538'

実際の送信者を接続します。これにより、メッセージを送信している pid が得られます。

次に、pid が 2144 だとすると、次のようになります。

cat /proc/2144/cmdline

プログラムが何であるかを確認する 1 つの方法として。

于 2011-01-18T16:32:53.287 に答える