কীবোর্ড হার্ড রিম্যাপ কী?


19

আমি জোর করে কীবোর্ড কীগুলি পুনরায় তৈরি করার একটি উপায় সন্ধান করার চেষ্টা করছি।
আমি xmodmap এবং setxkbmap ব্যবহার করার চেষ্টা করেছি, তবে তারা একটি নির্দিষ্ট অ্যাপ্লিকেশনের জন্য কাজ করে না। এই জাতীয় কমান্ডগুলি অন্যান্য সাধারণ উইন্ডোড / এক্স অ্যাপ্লিকেশনগুলির জন্য কাজ করে।

আমি মনে করি অ্যাপ্লিকেশনটি কীবোর্ডের কাঁচা ডেটা পড়ছে এবং এক্স ইনপুট উপেক্ষা করছে?

সুতরাং, xmodmap এবং setxkbmap ব্যবহার না করে কী কী পুনরায় তৈরি করবেন? যদি কোনও সফ্টওয়্যার ব্যবহার করে এটি করা সম্ভব হয়।

আমি xkeycaps, xkbcomp ব্যবহার করেও চেষ্টা করেছি, কিন্তু লোডকিগুলি চেষ্টা করিনি, কারণ এটি এক্স-তে চলছে as

আমি এখানে চেষ্টা করে দেখতে পেয়েছি setkeycodes, "কার্নেল কীকোড দেওয়ার পরে বোতামটি xorg এ কাজ করা উচিত" , তবে আমি এটিও পেয়েছি যে "আপনি ইউএসবি কীবোর্ডগুলিতে 'setkeycodes' ব্যবহার করতে পারবেন না" , এটি আমার ক্ষেত্রে (আমি আগ্রহী কেউ PS2 এ এটির কাজ করে তোলে বলে আমি মনে করি যে আমি একটি অ্যাডাপ্টার ব্যবহার করতে পারি)।

এটি "কীপডগুলিতে মানচিত্র স্ক্যানকোডগুলি" বলে প্রতিশ্রুতিবদ্ধ বলে মনে হয়েছিল , তবে কয়েকটি পরীক্ষার পরে কিছুই পরিবর্তিত হয়নি, সেগুলি এখানে:
আমি ভিটি 1 তে কীকোড "36" ("জে" কী) পেয়েছি সাথে showkey
স্ক্যানকোড "7e" (কীপ্যাড "।") পেয়েছি at ভিটি 1 সাথেshowkey --scancodes

$cat >/etc/udev/hwdb.d/90-custom-keyboard.hwdb
keyboard:usb:v*p*
keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
 KEYBOARD_KEY_7e=36
$udevadm hwdb --update #updates file: /lib/udev/hwdb.bin
$udevadm trigger #should apply the changes but nothing happened
$cat /lib/udev/hwdb.bin |egrep "KEYBOARD_KEY_7e.{10}" -ao
KEYBOARD_KEY_7eleftmeta
$#that cat on hwdb.bin did not change after the commands..

Obs .: এর সাথে কাজ করে না: KEYBOARD_KEY_7e=j

কীগুলি সন্ধানের জন্য আরও কিছু বিকল্প উপায় (@ ভিনক 17 দ্বারা):
evtest /dev/input/by-id/... বা
input-kbd 3(আইডি সূচকটি ls -l /dev/input/by-id/*প্রাক্তন ইভেন্ট 3 থেকে পাওয়া যাবে)

পিএস .: * আপনি যদি নিজের পরীক্ষা করতে আগ্রহী হন তবে আবেদনের জন্য সম্পর্কিত থ্রেডটি হ'ল: http://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/ সমস্যাগুলি I একই রকম রয়েছে: কিছু কী (কেপি_ডিসিমাল, ডাউনআরো, আপআরো, রাইটআ্রো) উপেক্ষা করা হবে এবং সেখানে "0x00" একই মান সহ সমস্ত বিবেচনা করা হবে


আপডেট করা ফাইলটি হওয়া উচিত /etc/udev/hwdb.bin, নয় /lib/udev/hwdb.bin। তবে এই ফাইলটি সঠিকভাবে আপডেট করা হলেও এটি পুনরায় বুট করার পরেও আমার পক্ষে কার্যকর হয় না। ডকুমেন্টেশনে সম্ভবত কিছু অনুপস্থিত। এ সম্পর্কে: bugs.freedesktop.org/show_bug.cgi?id=82311
vinc

@ ভিঙ্ক ১17 যা সত্যিই আকর্ষণীয়, যত তাড়াতাড়ি আমি আবার চেষ্টা করতে পারি, আমি মনে করি আমাদের সেটিংস ফাইলটি খুঁজে বের করতে হবে এবং এটি অনুকরণ করার চেষ্টা করতে হবে, ধন্যবাদ!
অ্যাকোরিয়াস পাওয়ার

1
আমার সমস্যাটি এই কারণে হয়েছিল যে KEYBOARD_KEY_ লাইনগুলি এককটির পরিবর্তে 2 স্পেস দিয়ে শুরু হয়েছিল (এটি নথিভুক্ত করা হয়নি এবং আমার কোনও ত্রুটি বার্তা পাওয়া যায় নি!)। আমি আপনার জন্য জানি না, তবে আমার ইউএসবি কীবোর্ডের showkey --scancodesসাহায্যে স্ক্যানকোডগুলি ইউদেব প্রত্যাশা দেয় না (মানগুলি পৃথক হয়); input-kbdউপযোগ সঠিক scancodes দেয়।
ভিঙ্ক 17

1
evtestউপযোগ এছাড়াও আপনি সঠিক scancodes দিতে হবে: একটি কী লেখার পরে, আপনি 2 লাইন পাওয়া উচিত এবং প্রথম এক ফর্মের কিছু শেষ হওয়া উচিত code 4 (MSC_SCAN), value xxx, যেখানে xxxscancode হয়। তবে আমার কীবোর্ডের ড্রাইভারটি বগি এবং আমি যে MSC_SCANকীগুলি পুনরায় তৈরি করতে চাইছিলাম তার জন্য আমি এই লাইনটি পাই না । এজন্যই আমি ব্যবহার করেছি input-kbd, যা নির্বাচিত ডিভাইসের জন্য সমস্ত স্ক্যানকোডের তালিকা করে।
ভিঙ্ক 17

1
আমি একটি উত্তরে বিস্তারিত তথ্য পোস্ট করেছি। এখন, আমি নিশ্চিত নই যে 36 বা 7002c মান হিসাবে কাজ করে। আমি মনে করি আপনার কী কোড সনাক্তকারী দরকার need আমার উত্তর দেখুন।
ভিঙ্ক 17

উত্তর:


17

প্রথমে যে কীটি পুনরায় তৈরি করা দরকার তার স্ক্যানকোডটি সন্ধান করুন, যেমন evtestইউটিলিটি সহ। নিম্নলিখিতটির মতো একটি লাইন ( MSC_SCANএটি সহ) আউটপুট হওয়া উচিত:

Event: time 1417131619.686259, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70068

তার পরে একটি দ্বিতীয় বর্তমান কী কোড দেয়। যদি কোনও MSC_SCANলাইন আউটপুট না হয় তবে এটি কার্নেল ড্রাইভার বাগের কারণে হয় তবে স্ক্যানকোডটি এখনও input-kbdইউটিলিটির সাথে পাওয়া যায় ; evtestকী কোডটি দেওয়া উচিত ছিল, যাতে input-kbdআউটপুটে সম্পর্কিত লাইনটি খুঁজে পাওয়া সহজ হয় (যেমন ব্যবহার করে grep)।

পুনরায় তৈরি করা কীগুলির স্ক্যানকোডগুলি নির্ধারণ করা হয়ে /etc/udev/hwdb.d/98-custom-keyboard.hwdbগেলে, রিম্যাপিংস যুক্ত ফাইল তৈরি করুন । ফাইলটির শুরুতে /lib/udev/hwdb.d/60-keyboard.hwdbকিছু তথ্য দেওয়া হয়। আমার ক্ষেত্রে (যা কাজ করে), আমার কাছে রয়েছে:

evdev:input:b0003v05ACp0221*
 KEYBOARD_KEY_70035=102nd       # Left to z: backslash bar
 KEYBOARD_KEY_70064=grave       # Left to 1: grave notsign
 KEYBOARD_KEY_70068=insert      # F13: Insert

(Ud 220 এর আগে, আমাকে keyboard:usb:v05ACp0221*প্রথম লাইনের জন্য ব্যবহার করতে হয়েছিল had )

evdev:স্ট্রিং লাইন শুরুতে হতে হবে। নোট করুন যে বিক্রেতা এবং পণ্য আইডিতে বর্ণগুলি বড় আকারের হওয়া উচিত। প্রতিটি KEYBOARD_KEY_সেটিংসের ঠিক আগে একটি জায়গা থাকা উচিত (দ্রষ্টব্য: কোনও ফাঁকা স্থান নয় এমন একটি লাইন একটি ত্রুটি বার্তা দেবে, এবং দুটি স্পেস সহ একটি লাইন পুরানো উদেব সংস্করণ সহ নীরবে উপেক্ষা করা হবে)। KEYBOARD_KEY_হেক্সাডেসিমালে স্ক্যানকোড অনুসরণ করা হয় (যা উভয়ই দেয় evtestএবং যেমন input-kbdদেয়)। বৈধ মান পারেন থেকে প্রাপ্ত করা যায়নি evtestআউটপুট বা input-kbdআউটপুট, অথবা এমনকি থেকে /usr/include/linux/input.hফাইল: উদাহরণস্বরূপ, KEY_102NDদিতে হবে 102nd(সরিয়ে KEY_, যা আমি উপরে ব্যবহার করা হয় এবং যদি কম রূপান্তর)।

ফাইলটি সংরক্ষণ করার পরে, টাইপ করুন:

udevadm hwdb --update

(পুনরায়) ডাটাবেস তৈরি করতে /etc/udev/hwdb.bin(আপনি এর টাইমস্ট্যাম্পটি পরীক্ষা করতে পারেন)। তারপর,

udevadm trigger --sysname-match="event*"

অ্যাকাউন্টে নতুন সেটিংস গ্রহণ করবে। আপনি চেক করতে পারেন evtest

২০১৪ সালে মুক্তিপ্রাপ্ত উদেবের অসম্পূর্ণ / বগী তথ্য ছিল /lib/udev/hwdb.d/60-keyboard.hwdbতবে আপনি ফাইলটির সর্বশেষ বিকাশ সংস্করণ এবং / অথবা আমার বাগ রিপোর্ট এবং ডকুমেন্টেশন এবং ফাঁক দেওয়ার বিষয়ে আলোচনা করতে পারেন।

যদি এটি কাজ না করে তবে সমস্যাটি অস্থায়ীভাবে এর udevdসাথে লগের স্তর বাড়ানোর পরে খুঁজে পেতে udevadm controlপারেন (বিশদটির জন্য udevadm (8) ম্যান পৃষ্ঠা দেখুন)।

udev204 এর মতো পুরানো সংস্করণগুলির জন্য , এই পদ্ধতিটি এখনও কাজ করা উচিত।


আমি যখন udevadm কমান্ডগুলি চালিত করি, তখন ফাইলটি আপডেট হয়ে যায় /lib/udev/hwdb.bin, আমি তার সাথে দেখেছিলাম blessএবং KEYBOARD_KEY_70085এর শেষে উপস্থিত হয়। আমি মনে করি উবুন্টু 14.04 এভাবে কনফিগার করা হয়েছে (সুরক্ষিত?)। চেষ্টা করেছি udevadm control --log-priority=debuglsusb(045e: 0750) এর উপর ভিত্তি করে আমার কীবোর্ডটি এর মত হয় keyboard:usb:v045ep0750*তবে আমি এটি দিয়ে keyboard:usb:v*p*চেষ্টাও করেছি। আমার ধারণা এটি /etc/udev/hwdb.binআপডেট করা উচিত তবে এটির উপস্থিতি নেই।
কুম্ভ শক্তি

আমি এখানে পড়ার পরে এটি এমন হতে পারে যে আমি এই কমান্ডটি ব্যবহার udevadm hwdb --usr --updateকরেছিলাম, যদিও আমি ছিলাম না।
কুম্ভ শক্তি

পরে udevadm hwdb --updateআমি কপি /lib/udev/hwdb.binকরতে /etc/udev/hwdb.binএবং দৌড়ে strace udevadm trigger --sysname-match="event*"এবং ফাইল hwdb.bin(যদি এটি এই কাজ ভালো হয়) এটি দ্বারা পড়া হয়নি বলে মনে হয়।
অ্যাকোরিয়াস পাওয়ার

1
@ অ্যাকোয়ারিয়াস পাওয়ার, হ্যাঁ, উবুন্টু নির্দিষ্ট বাগ থাকতে পারে (আমি ডেবিয়ান / অস্থির ব্যবহার করছি)। করার সময় ডাটাবেসটি পড়ছে কিনা তা দেখতে udevadm trigger ..., আমার পরীক্ষাটি এখানে দেখুন । নোট করুন যে চলমান আগে udevadm trigger ..., আপনার ফাইলের পরিবর্তনের সময়টি আপডেট হয়েছে তা নিশ্চিত করা দরকার, অন্যথায় ফাইলটি পড়ার সময় অ্যাক্সেসের সময় আপডেট করা হবে না।
ভিঙ্ক 17

1
@ অ্যাকোয়ারিয়াস পাওয়ার udevadm --version: 215 (এবং udev প্যাকেজ সংস্করণ: 215-7)। ধন্যবাদ udevadm trigger ..., আপনাকে পুনরায় বুট করার দরকার নেই (যদি না আপনি সেটিংস মুছে ফেলতে চান, এএফআইএইসি)। তবে আপনি কোনও প্রভাব আছে কিনা তা দেখতে আপনি একটি রিবুট চেষ্টা করতে চাইতে পারেন।
ভিঙ্ক 17
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.