저는 일부 시스템 이벤트 (디스크 읽기, 이더넷 통신, 프로세서 과부하)에서 다른 방법으로 일부 LED를 깜박 거리는 내 나무 딸기 파이의 간단한 프로젝트에서 작업하고 있습니다. 이러한 LED는 시스템이 유휴 상태가 된 후 잠시 꺼야합니다 (이 LED는 sys 활동이 감지되지 않을 때 강도가 변하는 방식으로 작동합니다).데몬 (C 언어)에서 실행하면 XOpenDisplay가 실패합니다.
유휴 상태 감지를 달성하기 위해, 여기까지 XScreenSaver를 사용하고 있습니다. 모든 것이 완벽하게 작동합니다.
내 프로젝트가 데몬 (etc/init.d)으로 실행되어야하고 루트 권한 (pigpio 라이브러리로 인해)에서 X 서버와의 통신 (XOpenDisplay를 통해)이 매번 NULL을 반환 할 때 시스템이 준비되어 있고 그래픽 인터페이스에 있습니다. 터미널에서 수동으로 실행하면 모든 것이 완벽하게 작동합니다.
필자의 연구에 따르면, 부팅 할 때 콘솔을 사용할 수 없을 때 X 서버에 액세스 할 수 없다는 것을 이해했으며 보안상의 이유로 액세스 할 수있는 방법이 없다.
그래서 가장 간단한 방법으로 가능한 (유휴 시간 감지) 방법을 얻을 수 있습니까? (자기 재시작 시도, 시작 스크립트에서 DISPLAY 변수를 설정해도 아무 것도 작동하지 않는 것 같습니다.) 저는 리눅스 개발에 익숙하며이를 올바르게 해결하는 방법을 생각할 수 없습니다.
문제가 무엇인지 명확하지 않습니다. 그러나 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