xinput test
dapat melaporkan semua acara keyboard ke server X. Pada sistem GNU:
xinput list |
grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
xargs -P0 -n1 xinput test
Jika Anda ingin mendapatkan nama-nama kunci dari kode-kode kunci, Anda dapat memposting proses itu dengan:
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
{print $0 "[" k[$NF] "]"}'
Tambahkan > file.log
untuk menyimpan dalam file log. Atau | tee file.log
untuk kedua log dan melihatnya.
xinput
menanyakan XinputExtension dari server X. Itu sedekat yang Anda dapatkan sebagai standar (saya tidak mengetahui adanya standar yang mencakup utilitas X) atau perintah umum untuk melakukan itu. Itu juga tidak memerlukan hak root.
Jika X server dan xinput mendukung versi 2 dari XinputExtension, Anda dapat menggunakan test-xi2
alih-alih test
yang memberikan informasi lebih lanjut, khususnya keadaan pengubah (shift, ctrl, alt ...). Contoh:
$ 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
Anda dapat menerjemahkan kode kunci (dalam detail
) ke keysym dengan bantuan xmodmap -pke
lagi, dan effective
bitmask pengubah untuk sesuatu yang lebih bermanfaat dengan bantuan xmodmap -pm
. Contohnya:
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]"
}
}'
akan menghasilkan:
KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]
ketika saya menekan Shift + Alt + q ketika num-lock aktif.
Perhatikan bahwa Anda tidak perlu memiliki hak pengguna super untuk menginstal program. Jika Anda memiliki akses tulis ke suatu tempat di sistem file di mana mengeksekusi izin diberikan (direktori home Anda /tmp
,, /var/tmp
...) maka Anda dapat menyalin xinput
perintah dari sistem yang kompatibel di sana dan menjalankannya.