2010-02-03 6 views
1

나는 백그라운드에서 주기적으로 실행되는 스크립트를 가지고있다. 시프트 키를 누르면 실행을 막고 싶습니다.Linux 쉘 : 키보드 버튼 상태를 폴링

아이디어는 키보드의 Shift 버튼 상태를 폴링하고 눌렀다면 즉시 스크립트를 종료하는 것입니다.

아이디어가 있으십니까? X 서버 사용이 허용됩니다. 도움이 될 것 같습니다.

UPD : 나는 현재이 바보 같은 해킹을 사용하고 :

[ $(sh -c 'cat /dev/input/by-id/usb-*kbd & sleep 0.5 ; kill $! 2>/dev/null' | wc -c) -gt 1 ] && exit 

스크립트는 단지 현재의 키보드 이벤트를 감지하지만 구별하지 않습니다. 0.5sec는 kbd-events 감시 기간입니다. 별로 좋지는 않지만 여전히 작동합니다 :)

+0

GUI 창을 사용하는 것이 좋습니다. 그것은 많은 고약한 문제를 피할 수 있습니다 (터미널은이 정보를 전송하지 않으며 evdev는 루트 액세스가 필요합니다). – Tronic

답변

1

우선 키 업/다운 이벤트를 모니터링 할 수 있지만, 알고있는 한, 이 현재인지 여부를 알 수있는 방법이 없습니다. 그걸로 괜찮 으면 ...

즉, 키 이벤트를 수신하는 것이 다른 스레드에서 실행 중이어야 함을 의미합니다. 셸 스크립트는 백그라운드에서 키 이벤트를 수신하고 키 입력시 부모 스크립트에 신호를 보내는 프로그램을 생성해야합니다. trap을 사용하면 정상적으로 종료하여 신호에 응답 할 수 있습니다.

체크 아웃 KeyPress 그것은 당신에게 좋은 출발을 줄 수도 있습니다.

monitor /dev/input/eventN 수 있습니다. This perl module 도움이 될 수 있습니다.

+0

감사합니다./dev/input /는 솔루션에 충분히 근접해있는 것처럼 보입니다! :) – kolypto

+0

현재 키가 눌려 있는지 여부를 알 수 있습니다. [''evtest' man page] (http://manpages.ubuntu.com/manpages/precise/man1/evtest.1.html),'--query' 옵션을보십시오. –

관련 문제