খারাপ কীবোর্ড কীগুলির জন্য আমার কয়েকটি নোটবুকগুলি পরীক্ষা করা দরকার, এবং তাই আমি যতটা সম্ভব গতি বাড়িয়ে দিতে চাই।
আমি এই নির্দিষ্ট কাজের জন্য কিছুই পাইনি, সুতরাং আমার ধারণাটি এমন একটি স্ক্রিপ্ট যা চাপা কীগুলি পড়ে এবং সমস্ত কীবোর্ড কী জানে, তাই আমি তাদের দ্রুত তাড়িত করতে পারি এবং এটি জানায় যে কোনটি এখনও চাপা নেই। আমি অনুমান করি যে আমি showkey
বা xev
এটির মাধ্যমে আউটপুট গ্রেপ করেই এটি সম্পাদন করতে পারি :
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,
পঠনযোগ্য কীসিয়ামটি বেশ কার্যকর, তবে আমি কীকোডগুলি পরীক্ষা করার জন্য আগ্রহী, কারণ তারা পরিবর্তিত কীগুলি চালু / বন্ধ করা (ক্যাপস লক, নাম লক) হিসাবে পরিবর্তিত হয় না। আমি মারতে নতুন, তাই আমি কিছু একসাথে রাখছি। এটি এখন পর্যন্ত সেরা ফলাফল:
#!/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 থেকে পরামর্শের এই সমস্যা সমাধান করা, কিন্তু এটা আউটপুট immediatelly প্রিন্ট করে না: এটি "রাঙা" হতে আউটপুট জন্য 5-6 কীস্ট্রোকগুলি লাগে। আমি কীভাবে এটি ঠিক করতে পারি?
দ্রষ্টব্য: আমি জানি যে এই স্ক্রিপ্টটির জন্য কীবোর্ডের প্রতিটি ভিন্ন মডেলের জন্য কীগুলির একটি পৃথক তালিকা প্রয়োজন হবে, তবে এটি ঠিক আছে, কারণ আমার কাছে পরীক্ষার জন্য কেবল কয়েকটি মডেল রয়েছে।
সম্পাদনা 1: আমি আমার সর্বশেষ স্ক্রিপ্ট কোড দিয়ে প্রশ্নটি সম্পাদনা করেছি।
সম্পাদনা 2: @ 200_সুকসেস পরামর্শ অনুযায়ী স্ক্রিপ্ট আপডেট হয়েছে।
list=( a b c d e f Shift_L Return )
?