Skip to content

Instantly share code, notes, and snippets.

@kato-megumi
Forked from pstuifzand/log-keyboard.md
Created November 11, 2018 09:21
Show Gist options
  • Save kato-megumi/689735ca1c2956d0267d8381494f286f to your computer and use it in GitHub Desktop.
Save kato-megumi/689735ca1c2956d0267d8381494f286f to your computer and use it in GitHub Desktop.
Keyboard logger
#!/bin/bash
xinput test-xi2 --root | perl -MTime::HiRes=time -lne '
BEGIN{$"=",";
select((select(STDOUT),$|=1)[0]);
open X, "-|", "xmodmap -pke";
while (<X>) {$k{$1}=$2 if /^keycode\s+(\d+) = (\w+)/}
open X, "-|", "xmodmap -pm"; <X>;<X>;
while (<X>) {if (/^(\w+)\s+(\w*)/){($k=$2)=~s/_[LR]$//;$m[$i++]=$k||$1}}
close X;
}
$time = time();
if (/^EVENT type.*\((.*)\)/) {$e = $1}
elsif (/detail: (\d+)/) {$d=$1}
elsif (/modifiers:.*effective: (.*)/) {
$m=$1;
if ($e =~ /^Key/){
my @mods;
for (0..$#m) {push @mods, $m[$_] if (hex($m) & (1<<$_))}
print "$time,$e,$d,$k{$d},$m,@mods"
}
}'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment