2016-12-21 20 views
-2

저는 일부 시스템 이벤트 (디스크 읽기, 이더넷 통신, 프로세서 과부하)에서 다른 방법으로 일부 LED를 깜박 거리는 내 나무 딸기 파이의 간단한 프로젝트에서 작업하고 있습니다. 이러한 LED는 시스템이 유휴 상태가 된 후 잠시 꺼야합니다 (이 LED는 sys 활동이 감지되지 않을 때 강도가 변하는 방식으로 작동합니다).데몬 (C 언어)에서 실행하면 XOpenDisplay가 실패합니다.

유휴 상태 감지를 달성하기 위해, 여기까지 XScreenSaver를 사용하고 있습니다. 모든 것이 완벽하게 작동합니다.

내 프로젝트가 데몬 (etc/init.d)으로 실행되어야하고 루트 권한 (pigpio 라이브러리로 인해)에서 X 서버와의 통신 (XOpenDisplay를 통해)이 매번 NULL을 반환 할 때 시스템이 준비되어 있고 그래픽 인터페이스에 있습니다. 터미널에서 수동으로 실행하면 모든 것이 완벽하게 작동합니다.

필자의 연구에 따르면, 부팅 할 때 콘솔을 사용할 수 없을 때 X 서버에 액세스 할 수 없다는 것을 이해했으며 보안상의 이유로 액세스 할 수있는 방법이 없다.

그래서 가장 간단한 방법으로 가능한 (유휴 시간 감지) 방법을 얻을 수 있습니까? (자기 재시작 시도, 시작 스크립트에서 DISPLAY 변수를 설정해도 아무 것도 작동하지 않는 것 같습니다.) 저는 리눅스 개발에 익숙하며이를 올바르게 해결하는 방법을 생각할 수 없습니다.

+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 입력을 지원하여 USB 키보드/"softirq"줄에서/proc/stat를 모니터링함으로써 두 번째 숫자 열에 숫자가 포함 된 두 번째 숫자 열 (이 장치는 일부 또는 모든 입력 (마우스 이동 또는 키 눌렀다 놓음))이있는 경우 전송

시간이 지남에 따라 C에서 쉽게,이 필드에 fopen/fread는 이전 값과 값을 비교합니다.

Linux 내부에 대한 집중적 인 연구에 많은 감사를드립니다 & 사용자 Olaf는 명백한 발견에 대해 많은 지식을 가지고 있습니다.