ขอบคุณทุกคน
ฉันใช้เวลาหลายวันในการหาทางออก ในที่สุดฉันก็พบวิธีที่ถูกต้อง
อ้างอิง
แมปรหัสสแกนกับรหัสคีย์
พื้นหลัง
เวอร์ชัน 11 ของโปรโตคอล X รองรับรหัสคีย์แบบไบต์เดี่ยวเท่านั้น ดังนั้นรหัสคีย์ที่สูงกว่า 255 จะถูกละเว้น จนถึงตอนนี้ Ubuntu 20.04 LTS ยังคงใช้โปรโตคอล X เวอร์ชัน 11
แป้นพิมพ์รีโมต G7BTS ของฉันมีปุ่ม âOKâ ปุ่มนี้มีรหัสคีย์ 353 ภายใน âxevâ จะไม่มีอะไรเกิดขึ้นเมื่อกดปุ่มนี้
สารละลาย
โดยย่อ วิธีแก้ไขคือสร้างไฟล์การกำหนดค่า hwdb ซึ่งใช้เพื่อรีแมปคีย์บางคีย์กับคีย์อื่น
อูเดฟ
udev มีฟังก์ชันในตัวที่เรียกว่า hwdb เพื่อรักษาดัชนีฐานข้อมูลฮาร์ดแวร์ใน /etc/udev/hwdb.bin ฐานข้อมูลรวบรวมจากไฟล์ที่มีนามสกุล .hwdb ซึ่งอยู่ในไดเร็กทอรี /usr/lib/udev/hwdb.d/, /run/udev/hwdb.d/ และ /etc/udev/hwdb.d/ ไฟล์การแม็พ scancodes-to-keycodes เริ่มต้นคือ /usr/lib/udev/hwdb.d/60-keyboard.hwdb
อุปกรณ์อินพุตทั่วไป (รวมถึงแป้นพิมพ์ USB) ที่ระบุโดย modalias ของเคอร์เนล usb:
evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-
โดยที่ และ คือผู้จำหน่ายตัวพิมพ์ใหญ่ฐานสิบหก 4 หลัก รหัสผลิตภัณฑ์และเวอร์ชัน
วิธีค้นหารหัสเหล่านั้นเป็นกุญแจสำคัญ
ติดตั้งฮาร์ดอินโฟ
sudo apt ติดตั้ง hardinfo
ซอฟต์แวร์ â System Profiler â Input Devices â G7BTS Comsumer Control
ข้อมูลอุปกรณ์
ชื่อ G7BTS Comsumer Control
พิมพ์แป้นพิมพ์
รถเมล์ 0x0005
เวนเดอร์ 0x045e
สินค้า 0x0041
เวอร์ชัน 0x0300
สิ่งนำเข้าอีกอย่างคือการรับรหัสสแกนของปุ่ม âOKâ
ติดตั้ง evtest
sudo apt-get ติดตั้ง evtest
sudo evtest
ไม่ได้ระบุอุปกรณ์ กำลังพยายามสแกน /dev/input/event* ทั้งหมด
อุปกรณ์ที่มี:
/dev/input/event0: สวิตช์ฝาปิด
/dev/input/event1: ปุ่มสลีป
/dev/input/event2: ปุ่มเปิดปิด
/dev/input/event3: แป้นพิมพ์ AT Translated Set 2
/dev/input/event4: SynPS/2 Synaptics ทัชแพด
/dev/input/event5: TPPS/2 IBM TrackPoint
/dev/input/event6: ปุ่มพิเศษของ ThinkPad
/dev/input/event7: บัสวิดีโอ
/dev/input/event8: รวมกล้อง: รวม C
/dev/input/event9: แป้นพิมพ์ G7BTS
/dev/input/event10: เมาส์ G7BTS
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: การควบคุมระบบ G7BTS
/dev/input/event13: ไมค์ HDA Intel PCH
/dev/input/event14: HDA Intel PCH Dock Mic
/dev/input/event15: หูฟัง HDA Intel PCH
/dev/input/event16: หูฟัง HDA Intel PCH Dock
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event11: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event19: HDA Intel PCH HDMI/DP,pcm=8
เลือกหมายเลขกิจกรรมของอุปกรณ์ [0-19]: ^C
ให้ความสนใจกับ â/dev/input/event11â
sudo evtest /dev/input/event11
จากนั้นกดปุ่ม âOKâ และผลลัพธ์จะอยู่ด้านล่าง
เหตุการณ์: เวลา 1640238746.775220 ชนิด 4 (EV_MSC) รหัส 4 (MSC_SCAN) ค่า c0041
เหตุการณ์: เวลา 1640238746.775220 ประเภท 1 (EV_KEY) รหัส 353 (KEY_SELECT) ค่า 0
เหตุการณ์: เวลา 1640238746.775220, -------------- SYN_REPORT ------------
ให้ความสนใจกับ âvalue c0041â ค่านี้ c0041 เป็นรหัสสแกนของปุ่ม âOKâ
สร้างไฟล์ hwdb
ตอนนี้เรามีรหัสและรหัสสแกนที่เราต้องการแล้ว ใส่ลงใน âอุปกรณ์อินพุตทั่วไป (เช่น แป้นพิมพ์ USB) ที่ระบุโดย usb kernel modaliasâ ด้านบน และสุดท้าย เราก็มีไฟล์การกำหนดค่า G7BTS.hwdb ด้านล่าง:
evdev:อินพุต:b0005v045Ep0041e0300*
KEYBOARD_KEY_c0041=เข้า
ในบริบทนี้ ปุ่ม âOKâ จะแมปเข้ากับปุ่ม âenterâ คุณสามารถจับคู่กับคีย์ใดก็ได้ที่คุณต้องการ
วางไฟล์ไปยังปลายทาง
sudo mv G7BTS.hwdb /etc/udev/hwdb.d/
อัปเดต
sudo udevadm hwdb -- อัปเดต
sudo udevadm ทริกเกอร์ --verbose
ทดสอบ
sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'
ผลลัพธ์คือ
KEYBOARD_KEY_c0041=เข้า
ตอนจบ
นั่นคือขั้นตอนทั้งหมดในการรีแมปคีย์ การรีแมปเหล่านั้นยังคงใช้งานได้หลังจากรีบูต