xinput testpuede informar todos los eventos del teclado al servidor X. En un sistema GNU:
xinput list |
grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
xargs -P0 -n1 xinput test
Si desea obtener nombres clave de los códigos clave, puede procesar posteriormente esa salida con:
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
{print $0 "[" k[$NF] "]"}'
Agregar > file.loga la tienda en un archivo de registro. O | tee file.logpara iniciar sesión y verlo.
xinputconsulta la extensión Xinput del servidor X. Eso es lo más parecido a un estándar (no conozco ningún estándar que cubra las utilidades X) o un comando común para hacerlo. Eso tampoco requiere privilegios de root.
Si el servidor X y xinput admiten la versión 2 de XinputExtension, puede usar en test-xi2lugar de lo testque proporciona más información, en particular el estado de los modificadores (shift, ctrl, alt ...). Ejemplo:
$ 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
Puede traducir el código detailclave (in ) a un keyym con la ayuda de xmodmap -pkenuevo, y la effectivemáscara de bits del modificador a algo más útil con la ayuda de xmodmap -pm. Por ejemplo:
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]"
}
}'
daría salida:
KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]
cuando presiono Shift + Alt + q cuando el bloqueo numérico está activado.
Tenga en cuenta que no necesita tener privilegios de superusuario para instalar un programa. Si tiene acceso de escritura en algún lugar del sistema de archivos donde se concede permiso de ejecución (su directorio de inicio /tmp, /var/tmp...), puede copiar un xinputcomando de un sistema compatible allí y ejecutarlo.