2014-01-21 5 views
1

컴퓨터가 특정 시간 동안 유휴 상태 일 때를 감지해야합니다. 게으름의 나의 정의는 다음과 같습니다리눅스 - 게으름 감지

  • 없음 사용자가 마우스 나 키 입력없이 운동, 원격 메소드 또는 로컬 컴퓨터
  • X 서버 활동에 하나, 로그인하지
  • TTY 키보드 활동 (희망)

대다수의 배포판이 이제 logind으로 이동 했으므로 DBUS 인터페이스를 사용하여 사용자가 로그인했는지 확인하고 로그인/로그 아웃을 모니터링 할 수 있어야합니다. 이전에 X 유휴 상태를 감지하기 위해 xautolock을 사용했으며 계속 사용하고 있지만 xscreensaver도 사용 가능합니다. 그러나 나는 다른 구성 요소를 사용하는 다른 데스크탑 환경으로 인해 화면 보호기와 같은 특정 종속성에서 벗어나고 싶습니다.

이상적으로 나는 TTY 키보드가 작동하지 않을 때도 유휴 상태가 될 수 있지만, 이것이 가장 큰 걱정거리는 아닙니다. this answer에 따르면, 나는 /dev/input/* 인터페이스를 직접 질의 할 수 있어야하지만, 이것에 대해 어떻게 해야할지 전혀 모른다.

이전에 그런 모니터를 만들려고 시도했는데, 평범한 텍스트 스크립트 파일을 바꾸기 쉽기 때문에 Bash를 사용 했었습니다.이 작업을 수행하는 데 고급 방법이 필요한 경우 C++을 사용하여 기쁘게 생각합니다.

+0

이것은 http://unix.stackexchange.com/에 대한 질문 일 수 있습니다. – BenC

+0

linux 명령 "last"는 모든 사용자의 로그인 시간 목록을 제공합니다. 그래서 그 부분은 파일을 파싱하는 것입니다. – Peter

+0

@Peter'last'는 로그인과 로그 아웃을 모니터 할 수 없으며, 게다가'logind'는 이제 거의 표준입니다. 그것은 내가 더 걱정하는 다른 부분입니다. – Xenopathic

답변

0

순전히 셸 관점에서 (이 태그가 붙어 있기 때문에 ) 정말 원하는대로 가깝게 될 수 있습니다.

사용자가 2 분 안에 로그인 할 수 있고 그렇지 않은 경우 TTY 키보드 활동이 없다고 가정합니다.

who |grep이 시스템에서 작동하는지 (즉, 헤더 없음) 확인해야합니다. 나는 원래 /에 대해 grepped했지만, FreeBSD에서는 작동하지 않습니다. who에 헤더가있는 경우 [ $(who |grep -c .) -gt 1 ]을 시도하면 who이 출력하는 줄 수가 둘 이상인 것으로 알 수 있습니다.

나는 화면 보호기 부분에 대해 걱정하지 않습니다. xscreensaver는 로그인 관리자에서 실행되지 않을 가능성이 있습니다 (다른 형태의 X는 로그인 한 사용자와 관련이 있습니다. who). GDM은 그 구문이 약간 다른 gnome-screensaver를 사용합니다. DPMS 부분은 콘솔 로그온을위한 2 분보다 그래픽 로그인에 훨씬 더 큰 버퍼를 제공 할만큼 충분할 수 있습니다.

기능의 마지막 줄에 return $?을 사용하면 중복됩니다. 우리가 실제로 이전 라인의 리턴 값을 사용하고 있음을 명확히하기 위해 사용했습니다. 더 일반적으로 의미로 용어 "idle" 사용에 대한주의 : 어떤 사용자가 로그인되지 않은 경우 nobody_hereshort circuits, 그래서,


사이드 노트 X의 상태에 대한 더 비싼 검사를 실행 할 필요가 없습니다 자원 (하드웨어, 즉) 소비 (예 : CPU로드). 시스템 (자원) 유휴 상태를 확인하는 가장 일반적인 방법은 load averages에 대한 uptime 명령을 참조하십시오. (이것이 내가 예를 들어 is_idle 대신 내 기능을 nobody_here으로 명명 한 이유입니다.