タイムスタンプを含むキーボードの動作をコンソールまたはファイルに記録するにはどうすればよいですか?
私の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を使用してタイムスタンプ、キーを押すとifKeyRelease
またはKeyPress
。
その後、キーストロークを送信するために使用しxdotool
ますが、これは別の問題です。
おそらくなくてもできましたがxdotool
…そうではありません。