ईवेंट डिवाइस से मुख्य इनपुट कैप्चर करना और उसे मैप करना (टचपैड कुंजी को टॉगल करना बंद किया गया है)


10

मैं Ubuntu 13.10 स्थापित के साथ एक Lenovo IdeaPad योग 13 है। डिवाइस में कीबोर्ड पर "टॉगल टचपैड" बटन है ( F5)। कीबोर्ड के F*बटन उलटे होते हैं (इसलिए प्राप्त करने के लिए F5, मुझे Fn+ को दबाना होगा F5, और F5वास्तव में टॉगल कुंजी है)।

मुझे पता चला है कि बटन वास्तव में कीबोर्ड द्वारा पढ़ा जाता है (कुछ उपकरणों की तरह टचपैड के बजाय), जो कि है /dev/input/event3। इसलिए sudo input-events 3मैं उपयोग करके यह पता लगाने में सक्षम था कि बटन स्कैन कोड 190 को भेजता है:

का आउटपुट sudo lsinput:

/dev/input/event3
   bustype : BUS_I8042
   vendor  : 0x1
   product : 0x1
   version : 43907
   name    : "AT Translated Set 2 keyboard"
   phys    : "isa0060/serio0/input0"
   bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP

का आउटपुट sudo input-events 3:

23:13:03.849392: EV_MSC MSC_SCAN 190
23:13:03.849392: EV_SYN code=0 value=0
23:13:03.855413: EV_MSC MSC_SCAN 190
23:13:03.855413: EV_SYN code=0 value=0

कोई अन्य प्रोग्राम (जैसे कि xev) इसे छोड़कर पढ़ने में सक्षम नहीं लगता है input-events। क्या मेरे लैपटॉप पर टचपैड टॉगल करने के लिए इस बटन को मैप करने का कोई तरीका है? यदि हां, तो मैं ऐसा कैसे कर सकता हूं?

जवाबों:


7

जैसा कि यह पता चला है कि कर्नेल ने इसे उठाया, लेकिन शिकायत करता रहा कि यह मान्यता प्राप्त नहीं है।

किसी और के लिए यह समस्या है, या उस कुंजी को मैप करना चाहता है जो ओएस द्वारा नहीं पढ़ी जाती है, पर पढ़ें।

एक टर्मिनल खोलें और चलाएं dmesg | grep -A 1 -i setkeycodes। यह आपको इस तरह कई प्रविष्टियाँ देगा:

[    9.307463] atkbd serio0: Unknown key pressed (translated set 2, code 0xbe on isa0060/serio0).
[    9.307476] atkbd serio0: Use 'setkeycodes e03e <keycode>' to make it known.

जो हम रुचि रखते हैं वह "सेटकीकोड" के बाद हेक्साडेसिमल मान है, इस मामले में यह है e03e। यदि आपके पास इनमें से कई हैं, तो आप चला सकते हैं tail -f /var/log/kern.log। एक बार जब आप ऐसा कर लेते हैं, तो आप उस बटन को टैप कर सकते हैं जिसे आप खोज रहे हैं, और यह आपको ऊपर की तरह एक ही लाइन देगा, और फिर, हमें केवल हेक्साडेसिमल मान की आवश्यकता है। इस पर ध्यान दें।

अब दौड़ें xmodmap -pke | lessऔर उचित मानचित्रण खोजें। मेरे मामले में, मुझे अपने टच पैड को टॉगल करने के लिए इसे मैप करने की आवश्यकता थी, जिसका अर्थ है कि मैं निम्नलिखित पंक्ति में रुचि रखता था:

keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle

यदि आप जो कुछ भी आप में रुचि रखते हैं नहीं पा सकते हैं, तो @Gilles उत्तर भी पढ़ें, क्योंकि आप कस्टम मैपिंग को भी परिभाषित कर सकते हैं, फिर पढ़ें (यदि कर्नेल इसे पढ़ता है, तो आपको इसे xorg.conf में जोड़ने की आवश्यकता नहीं होगी। घ)

अब मैंने निम्नलिखित कमांड चलाई: sudo setkeycodes [hexadecimal] [keycode]तो, मेरे मामले में यह बन गया setkeycodes e03e 199:।

यदि आप काम करते हैं और / या आपके पास सही मैपिंग है, तो अब आप निम्न लाइन का उपयोग कर सकते हैं:

xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

जब आप इस कमांड को चलाते हैं, तो आपको नई खुली हुई खिड़की ( xev) पर ध्यान केंद्रित करने और कंसोल आउटपुट की जांच करने की आवश्यकता होती है। मेरे मामले में यह इस प्रकार है:

207 NoSymbol

यह स्पष्ट रूप से गलत था, जैसा कि मैंने कीकोड का अनुरोध किया था 199, इसलिए इसे मैप किया गया है XF86TouchpadToggle। मैंने xmodmap -pkeफिर से जाँच की , और देखा कि keycode 207वास्तव में मैप किया गया है NoSymbol, और मैंने देखा कि 8 का अंतर था, इसलिए मैंने setkeycodesफिर से कमांड की कोशिश की , लेकिन कुंजी को मैप किया गया है keycode 191

sudo setkeycodes e03e 191

यह पूरी तरह से काम किया।

EDIT - स्टार्ट अप पर काम करने के लिए मैंने जो समाधान प्रदान किया है वह नहीं है। मैं कल इसका पता लगाऊंगा और इस उत्तर को अपडेट करूंगा। अभी के लिए मुझे लगता है कि आप इसे मैन्युअल रूप से स्टार्ट अप पर चला सकते हैं।


1
इसे अच्छे तरीके से कैसे बनाया जाए? (यानी रीसेट / बूट-अप के बाद)
vak

4

इसके लुक से, डिवाइस एक कीबोर्ड है (सॉफ्टवेयर में "कोर" कीबोर्ड से अलग पहचाना जाता है) लेकिन एक्स सर्वर इसे नहीं सुन रहा है।

के तहत एक इनपुट अनुभाग जोड़ने का/etc/X11/xorg.conf.d प्रयास करें । अर्थात्, /etc/X11/xorg.conf.dयदि पहले से मौजूद नहीं है, तो एक निर्देशिका बनाएं और extra-keyboard-buttonsउस निर्देशिका में एक फ़ाइल बनाएँ

Section "InputClass"
    Identifier "extra-keyboard-buttons"
    Driver "kbd"
    MatchProduct "AT Translated Set 2 keyboard"
EndSection

मुझे उस MatchProductलाइन के बारे में निश्चित नहीं है ; यदि यह काम नहीं करता है, तो MatchXXXनिर्देशों के साथ फ़िडलिंग का प्रयास करें ।

एक बार जब यह फ़ाइल सही तरीके से सेट हो जाती है, तो जब आप एक्स सर्वर शुरू करते हैं, तो उसे इस कीबोर्ड से घटनाओं को संसाधित करना चाहिए, और आपको xevअन्य जगहों पर घटनाओं को देखना चाहिए । कीकोड पर ध्यान दें (मुझे यकीन नहीं है कि अगर X11 कीकोड इस मामले में हार्डवेयर कीकोड के समान होगा) और इसके लिए एक कीमिया को संबद्ध करें। आप इसे एक फ़ाइल के माध्यम से कर सकते हैं जिसे .Xmodmapआपके घर की निर्देशिका में कहा जाता है

keycode 190 = XF86_Launch5

अब आप इन कुंजियों का उपयोग करके कीबोर्ड शॉर्टकट परिभाषित कर सकते हैं ।

टचपैड को टॉगल करने के लिए, कमांड का उपयोग करें xinputxinput listइनपुट डिवाइस उपलब्ध हैं यह देखने के लिए चलाएँ और अपने टचपैड का नाम नोट करें (मैं इसे Touchpadनीचे कॉल करूँगा )। xinput list-props Touchpadइसके गुणों को सूचीबद्ध करने के लिए चलाएं ; उनमें से एक को इसके बगल वाले नंबर (जैसे 135) के साथ "डिवाइस सक्षम" कहा जाना चाहिए। निम्नलिखित स्क्रिप्ट टचपैड को टॉगल करेगी:

#!/bin/sh
device_name='Touchpad'
property=135
flipped_state=$(xinput list-props "$device_name" |
                awk "/\\($property\\)/ {print 1 - \$NF}")
xinput set-prop "$device_name" "$property" "$flipped_state"

~/bin/toggle-touchpadइसे एक फ़ाइल में सहेजें और इसे निष्पादन योग्य ( chmod +x ~/bin/toggle-touchpad) बनाएं । इसे एक कुंजी से बांधने के लिए, xbindkeys स्थापित करें और इसे निम्नलिखित पंक्तियों में डालकर अपनी स्क्रिप्ट चलाने के लिए कॉन्फ़िगर करें ~/.xbindkeysrc:

"toggle-touchpad"
  XF86_Launch5

जवाब के लिए धन्यवाद। यह दुर्भाग्य से काम नहीं किया। हालांकि मुझे यह काम कर रहा है, इसलिए अपने स्वयं के उत्तर पर एक नज़र रखने के लिए स्वतंत्र महसूस करें! :)
होश सादिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.