我需要检查一些笔记本电脑的键盘按键,以便尽快提高速度。
对于该特定任务,我什么都没找到,所以我的想法是一个脚本,该脚本可以读取已按下的键并知道所有键盘键,因此我可以快速对其进行重击并报告尚未按下的键。我想我可以使用showkey
or或xev
grepping输出来完成此操作:
xev | grep keysym
样本输出:
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,
可读的keyym很有用,但我希望测试键代码,因为随着修饰键的开/关(大写锁定,num锁定)它们不会改变,因此它们不愿意更改。我是bash的新手,所以我正在放一些东西。到目前为止,这是最好的结果:
#!/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
当我使用grep
它时,它仅在关闭时打印输出,xev
并且最后也不会杀死它。awk
@ 200_success的建议解决了这些问题,但是并不能立即打印输出:需要5-6次击键才能“刷新”输出。我该如何解决?
注意:我知道此脚本对于每种不同型号的键盘都需要不同的按键列表,但这没关系,因为我只有几个型号需要测试。
编辑1:我用最新的脚本代码编辑了问题。
编辑2:根据@ 200_success建议更新了脚本。
尝试用刷新其输出grep
的awk
脚本替换行。
xev | \
awk '/state 0x.*, keycode / { print $4; fflush() }' | \
while read keycode ; do
# etc.
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句