xinput test
pode relatar todos os eventos do teclado para o servidor X. Em um sistema GNU:
xinput list |
grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
xargs -P0 -n1 xinput test
Se você quiser obter os nomes das chaves dos códigos-chave, poderá pós-processar essa saída com:
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
{print $0 "[" k[$NF] "]"}'
Adicione > file.log
para armazenar em um arquivo de log. Ou | tee file.log
para logar e ver.
xinput
consulta o XinputExtension do servidor X. Isso é o mais próximo que você vai obter como padrão (não estou ciente de nenhum padrão que cubra os utilitários X) ou comando comum para fazer isso. Isso também não requer privilégios de root.
Se o servidor X e o xinput suportarem a versão 2 do XinputExtension, você poderá usar test-xi2
em vez de test
, o que dá mais informações, em particular o estado dos modificadores (shift, ctrl, alt ...). Exemplo:
$ xinput test-xi2 --root
EVENT type 2 (KeyPress)
device: 11 (11)
detail: 54
flags:
root: 846.80/451.83
event: 846.80/451.83
buttons:
modifiers: locked 0 latched 0 base 0x4 effective: 0x4
group: locked 0 latched 0 base 0 effective: 0
valuators:
windows: root 0x26c event 0x26c child 0x10006e6
Você pode traduzir o keycode (em detail
) para um keysym com a ajuda de xmodmap -pke
novamente, e a máscara de bit do modificador effective
para algo mais útil com a ajuda de xmodmap -pm
. Por exemplo:
xinput test-xi2 --root | perl -lne '
BEGIN{$"=",";
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;
}
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 "$e $d [$k{$d}] $m [@mods]"
}
}'
produziria:
KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]
quando pressiono Shift + Alt + q quando o num-lock está ativado.
Note que você não precisa ter privilégios de superusuário para instalar um programa. Se você tiver acesso de gravação em algum lugar no sistema de arquivos no qual a permissão de execução é concedida (seu diretório base, /tmp
, /var/tmp
...), você poderá copiar um comando xinput
de um sistema compatível e executá-lo.