उचित कार्रवाई के लिए प्रमुख कोड कैसे मैप किए जाते हैं?


18

यह जानने के लिए कि स्कैन कोड की मैपिंग को कुंजी कोड का उपयोग करके कैसे बदला जाए udev, इस प्रश्न को देखें , मैं सोच रहा था कि उन प्रमुख कोड (या यदि आप होंगे) को उचित कार्रवाई के लिए कैसे मैप किया जाए।

इसलिए, उदाहरण के लिए, यदि आप volume upअपने कीबोर्ड पर प्रेस करते हैं, तो एक स्कैन कोड भेजा जाता है जिसे बाद में volumeupकुंजी कोड में बदल दिया जाएगा । लेकिन इस कुंजी कोड को कैसे इंटरसेप्ट किया गया, वॉल्यूम बढ़ा, और उपयुक्त सूचना प्रदर्शित की गई?

मेरा अनुमान है कि कहीं एक स्क्रिप्ट को बुलाया जाना चाहिए, इसलिए मैं जानना चाहूंगा कि वे स्क्रिप्ट कहां हैं।

संपादित करें: जिन प्रमुख कोडों का मैं उल्लेख करता हूं xev, वे महत्वपूर्ण कोड रिटर्न के साथ भ्रमित नहीं होने वाले हैं , लेकिन मैं उन लोगों में भी दिलचस्पी रखता हूं;)


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

2
यह एक वैध उबंटू-विशिष्ट प्रश्न है क्योंकि जिस तरह से उबंटू इसे संभालता है वह IIRC के वर्षों में बदल गया है। यह जानने के लिए बहुत दिलचस्प है कि उबंटू में घटना का क्रम क्या है, जिसमें एक हॉटकी दबाकर उचित कार्यों को ट्रिगर किया जाता है। संभावित उद्देश्य: कस्टम ब्राइटनेस नियंत्रण , डिबगिंग हॉट प्रमुख मुद्दों आदि
gertvdijk

2
@ सेठ पुराना लगता है। एचएएल को 10.04 से बहुत पहले से हटा दिया गया है । इसमें यह भी जानकारी नहीं है कि डेस्कटॉप सूचनाएं कैसे ट्रिगर की जाती हैं।
gertvdijk

1
आज मैं wiki.ubuntu.com/Hotkeys/Troublesourcing पर आया हूं , जो कुछ अच्छे पॉइंटर्स देता है ( wiki.ubuntu.com/Hotkeys/Architecture का लिंक है जो बहुत जानकारीपूर्ण है)। मुझे लगता है कि स्टीफन ओस्टरमिलर का जवाब सही दिशा में है, लेकिन मैं उन लिपियों को ढूंढना चाहता हूं और उन्हें बदलने में सक्षम होना चाहता हूं;)
गेरहार्ड बर्गर

1
^ ^ यह जानकारी पुरानी प्रतीत होती है, यहाँ सूक्ति-सेटिंग-डेमॉन के तहत कोई कीबाइंडिंग नहीं है ... कॉम्पिज़ अनुभाग के तहत चमक के लिए बहुत सारे हिट हालांकि (मैं एकता के लिए अनुमान लगा रहा हूं?) कौन जानता है कि कैसे notify-osdकाम करता है? मुझे लगता है कि जहां चमक सूचनाएं भेजी जाती हैं ...
गेरहार्ड बर्गर

जवाबों:


6

ठीक है, यह https://help.ubuntu.com/community/MultimediaKeys पर पाया गया

जब आप अपने कीबोर्ड पर एक कुंजी मारते हैं, तो लिनक्स कर्नेल इसके लिए एक कच्चा स्केनोड उत्पन्न करता है (यदि यह असाइन किया गया है)। प्रत्येक स्कैकोड को कीकोड में मैप किया जा सकता है। यह कर्नेल स्तर पर है। X में क्वैसिंग कीज का कुल स्वतंत्र तरीका है: X, स्टार्टअप पर कर्नेल कीकोड टेबल को पढ़ता है, फिर कीकोड को उसकी स्वतंत्र कीकोड टेबल पर मैप करता है (यह कर्नेल कीकोड के समान है लेकिन अलग है :)। फिर प्रत्येक कीकोड को कीम यानि स्ट्रिंग पर मैप किया जा सकता है, जो एक कुंजी का प्रतिनिधित्व करता है या एक क्रिया का सुझाव देता है। इस प्रकार हमारी कुंजी पूरी तरह से कार्य करने के लिए, उन्हें एक कर्नेल स्कैकोड / कीकोड प्लस एक एक्स कीकोड / कीसम की आवश्यकता होती है। यह अजीब लग सकता है, लेकिन एक्स डेवलपर्स के पास कर्नेल से एक अलग कीबोर्ड मैपिंग रखने का कारण है। यह बिल्कुल मुश्किल नहीं है, बस एक काफी कठिन प्रक्रिया है।

तो कीकोड्स को कीसम की मैप किया जाता है, तो किसमिस का कहां है? मुझे इस प्रश्न का उत्तर मिला और उत्तर मिला: मुझे इन दिनों सभी X कीज़ की एक सूची कहाँ मिलती है? चूंकि हम वॉल्यूम कुंजियों के बारे में बात कर रहे हैं, यह XF86keysym.hउत्तर में उल्लिखित स्रोत-कोड में पाया जाएगा ।

मेरे कंप्यूटर पर उस फ़ाइल में मुझे वॉल्यूम के लिए निम्नलिखित मिला:

#define XF86XK_AudioLowerVolume 0x1008FF11   /* Volume control down        */
#define XF86XK_AudioMute    0x1008FF12   /* Mute sound from the system */
#define XF86XK_AudioRaiseVolume 0x1008FF13   /* Volume control up          */

अजीब ... कुछ और से अलग मान, शायद कुंजी को संभालने के लिए कई प्रणालियां हैं? http://crunchbang.org/forums/viewtopic.php?id=16656


मैं Xubuntu का उपयोग कर रहा हूं, और कुंजियों को नियंत्रित करने के लिए, मुझे मैन्युअल रूप से क्रियाओं को मैप करने की आवश्यकता है (जैसे कि मैं अपने कीबोर्ड शॉर्टकट्स को xubuntu में कैसे बदलूं? )। हालाँकि सूचनाएं स्वतंत्र लगती हैं जैसे कि वे की-प्रेस पर उठा रहे हैं और तदनुसार अभिनय कर रहे हैं, इसका मतलब यह हो सकता है कि उबंटू में अन्य कार्यक्रम इस तरह से सेट किए गए हैं, इसलिए कुंजी को स्क्रिप्ट को मैप करने की कोई आवश्यकता नहीं है।

इसलिए मुझे पूरा यकीन है कि कार्यक्रम अब कुंजी पर उठा रहे हैं (ताकि कोई स्क्रैप नहीं मिल पाए)।

Xubuntu में मुझे पल्स ऑडियो के साथ यह समस्या थी और वॉल्यूम बदलने के लिए कस्टम स्क्रिप्ट का उपयोग करते हुए, ऐसा लगता था कि पल्स म्यूट कुंजी, म्यूट कुंजी म्यूट अलसा और पल्सएडियो को इंटरसेप्ट कर रहा था , लेकिन केवल अलसा को दिलचस्प वर्कआर्ड्स से बनाया गया था।


NotifyOSD https://wiki.ubuntu.com/NotifyOSD#Volume_changes के बारे में यह देखें

यदि आप इन आरेखों को देखते हैं: https://wiki.ubuntu.com/NotifyOSD#Architecture

विशेष रूप से यह एक: यहाँ छवि विवरण दर्ज करें

यह दर्शाता है कि एक "हार्डवेयर कीज़ श्रोता" है जो प्रपत्र DBus या HAL प्राप्त करता है? यह तब "सिस्टम से दृश्य तत्व को पुनर्प्राप्त करता है" जो ध्वनि और चमक आइकन नोटिफ़-ओएसडी के स्रोत में है, और फिर वहां से बुलबुला बनाता है।


यह सब भ्रामक है, लेकिन जहां तक ​​मैं इसे समझता हूं (अब तक):

कच्चे स्कैन्कोड (पूर्व। e016)> कीकोड (पूर्व। 160)> कीसम (पूर्व। XF86AudioMute)> सूक्ति-सेटिंग्स-डेमन (पूर्व-वॉल्यूम)> डीबस संकेत> सूचना-ओएसडी (या अन्य) के लिए हार्डवेयर-की-श्रोता। कार्यक्रम सुनना)


लगता है ये कहीं मिल रहा है! शुरू से ही CW के रूप में चिह्नित किया गया था, इसलिए मुझे लगता है कि आप अभी भी सुधार कर रहे हैं? :)
gertvdijk

हां, मुझे कुछ और देखने की जरूरत है, आरेख में बहुत सारे प्रश्न चिह्न हैं।
मट्टो

क्या आपने गलती से इसे सामुदायिक विकि उत्तर में बना दिया था? हो सकता है कि इसे पूर्ववत करने के लिए एक मॉड पूछें ... ओह और उन रेखांकन सबसे अधिक होने की संभावना है, क्योंकि एचएएल लंबे समय से पदावनत है ... खैर कम से कम हम कहीं न कहीं मिल रहे हैं: डी
गेरहार्ड बर्गर


@gertvdijk मुझे पता है, लेकिन यह उन सभी अपवोट्स के लिए शर्म की बात होगी जो वे टैग करने जा रहे हैं।)
गेरहार्ड बर्गर

1

ज्यादातर मामलों में, कोई स्क्रिप्ट नहीं है जो चलाई जाती हैं। वे घटनाओं को विंडो प्रबंधक या सेटिंग्स डेमन को भेजने का कारण बनते हैं। जब आप कस्टम कुंजी बाइंडिंग कॉन्फ़िगर करते हैं, तो इस प्रक्रिया में स्क्रिप्टिंग के बारे में मुझे पता है। कस्टम कीबाइंडिंग के लिए, आप कमांड लाइन (एक्ज़ीक्यूटेबल्स या स्क्रिप्ट्स) जोड़ सकते हैं और उन्हें कुंजियों के लिए बाध्य कर सकते हैं।

कृपया इस उत्तर को देखें कि मैंने उबंटू में कीबाइंडिंग के बारे में एक प्रश्न लिखा था: GNOME कीबोर्ड शॉर्टकट कहाँ संग्रहीत हैं? मेरे पास एक स्क्रिप्ट है जो कस्टम कीबाइंडिंग सहित सभी कीबाइंडिंग का बैकअप लेती है या पुनर्स्थापित करती है। यदि आप स्क्रिप्ट चलाते हैं, तो आप देख सकते हैं कि dconf में कीबाइंडिंग कहाँ संग्रहीत हैं, और किस एप्लिकेशन को कुंजी ईवेंट के बारे में सूचित किया गया है।


फिर डेस्कटॉप सूचनाएं कैसे ट्रिगर की जाती हैं?
गेरहार्ड बर्गर

मेरा मानना ​​है कि सूक्ति सेटिंग डेमन उदाहरण के लिए वॉल्यूम और चमक के मामले में उन्हें ट्रिगर करने के लिए जिम्मेदार है।
स्टीफन ओस्टरमिलर

2
मैंने आपकी स्क्रिप्ट चलाई, लेकिन ऐसा लगता है कि सभी शॉर्टकट्स प्राप्त कर रहे हैं जिन्हें आप सिस्टम सेटिंग्स> कीबोर्ड> शॉर्टकट्स के साथ एक्सेस कर सकते हैं , मुझे उदाहरण के लिए चमक का कोई संदर्भ नहीं मिला।
गेरहार्ड बर्गर

चिल्लाने की चाबियाँ प्राप्त करने के लिए शांत स्क्रिप्ट।
मट्टो

0

उत्तर ड्राइवर्स से संबंधित है ।

ऑपरेटिंग सिस्टम के साथ बातचीत करने के लिए हर हार्डवेयर में एक ड्राइवर होना चाहिए।

Http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/ का हवाला देते हुए :

एक चालक अपने आदेश के तहत इकाई को चलाता है, प्रबंधित करता है, नियंत्रित करता है, निर्देशित करता है और निगरानी करता है । एक बस चालक एक बस के साथ क्या करता है, एक डिवाइस ड्राइवर एक माउस (कीबोर्ड), मॉनिटर, हार्ड डिस्क, वेब-कैमरा, घड़ी, और बहुत कुछ जैसे कंप्यूटर डिवाइस (कंप्यूटर से जुड़ा कोई भी हार्डवेयर) के साथ करता है।

इसके अलावा, एक "पायलट" एक व्यक्ति या यहां तक ​​कि एक व्यक्ति (उदाहरण के लिए, एयरलाइनरों में एक ऑटो-पायलट प्रणाली) द्वारा निगरानी की जाने वाली एक स्वचालित प्रणाली हो सकती है। इसी तरह, हार्डवेयर के एक विशिष्ट टुकड़े को सॉफ्टवेयर के टुकड़े (एक डिवाइस ड्राइवर) द्वारा नियंत्रित किया जा सकता है, या किसी अन्य हार्डवेयर डिवाइस द्वारा नियंत्रित किया जा सकता है, जिसे बदले में एक सॉफ्टवेयर डिवाइस ड्राइवर द्वारा प्रबंधित किया जा सकता है। बाद के मामले में, इस तरह के एक नियंत्रण उपकरण को आमतौर पर एक उपकरण नियंत्रक कहा जाता है। यह, एक उपकरण होने के नाते, अक्सर एक ड्राइवर की भी आवश्यकता होती है, जिसे आमतौर पर बस चालक के रूप में संदर्भित किया जाता है।

डिवाइस में एक उपकरण रजिस्टर होता है जो नियंत्रण / स्थिति बिट्स और डेटा बिट्स को संग्रहीत करता है। जब भी कुछ डेटा को स्थानांतरित करने की आवश्यकता होती है, तो इसे आमतौर पर डेटा बिट्स सेट करके भेजा जाता है।

इसलिए, जब भी आप अपने कीबोर्ड पर कुछ कुंजी दबाते हैं, तो रजिस्टर पर कुछ डेटा लिखा होता है। उन बिट्स को डिवाइस ड्राइवर द्वारा पढ़ा जाता है और उचित कार्रवाई की जाती है। यह संक्षिप्त व्याख्या है।

लिंक:

  • यदि आप रुचि रखते हैं, तो मेरा सुझाव है कि आप इस श्रृंखला को डिवाइस ड्राइवर्स पर पढ़ें जिसमें 17 अच्छी तरह से लिखे गए लेख हैं दूंगा linuxforu शामिल हैं : http://www.linuxforu.com/tag/linux-device-drivers-series/

  • आप USB कीबोर्ड के लिए डिवाइस ड्राइवर लिखने के निर्देश वाले विशिष्ट दस्तावेज़ पढ़ सकते हैं: http://www.emntech.com/docs/USB_KeyBoard_Driver_eMNTech.pdf

  • यदि आप लिनक्स डिवाइस ड्राइवरों के बारे में बहुत अधिक उत्साहित हैं, तो "लिनक्स डिवाइस ड्राइवर" पुस्तक पढ़ें जो कि मुफ्त में पीडीएफ के रूप में उपलब्ध है: http://lwn.net/Kernel/LDD3/


3
उह ... मुझे नहीं लगता कि ड्राइवरों को वास्तव में मेरे कीबोर्ड पर प्रेस की जाने वाली कुंजी के अर्थ की कोई धारणा है । नोटबुक में कुछ विशेष हॉटकी उपकरणों के लिए इसके लिए ड्राइवर की आवश्यकता हो सकती है - लेकिन यह नियमित मल्टीमीडिया हॉटकी जैसे "वॉल्यूम अप" को कवर नहीं करता है। इसे कर्नेल / X / DE के अधिक सामान्य क्षेत्र में कवर किया जाना चाहिए। मुझे यह भी लगता है कि लिनक्स केर्नर डिवाइस ड्राइवर प्रोग्रामिंग के बारे में संदर्भ बहुत व्यापक हैं।
gertvdijk

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