ฉันจะเปลี่ยน keymap ของอุปกรณ์เดียว (Logitech Presenter) ได้อย่างไร


20

ผู้นำเสนอ Logitech R400 ของฉันส่งรหัสสำคัญต่อไปนี้:

keycode 112 (keysym 0xff55,  Prior) [page up]
keycode 117 (keysym 0xff56,   Next) [page down]
keycode  60 (keysym   0x2e, period)
keycode  71 (keysym 0xffc2,     F5)
keycode   9 (keysym 0xff1b, Escape)

โดยทั่วไปฉันต้องการที่จะใช้พรีเซนเตอร์นี้เพื่อควบคุมระยะไกล Banshee ดังนั้นฉันต้องการที่จะทำการแมปPriorการB, NextการNและอื่น ๆ

ฉันจะเปลี่ยนคีย์แมปสำหรับอุปกรณ์นี้ได้อย่างไร (เพราะฉันไม่ต้องการทำการแมปรหัสคีย์เหล่านั้นซ้ำอีก)?


AFAIU "ตัวชี้ทาส" หมายความว่าเป็นเมาส์ไม่ใช่คีย์บอร์ด คุณไม่สามารถโหลด keymap บนเมาส์ได้ อุปกรณ์เหล่านี้มีอยู่จริงในรายการ xinput หรือไม่
Marius Gedminas

@MariusGedminas ฉันต้องผ่านอุปกรณ์ / dev / input / eventX และ event5 เป็นผู้นำเสนอดังนั้นจึงดูเหมือนว่าจะเป็น "แป้นพิมพ์" หลังจากทั้งหมด
htorque

คำตอบ:


15

ฉันไม่เคยทำแบบนั้น แต่ฉันคิดว่าคุณต้องสร้างไฟล์ keymap ใน/lib/udev/keymaps/และเพิ่มกฎสำหรับอุปกรณ์ของคุณ/lib/udev/rules.d/95-keymap.rules


รายละเอียด:

  • Keymap udev จับคู่รหัสสแกนกับรหัสคีย์ดังนั้นคุณต้องค้นหาทั้งคู่เพื่อสร้างไฟล์ keymap ในการค้นหารหัสสแกนให้ทำตามขั้นตอนต่อไปนี้แล้วกดปุ่มบนอุปกรณ์:

    sudo /lib/udev/keymap -i input/event5
    

    คุณอาจจะต้องลองตัวเลขที่แตกต่างกันสำหรับเหตุการณ์ * ผลลัพธ์ควรมีลักษณะดังนี้:

    scan code: 0x70037   key code: dot
    scan code: 0x70029   key code: esc
    scan code: 0x7003E   key code: f5
    scan code: 0x7004B   key code: pageup
    scan code: 0x7004E   key code: pagedown
    

    รายการของรหัสที่สำคัญสามารถพบได้ที่นี่

    ตอนนี้สร้างไฟล์ keymap (ฉันกำลังจัดเก็บเป็น/ lib / udev / keymaps / logitech-r400 ):

    0x70037 brightnessdown
    0x70029 brightnessup
    0x7003E brightnessdown
    0x7004B brightnessup
    0x7004E brightnessdown
    

    ไม่มีประโยชน์อะไรเลย - แค่ทดสอบเพื่อดูว่าใช้งานได้หรือไม่

  • หากต้องการทดสอบคีย์แผนที่ใหม่ชั่วคราวให้รัน:

    sudo /lib/udev/keymap input/event5 /lib/udev/keymaps/logitech-r400
    

    ซึ่งควรทำให้ได้ผลลัพธ์เช่นนี้

    Remapped scancode 0x70037 to 0xe0 (prior: 0x34)
    Remapped scancode 0x70029 to 0xe1 (prior: 0x01)
    Remapped scancode 0x7003e to 0xe0 (prior: 0x3f)
    Remapped scancode 0x7004b to 0xe1 (prior: 0x68)
    Remapped scancode 0x7004e to 0xe0 (prior: 0x6d)
    

    ตอนนี้ปุ่มควรเปลี่ยนความสว่าง

  • หากคุณต้องการทำการเปลี่ยนแปลงแบบถาวรคุณต้องเพิ่มกฎ udev เพื่อ/lib/udev/rules.d/95-keymap.rulesใช้ไฟล์ keymap กับอุปกรณ์

    1. เปิดไฟล์: gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. ที่ด้านล่างของไฟล์ แต่ก่อนถึงLABEL="keyboard_end"บรรทัดให้เพิ่ม:

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. บันทึกปิดและหลังจากรีบูตปุ่มควรเปลี่ยนความสว่าง


โอ้ฉันจะลืมเรื่องนี้ได้อย่างไร (/ lib / udev / keymaps / zepto-znote มีส่วนโดยฉัน: D) ฉันจะเพิ่มในภายหลังเกี่ยวกับวิธีทำให้คำตอบของคุณทำงานได้ดีขึ้น
htorque

แค่อยากจะเพิ่มคำตอบนี้ที่คุณสามารถเป็นศูนย์ในสิ่งที่ "eventX" /lib/udev/findkeyboardsแป้นพิมพ์ของคุณอาจจะโดยการเรียกใช้ นั่นจะแสดงรายการคีย์บอร์ดที่แนบมาทั้งหมดในปัจจุบันดังนั้นคุณไม่ต้องลองมากนัก โลจิเทค r400 ปรากฏตัวขึ้นเป็น "แป้นพิมพ์ USB: input / event11" สำหรับฉัน
jat255

คำตอบที่ดี แต่ฉันจะค้นพบ ID_VENDOR และ idProduct ที่จะใช้อย่างไร ฉันลอง/sys/class/dmi/id/sys_vendorแล้ว/sys/class/dmi/id/product_nameแต่มันใช้งานไม่ได้
PutzKipa

2
/lib/udev/keymapและ/lib/udev/findkeyboardsไม่มีใน 13.10 อีกต่อไป forum.ubuntu-fr.org/viewtopic.php?id=1395051บอกว่าจะใช้ evtest แทน
Stéphane Gourichon

6
สวัสดี @htorque คุณสามารถปรับปรุงคำตอบให้เป็นวิธีใหม่ได้หรือไม่? ใน Ubuntu เชื่อถือไฟล์เหล่านี้ไม่มีอยู่อีกต่อไป คุณเป็นคนเดียวที่ฉันเห็นบนอินเทอร์เน็ตที่มี isue เดียวกัน
londumas

4

ฉันใช้ Ubuntu 16.04 ฉันทำคู่มือที่นี่

การตรวจจับด้วย evtest

sudo evtest

ดูรายการอุปกรณ์:

/dev/input/event0:  Lid Switch
/dev/input/event1:  Power Button
/dev/input/event2:  Sleep Button
/dev/input/event3:  Power Button
/dev/input/event4:  AT Translated Set 2 keyboard
/dev/input/event5:  Video Bus
/dev/input/event6:  USB Optical Mouse
/dev/input/event7:  AlpsPS/2 ALPS DualPoint Stick
/dev/input/event8:  AlpsPS/2 ALPS DualPoint TouchPad
/dev/input/event9:  Logitech USB Receiver
/dev/input/event10: Logitech USB Receiver
/dev/input/event11: HDA Intel PCH Dock Mic
/dev/input/event12: HDA Intel PCH Headset Mic
/dev/input/event13: HDA Intel PCH Dock Line Out
/dev/input/event14: HDA Intel PCH Headphone
/dev/input/event15: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event16: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event18: Integrated Webcam
/dev/input/event19: Dell WMI hotkeys
Select the device event number [0-19]: 9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc52d version 0x111
Input device name: "Logitech USB Receiver"

รับ "Logitech USB Receiver" ตัวแรกซึ่งมีรหัสเหตุการณ์ 9

Testing ... (interrupt to exit)

ตกลงตอนนี้ต้องการให้ป้อนข้อมูล evtest เพียงคลิกที่ปุ่มรีโมท Logitech ฉันได้รับ (ง่าย):

[>] value 7003e (KEY_PRESENTATION)
[>] value 70029 (KEY_PRESENTATION)
[ ] value 70037 (KEY_DISPLAYTOGGLE)
 <  value 7004b (KEY_PAGEUP)
 >  value 7004e (KEY_PAGEDOWN)

หมายเหตุ:ฉันค้นพบหลังจากนั้นการคลิกหลายครั้งใน [>] ให้ 7003e แล้ว 70029 แล้ว 7003e เป็นต้นฉันไม่รู้ว่าทำไม

การแก้ไข udev conf

ตอนนี้เรามีรหัสป้อนข้อมูลมาดู udev conf:

sudo gedit /lib/udev/hwdb.d/60-keyboard.hwdb

ค้นหา "R400" และแทนที่งานนำเสนอและสลับการแสดงผลตามสิ่งที่คุณต้องการ, ปุ่ม playpause & stopcd arrow:

# Logitech Presenter R400
evdev:input:b0003v046DpC52D*
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"   
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"  
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

ตามที่ระบุไว้ก่อนหน้านี้เพราะ 07003e และ 070029 เป็นปุ่มเดียวกันผมให้พวกเขาเอาท์พุทเดียวกันขึ้นที่สำคัญ ค่าเริ่มต้น 7004b & 7004e ไม่ปรากฏที่นี่อาจเป็นเพราะพวกเขาเป็นอินพุต PAGEUP & PAGEDOWN ดั้งเดิมและไม่เกี่ยวข้องกับ "Logitech Presenter R400" เพิ่มของพวกเขา:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >  

นี่คือความเชื่อสุดท้ายของฉัน:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

โหลดซ้ำกฎ (ใหม่)

sudo udevadm hwdb --update

จากนั้นโดยใช้รหัสเหตุการณ์เดียวกับที่เราเลือกไว้ก่อนหน้านี่คือรหัสเหตุการณ์ 9:

sudo udevadm trigger /dev/input/event9

คุณสามารถตรวจสอบการทำแผนที่ใหม่ในเว็บเบราว์เซอร์ตัวอย่างเช่น:

$('body').on('keydown', function(e){ console.log(e.key) })

นั่นทำให้ฉัน:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight

ฉันได้ทำการปรับปรุงเล็กน้อยในคู่มือดั้งเดิมของคุณ logitech-r400-remap.md จาก GitHub โปรดเปลี่ยนหรือแก้ไขลงในหน้าเว็บ GitHub ของคุณหากคุณต้องการ (ไม่จำเป็นต้องระบุแหล่งที่มากับฉัน) คำตอบของคุณถูก downvote เนื่องจากเป็นลิงก์เพียงคำตอบในความเห็นของฉันดังนั้นฉันจึงเลิกลบ downvote
karel

ลบดาวดาวน์ออกแล้วดังนั้นตอนนี้คำตอบของคุณมีโอกาสได้รับการพิจารณาด้วยข้อดีของตัวเองเช่นคำตอบอื่น ๆ ที่นี่
karel

1
ใช้คำแนะนำของคุณ ทำงานเหมือนเครื่องราง:)
คอสตา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.