Saya perlu memeriksa beberapa notebook untuk tombol keyboard yang buruk, dan jadi saya ingin mempercepatnya sebanyak mungkin.
Saya tidak menemukan apa pun untuk tugas khusus ini, jadi ide saya adalah skrip yang membaca tombol yang ditekan dan mengetahui semua tombol keyboard, jadi saya dapat menamparnya dengan cepat dan melaporkan mana yang belum ditekan. Saya kira saya bisa mencapainya dengan salah satu , showkey
atau xev
mengambil output:
xev | grep keysym
Output sampel:
state 0x10, keycode 46 (keysym 0x6c, l), same_screen YES,
state 0x10, keycode 33 (keysym 0x70, p), same_screen YES,
state 0x11, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
state 0x10, keycode 51 (keysym 0x5d, bracketright), same_screen YES,
state 0x10, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The keysym dapat dibaca cukup berguna, tapi saya keed untuk menguji kode kunci, karena mereka tidak berubah sebagai kunci pengubah diaktifkan / nonaktif (caps lock, num lock). Saya baru mengenal bash, jadi saya menyatukan sesuatu. Ini hasil terbaik sejauh ini:
#!/bin/bash
function findInArray() {
local n=$#
local value=${!n}
for ((i=1;i < $#;i++)) {
if [[ ${!i} == ${value}* ]]; then
echo "${!i}"
return 0
fi
}
echo
return 1
}
list=( 38:a 56:b 54:c 40:d 26:e 36:Return 50:Shift_L )
xev | \
# old grep solution
# grep -Po '(?<=keycode )[0-9]+(?= \(keysym 0x)' | \
# 200_success' suggestion
awk '/state 0x.*, keycode / { print $4; fflush() }' | \
while read keycode ;
do
found=$(findInArray "${list[@]}" ${keycode})
if [[ $found ]]; then
echo Pressed $found
list=(${list[@]/${keycode}\:*/})
echo 'Remaining ===>' ${list[@]}
if [[ ${#list[@]} == 0 ]]; then
echo All keys successfully tested!
pkill xev
exit 0
fi
fi
done
Sementara saya menggunakannya grep
hanya mencetak output ketika saya menutup xev
dan itu tidak akan membunuhnya pada akhirnya. The awk
Saran dari @ 200_success memecahkan masalah ini, tetapi tidak mencetak output immediatelly: dibutuhkan 5-6 penekanan tombol untuk output menjadi "memerah". Bagaimana saya bisa memperbaikinya?
Catatan: Saya tahu bahwa skrip ini akan membutuhkan daftar tombol yang berbeda untuk setiap model keyboard yang berbeda, tetapi ini OK, karena saya hanya memiliki beberapa model untuk diuji.
Sunting 1: Saya mengedit pertanyaan dengan kode skrip terbaru saya.
Edit 2: skrip diperbarui sesuai dengan saran 200_success @
list=( a b c d e f Shift_L Return )
bukan?Jawaban:
Coba ganti
grep
baris Anda denganawk
skrip yang menggelontorkan hasilnya.sumber
Pressed 56:b
muncul.awk -W interactive
. Terima kasih atas bantuan Anda, itu penting.Setelah mencoba-coba lagi, Google dan
man
, versi ini berfungsi seperti yang saya harapkan:Buat daftar Anda berdasarkan
xev
output (saya terburu-buru digunakanxev | grep keycode
, keyboard smash dan penggantian regex pada editor teks) dan menggantinya.sumber