मैं किसी एकल डिवाइस (Logitech प्रस्तुतकर्ता) के कीमैप को कैसे बदल सकता हूं?


20

मेरा लॉजिटेक 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 "गुलाम सूचक" का मतलब है कि यह एक माउस है, न कि एक कीबोर्ड। आप माउस पर कीमैप लोड नहीं कर सकते। क्या वास्तव में केवल xinput सूची में मौजूद उपकरण हैं?
मारियस गेदमिनस

@ मार्गीगेडमिनस मुझे / देव / इनपुट / ईवेंटएक्स डिवाइसेस से गुज़रना पड़ा और ईवेंट 5 प्रेजेंटर था, इसलिए यह "कीबोर्ड" प्रतीत होता है।
htorque

जवाबों:


15

मैंने ऐसा कभी नहीं किया, लेकिन मुझे लगता है कि आपको /lib/udev/keymaps/अपने डिवाइस के लिए एक कीमैप फ़ाइल बनाने और उसमें एक नियम जोड़ने की आवश्यकता है/lib/udev/rules.d/95-keymap.rules


विवरण:

  • एक udv कीमैप मैप्स कोड को प्रमुख कोड में स्कैन करता है, इसलिए आपको कीमैप फ़ाइल बनाने के लिए दोनों को खोजने की आवश्यकता है। स्कैन कोड खोजने के लिए निम्नलिखित को चलाएं और डिवाइस पर बटन दबाएं:

    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
    

    कुंजी कोड की एक सूची यहां पाई जा सकती है

    अब कीमैप फ़ाइल बनाएं (मैं इसे / 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)
    

    बटन को अब चमक को बदलना चाहिए।

  • यदि आप उस परिवर्तन को स्थायी बनाना चाहते हैं, तो आपको /lib/udev/rules.d/95-keymap.rulesडिवाइस में कीमैप फ़ाइल को लागू करने के लिए एक udv नियम जोड़ना होगा ।

    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

बस इस उत्तर को जोड़ना चाहते थे कि आप अपने कीबोर्ड को "ईवेंटएक्स" पर शून्य कर सकते हैं /lib/udev/findkeyboards। यह सभी वर्तमान में संलग्न कीबोर्ड को सूचीबद्ध करेगा ताकि आपको इतने सारे प्रयास करने की आवश्यकता न हो। लॉजिटेक आर 400 ने मेरे लिए "यूएसबी कीबोर्ड: इनपुट / इवेंट 11" के रूप में दिखाया।
जट 255

अच्छा जवाब है, लेकिन मैं उपयोग करने के लिए 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 पर मौजूद नहीं है। इसके बजाय evtest का उपयोग करने के लिए forum.ubuntu-fr.org/viewtopic.php?id=1395051 कहते हैं।
स्टीफन गौरिचोन 10

6
नमस्कार @htorque, क्या आप नए तरीके से उत्तर अपडेट कर सकते हैं? उबंटू ट्रस्टी में ये सभी फाइलें अब मौजूद नहीं हैं। आप केवल वही हैं जो मैंने नेट पर एक ही आइयूएस के साथ देखा है।
21

4

मैं उबंटू 16.04 पर हूं। मैंने यहां एक गाइड बनाया

स्पष्टवादिता से पता लगाना

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"

पहले "लॉजिटेक यूएसबी रिसीवर" को लिया, यहां इसकी इवेंट आईडी 9 है।

Testing ... (interrupt to exit)

ओके अब स्पष्ट रूप से इनपुट चाहता है, बस Logitech रिमोट बटन पर क्लिक करें, मुझे यह (सरलीकृत) मिला:

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

नोट: मुझे इसके बाद पता चला कि कई बार क्लिक करने पर [>] 7003e दे रहा था, फिर 70029, फिर 7003e, आदि। मुझे पता है क्यों।

Udv आत्मविश्वास को संशोधित करना

अब जब हमारे पास इनपुट कोड हैं, तो आइए udev conf पर एक नजर डालते हैं:

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

"R400" के लिए खोजें और अपनी इच्छानुसार प्रस्तुति और डिस्प्लेटॉगल को बदलें , playpause और stopcd arrow keys:

# 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 और 070,029 एक ही बटन हैं, मैं उन्हें एक ही आउटपुट दे दी अप कुंजी। 7004b और 7004e डिफ़ॉल्ट रूप से यहां नहीं दिखाई देते हैं, हो सकता है कि वे देशी PAGEUP और PAGEDOWN इनपुट हैं और "Logitech प्रस्तुतकर्ता 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

मैंने GitHub से आपके मूल logitech-r400-remap.md गाइड में कुछ छोटे सुधार किए हैं। कृपया बेझिझक उन्हें या तो बदलें या उन्हें अपने GitHub वेबपेज में संपादित करें यदि आप चाहें (मेरे लिए कोई भी आवश्यक नहीं है)। आपका उत्तर अस्वीकृत कर दिया गया क्योंकि यह मेरी राय में केवल एक लिंक था, इसलिए मैंने भी डाउनवोट को हटा दिया।
कारेल

डाउट्स को हटा दिया गया है, इसलिए अब आपके उत्तर में किसी अन्य उत्तर की तरह ही अपने गुणों के आधार पर विचार करने का अवसर है।
कारेल

1
अपने गाइड का इस्तेमाल किया। एक आकर्षण की तरह काम किया:)
कोस्टा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.