xinput testmoż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.logaby przechowywać w pliku dziennika. Lub | tee file.logzalogować się i zobaczyć.
xinputodpytuje 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-xi2zamiast niej testdaje 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 effectivemaska 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ć xinputpolecenie z kompatybilnego systemu i wykonać je.