쉘 스크립트를 통해 키 입력을 기록하는 방법은 무엇입니까? 내 목표는 Ubuntu 시스템에서 로그인 세션에 대한 키보드 클릭 횟수를 기록하는 것입니다.
참고: 저는 키 입력 자체를 기록하고 싶지 않고 클릭 횟수만 기록하고 싶습니다. 그래서 결국 이렇게 말합니다.
94853 hits today.
답변1
X11(그래픽 데스크탑) 세션에서만 모니터링
XInput 계층을 사용하는 경우(최신 X를 실행하는 경우) xinput test «keyboard-id»
( xinput
Debian 패키지에서) 뉴스와 릴리스 이벤트가 제공됩니다. 를 실행하여 키보드 ID를 얻을 수 있습니다 xinput list
. 이 이름을 사용할 수도 있습니다.
xinput test 'AT Translated Set 2 keyboard' | grep -c 'key press'
파이프를 사용하면 xinput
상당히 큰 버퍼가 있다는 점에 유의하세요. 따라서 불행하게도 일부 열쇠를 잃어버릴 수도 있습니다. XI2 API를 직접 사용하면 이를 방지할 수 있지만 셸에서는 쉽지 않습니다.
상황에 따라 데스크톱 환경이나 파일에서 로그인 스크립트 중 하나로 스크립트를 매우 쉽게 시작할 수 있습니다 .xsession
. xinput
X11 연결이 끊어지므로 로그아웃할 때 종료해야 합니다. 따라서 세션의 시작 및 종료 시간을 추적하는 것이 매우 쉽습니다.
전체 시스템 모니터링(모든 세션, 텍스트 모드 포함)
아니면 모니터링하고 싶다면모두input-events
X11 세션뿐만 아니라 (적어도 Debian의 input-utils 패키지의 일부로) 시스템에서 키 입력을 사용할 수 있습니다 . 이 작업은 루트로 실행해야 합니다. lsinput
올바른 입력 장치(내 시스템에서는 0임)를 찾으 려면 다음을 수행하세요.
input-events 0 | grep -c 'EV_KEY.*pressed'
이렇게 하면 세션이 시작되고 끝나는 시기를 파악해야 합니다(예: peterph의 dbus 제안).
답변2
de Robert가 언급했듯이 ( 작동해야 함 - 포함된 행 수를 계산해야 함 ) xinput
사용할 수 있습니다 . 그러나 세션이 시작되자마자 스크립트를 실행하고 세션이 끝난 후에는 중지해야 하므로 dbus 세션도 시청하는 것이 좋습니다.xinput --test-xi2
RawKeyPress
/proc
또한, 가상 콘솔에 입력하는 모든 내용을 놓칠 수 있습니다. 이를 위해서는 통계를 또는 어딘가에 내보내는 커널 모듈을 작성해야 /sys
하지만 머신에 들어오는 거의 모든 내용이 포함됩니다. .