xinput test
puede 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.log
a la tienda en un archivo de registro. O | tee file.log
para iniciar sesión y verlo.
xinput
consulta 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-xi2
lugar de lo test
que 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 detail
clave (in ) a un keyym con la ayuda de xmodmap -pke
nuevo, y la effective
má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 xinput
comando de un sistema compatible allí y ejecutarlo.