私はいくつかのシステムイベント(ディスクの読み込み、イーサネット通信、プロセッサのオーバーロードなど)によっていくつかのLEDが異なる方法でフラッシュされる単純なプロジェクトで作業しています。これらのLEDは、システムがアイドル状態になってからしばらくはシャットダウンする必要があります(これらのLEDは、sysアクティビティが検出されなかった場合、その輝度が変化します)。デーモン(C言語)から実行するとXOpenDisplayが失敗する
アイドル検出を達成するために、私はここまでXScreenSaverを使用していますが、すべてが問題なく動作します。
私のプロジェクトはデーモン(etc/init.d)として実行する必要があり、root権限(pigpioライブラリのため)でXサーバとの通信(XOpenDisplay経由)が毎回NULLを返すシステムは準備が整っており、グラフィカルインタフェースである。端末では、これを手動で実行すると、すべてが完全に機能します。
私の研究では、起動時にコンソールが利用できない場合にXサーバにアクセスすることができず、セキュリティ上の理由からXサーバにアクセスする方法がないことを理解しました。
私はこれをどのように(アイドル時間を検出する)できるか簡単に聞くことができますか? (私は自己再起動を試みましたが、起動スクリプトにDISPLAY変数を設定しようとしましたが、何も動作していないようです)。私はLinux開発では新しいので、これを適切に解決する方法を理解できません。
問題が何であるか不明です。しかし、XY問題の悪い臭いがあります。 – Olaf
私はXScreenSaverQueryInfoを使ってシステムのIDLEステータスをチェックする必要がありますが、私のアプリケーションをDAEMONとして起動することはできません。私が端末から始めるとき、その作品。 – eduardogarcia234
コードは次のようになります。 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