2011-01-18 24 views
0

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

更新: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にそれを要求しているかをどのように調べることができますか?

答えて

2

あなたが行うことができます:

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 

を。

+0

私はそれをしました。それは言う: エラーorg.freedesktop.DBus.Error.NameHasNoOwner:名前 ':1.ddddd'のPIDを取得できませんでした:そのような名前はありません ここで、1.dddddは実際の送信者です。 – 341008

+0

は、何かを指し、SimulateUserActivityを送信してから、調査を行う前に切断します。おそらく上記のgnome-screensaver-command --pokeです。 gnome-screensaver-commandをシェルスクリプトに置き換えることの提案は興味深いものです。 –

1

SimulateUserActivityイベントを送信してアイドル時間をリセットしてスクリーンセーバーがアクティブにならないようにするgnome-screensaver-command --pokeコマンドをプログラムが送信している可能性があります。 (そこDBUS-モニターに示されるように)あなたがDBUSの送信者を持っていたら

+0

フォアグラウンドプロセスを実行していません。どのアプリケーションがそれを実行しているかを照会する方法はありますか? – 341008

+0

gnome-screen-commandプログラムを、それを呼び出す人物を表示するシェルスクリプトで上書きすることができます。もちろん、誰かが代わりにDBusインターフェースを使用しているだけかもしれません。 – ismail

+0

dbus-monitorからの出力を含むように質問を更新しました。それは何を意味するのでしょうか? – 341008

関連する問題