xinput test
może zgłaszać wszystkie zdarzenia związane z klawiaturą na serwerze X. W systemie GNU:
xinput list |
grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
xargs -P0 -n1 xinput test
Jeśli chcesz uzyskać nazwy kluczy z kodów kluczy, możesz przetworzyć dane wyjściowe za pomocą:
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
{print $0 "[" k[$NF] "]"}'
Dodaj, > file.log
aby przechowywać w pliku dziennika. Lub | tee file.log
zalogować się i zobaczyć.
xinput
odpytuje XinputExtension serwera X. Jest to tak blisko, jak masz zamiar dostać się jako standard (nie znam żadnego standardu, który obejmowałby narzędzia X) lub wspólne polecenie, aby to zrobić. To również nie wymaga uprawnień roota.
Jeśli serwer X i xinput obsługują wersję XinputExtension w wersji 2, można użyć test-xi2
zamiast niej test
daje więcej informacji, w szczególności stan modyfikatorów (shift, ctrl, alt ...). Przykład:
$ 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
Możesz przetłumaczyć kod klucza (in detail
) na klucz za pomocą przycisku xmodmap -pke
, a effective
maska bitowa modyfikatora na coś bardziej pomocnego za pomocą xmodmap -pm
. Na przykład:
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]"
}
}'
wyprowadziłby:
KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]
kiedy naciskam Shift + Alt + q, gdy włączona jest funkcja num-lock.
Pamiętaj, że nie musisz mieć uprawnień superużytkownika, aby zainstalować program. Jeśli masz dostęp do zapisu w dowolnym miejscu w systemie plików, w którym udzielono uprawnień do wykonywania (katalog domowy /tmp
, /var/tmp
...), możesz skopiować xinput
polecenie z kompatybilnego systemu i wykonać je.