Ich arbeite in einem einfachen Projekt auf meinem Raspberry Pi, die einige LEDs auf verschiedene Systemereignisse (wie Diskettenlesen, Ethernet-Kommunikation, Prozessorüberlastung) und Diese LEDs müssen einige Zeit ausgeschaltet werden, nachdem das System inaktiv ist (diese LEDs verhalten sich unterschiedlich, wenn keine sys-Aktivität erkannt wird).XOpenDisplay schlägt fehl, wenn es vom Daemon (Sprache C) ausgeführt wird
Um Leerlauferkennung zu erreichen, verwende ich XScreenSaver, bis hier alles einwandfrei funktioniert.
Da mein Projekt als Daemon (etc/init.d) ausgeführt werden musste und mit root-Rechten ausgeführt werden musste (wegen der figpio-Bibliothek), gibt die Kommunikation mit X Server (über XOpenDisplay) jedesmal NULL zurück, auch wenn System ist bereit und in der grafischen Benutzeroberfläche. Am Terminal läuft das manuell, alles funktioniert einwandfrei.
Ich habe verstanden, dass es nicht möglich ist, auf X Server zuzugreifen, wenn zum Zeitpunkt des Systemstarts keine Konsole verfügbar ist und es aus Sicherheitsgründen nicht möglich ist, darauf zuzugreifen.
Also frage ich, wie ich das auf einfachste Weise (Leerlaufzeit erkennen) erreichen könnte? (Ich versuchte Selbst-Neustart, versuchte Einstellung DISPLAY Variable auf Start-Skript scheint nichts zu funktionieren.) Ich bin neu auf Linux-Entwicklung und kann nicht herausfinden, wie dies richtig zu lösen.
Nicht klar, was Ihr Problem ist. Aber es riecht schlecht nach einem XY-Problem. – Olaf
Ich muss XScreenSaverQueryInfo verwenden, um den System IDLE-Status zu überprüfen, aber ich kann es nicht zum Laufen bringen, meine App als DAEMON zu starten. Wenn ich es vom Terminal aus starte, funktioniert es. – eduardogarcia234
Code folgt: xidle = XOpenDisplay (0); if (xidle) { \t XScreenSaverInfo * info = XScreenSaverAllocInfo(); \t XScreenSaverQueryInfo (xidle, DefaultRootWindow (xidle), info); \t ret = (info-> Leerlauf> 60000? (Info-> Leerlauf> 900000? 2: 1): 0); } – eduardogarcia234