带时间戳的 Showkey

带时间戳的 Showkey

如何使用时间戳记录键盘操作,以控制台,或者最好记录到文件?

我的 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 有经验,来提取时间戳、按键以及是否KeyReleaseKeyPress

然后我用来xdotool发送按键,但这是一个单独的事情。

我可能可以在没有 的情况下做到这一点xdotool,但是......我没有。

相关内容