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.