xinput test
può segnalare tutti gli eventi della tastiera al server X. Su un sistema GNU:
xinput list |
grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
xargs -P0 -n1 xinput test
Se si desidera ottenere i nomi delle chiavi dai codici delle chiavi, è possibile postelaborare l'output con:
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
{print $0 "[" k[$NF] "]"}'
Aggiungi > file.log
per archiviare in un file di registro. O | tee file.log
per accedere e vederlo entrambi.
xinput
interroga XinputExtension del server X. Questo è il più vicino possibile allo standard (non sono a conoscenza di alcuno standard che copra le utility X) o al comando comune per farlo. Anche questo non richiede i privilegi di root.
Se il server X e xinput supportano la versione 2 di XinputExtension, è possibile utilizzare al test-xi2
posto del test
quale fornisce ulteriori informazioni, in particolare lo stato dei modificatori (shift, ctrl, alt ...). Esempio:
$ 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
Puoi tradurre il keycode (in detail
) in un keysym con l'aiuto di xmodmap -pke
nuovo, e il effective
modificatore bitmask in qualcosa di più utile con l'aiuto di xmodmap -pm
. Per esempio:
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]"
}
}'
produrrebbe:
KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]
quando premo Maiusc + Alt + q quando il blocco numerico è attivo.
Si noti che non è necessario disporre dei privilegi di superutente per installare un programma. Se si dispone di accesso in scrittura da qualche parte sul file system in cui eseguire l'autorizzazione viene concessa (la directory home, /tmp
, /var/tmp
...) quindi è possibile copiare un xinput
comando da un sistema compatibile lì ed eseguirlo.