![타임스탬프가 포함된 쇼키](https://linux55.com/image/148772/%ED%83%80%EC%9E%84%EC%8A%A4%ED%83%AC%ED%94%84%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%87%BC%ED%82%A4.png)
타임스탬프가 포함된 키보드 동작을 콘솔이나 파일에 기록하려면 어떻게 해야 합니까?
내 showkey 출력은 다음과 같습니다.
keycode 28 release
keycode 30 press
keycode 30 release
keycode 48 press
keycode 48 release
나는 그것이되기를 원합니다 :
keycode 30 press 1551027529
keycode 30 release 1551027532
keycode 48 press 1551027534
keycode 48 release 1551027536
keycode 46 press 1551027542
keycode 46 release 1551027548
keycode 32 press 1551027549
keycode 32 release 155102751
내가 찾고 있어요Bash 명령 파이프라인에서 출력을 수정하는 방법그리고 시도했다:
sudo showkey | awk -v date="$(date +%s)" '{print $1 date}'
그리고 전혀 출력이 없습니다.
나는 while
루프를 시도했습니다 :
echo MY_PASSWORD |
stdbuf -o0 sudo -S showkey |
while read line;
do
echo "$line":$(date +%s) >> /home/reedbear/user_scripts/output.txt;
done
내 출력에는 키 누르기가 표시되지만 while 루프가 showkey
완료되면 전체 출력으로 평가된다고 가정하기 때문에 모두 동일한 타임스탬프를 갖습니다.
stdbuf
뭔지는 모르겠지만 어젯밤에 어디선가 본 것 같아요. 그것 없이도 같은 일을 할 것입니다.
답변1
sudo showkey | awk -v date="$(date +%s)" '{print $1 date}'
date
시작하기 전에 한 번 실행 하면 작동하지 않으므로 awk
모든 줄에 동일한 값이 인쇄됩니다.
GNU awk를 사용하면 다음을 사용할 수 있습니다.systime()
이것현재 시간(에포크 이후 초)을 가져옵니다. 예를 들어 이것은 나에게 효과적입니다.
$ stdbuf -o0 showkey -a | awk '{ print $0, systime(); }'
1551031085
Press any keys - Ctrl-D will terminate this program 1551031085
1551031085
a 97 0141 0x61 1551031086
d 100 0144 0x64 1551031087
^D 4 0004 0x04 1551031088
showkey
(지금은 원래 키코드로 테스트할 수 없습니다.)
답변2
나는 포기 showkey
하고 전환했다 xev
.
xev -id $(xdotool search -name "Stardew Valley") -event keyboard >> /home/reedbear/user_scripts/output.txt
그러면 내 로그가 다음과 같이 보입니다.
KeyRelease event, serial 18, synthetic NO, window 0x260000a,
root 0x1b0, subw 0x0, time 18101865, (893,683), root:(893,683),
state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (61) "a"
XFilterEvent returns: False
KeyPress event, serial 18, synthetic NO, window 0x260000a,
root 0x1b0, subw 0x0, time 18101865, (893,683), root:(893,683),
state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (61) "a"
XmbLookupString gives 1 bytes: (61) "a"
XFilterEvent returns: False
KeyRelease event, serial 21, synthetic NO, window 0x260000a,
root 0x1b0, subw 0x0, time 18102365, (893,683), root:(893,683),
state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (61) "a"
XFilterEvent returns: False
그런 다음 PHP에 대한 경험이 있으므로 PHP를 사용하여 타임 스탬프, 키 누르기 및 if KeyRelease
또는 KeyPress
.
그런 다음 키 입력을 보내는 데 사용 xdotool
하지만 이는 별개의 문제입니다.
아마도 없이도 할 수 있었겠지만 xdotool
...그렇지 않아요.