xinput test
có thể báo cáo tất cả các sự kiện bàn phím đến máy chủ X. Trên hệ thống GNU:
xinput list |
grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
xargs -P0 -n1 xinput test
Nếu bạn muốn lấy tên khóa từ mã khóa, bạn có thể xử lý hậu kỳ đầu ra đó bằng:
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
{print $0 "[" k[$NF] "]"}'
Thêm vào > file.log
để lưu trữ trong một tệp nhật ký. Hoặc | tee file.log
để cả hai đăng nhập và xem nó.
xinput
truy vấn XinputExtension của máy chủ X. Điều đó gần giống như bạn sẽ đạt được như một tiêu chuẩn (tôi không biết về bất kỳ tiêu chuẩn nào bao gồm các tiện ích X) hoặc lệnh chung để thực hiện điều đó. Điều đó cũng không yêu cầu quyền root.
Nếu máy chủ X và xinput hỗ trợ phiên bản 2 của XinputExtension, bạn có thể sử dụng test-xi2
thay vì test
cung cấp thêm thông tin, đặc biệt là trạng thái của các công cụ sửa đổi (shift, ctrl, alt ...). Thí dụ:
$ 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
Bạn có thể dịch mã khóa (in detail
) sang keyym với sự trợ giúp của xmodmap -pke
một lần nữa và effective
bitmask sửa đổi thành thứ gì đó hữu ích hơn với sự trợ giúp của xmodmap -pm
. Ví dụ:
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]"
}
}'
sẽ xuất ra:
KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]
khi tôi nhấn Shift + Alt + q khi bật num-lock.
Lưu ý rằng bạn không cần phải có đặc quyền siêu người dùng để cài đặt chương trình. Nếu bạn có quyền ghi vào một nơi nào đó trên hệ thống tệp được cấp quyền thực thi (thư mục chính của bạn /tmp
, /var/tmp
...) thì bạn có thể sao chép một xinput
lệnh từ một hệ thống tương thích ở đó và thực thi nó.