타임스탬프가 포함된 쇼키

타임스탬프가 포함된 쇼키

타임스탬프가 포함된 키보드 동작을 콘솔이나 파일에 기록하려면 어떻게 해야 합니까?

내 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...그렇지 않아요.

관련 정보