2016-12-21 14 views
-2

私はいくつかのシステムイベント(ディスクの読み込み、イーサネット通信、プロセッサのオーバーロードなど)によっていくつかのLEDが異なる方法でフラッシュされる単純なプロジェクトで作業しています。これらのLEDは、システムがアイドル状態になってからしばらくはシャットダウンする必要があります(これらのLEDは、sysアクティビティが検出されなかった場合、その輝度が変化します)。デーモン(C言語)から実行するとXOpenDisplayが失敗する

アイドル検出を達成するために、私はここまでXScreenSaverを使用していますが、すべてが問題なく動作します。

私のプロジェクトはデーモン(etc/init.d)として実行する必要があり、root権限(pigpioライブラリのため)でXサーバとの通信(XOpenDisplay経由)が毎回NULLを返すシステムは準備が整っており、グラフィカルインタフェースである。端末では、これを手動で実行すると、すべてが完全に機能します。

私の研究では、起動時にコンソールが利用できない場合にXサーバにアクセスすることができず、セキュリティ上の理由からXサーバにアクセスする方法がないことを理解しました。

私はこれをどのように(アイドル時間を検出する)できるか簡単に聞くことができますか? (私は自己再起動を試みましたが、起動スクリプトにDISPLAY変数を設定しようとしましたが、何も動作していないようです)。私はLinux開発では新しいので、これを適切に解決する方法を理解できません。

+0

問題が何であるか不明です。しかし、XY問題の悪い臭いがあります。 – Olaf

+0

私はXScreenSaverQueryInfoを使ってシステムのIDLEステータスをチェックする必要がありますが、私のアプリケーションをDAEMONとして起動することはできません。私が端末から始めるとき、その作品。 – eduardogarcia234

+0

コードは次のようになります。 xidle = XOpenDisplay(0); if(xidle){ \t XScreenSaverInfo * info = XScreenSaverAllocInfo(); \t XScreenSaverQueryInfo(xidle、DefaultRootWindow(xidle)、info); \t ret =(info-> idle> 60000?(info-> idle> 900000?2:1):0); } – eduardogarcia234

答えて

0

私と同じ問題を抱えている人なら、私自身の質問に答えるだけです。

システムの検出Xグラフィカルインターフェイス以外の非アクティブ(アイドル)は、/ proc/interruptのIRQ(通常はIRQ 1/IRQ 12)を監視することによってUSBキーボード/マウスアクティビティの問題です。 "softirq"行を監視することによって/ proc/statを監視することで、これらのデバイスに何らかの入力があるときに転送される数値の量を含む第2数値列

これらのフィールドの値を古いものと比較するfopen/freadは時々簡単にCで実行されます。

Linux内部についての集中的な調査に感謝します。&ユーザOlafは明らかなことを発見するための巨大な知識を持っています。

関連する問題