कीबोर्ड लेआउट और xmodmap का संबंध


12

मैं Xubuntu का उपयोग कर रहा हूँ। लॉगिन से पहले मैं एक कीबोर्ड लेआउट चुन सकता हूं। मैं xmodmapकुछ चाबियों को फिर से भरने के लिए उपयोग कर रहा हूं ।

मुझे दो चीजों में दिलचस्पी है:

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

जवाबों:


25

यहां दो लेयर्स हैं, KEYCODE से KEYSYM मैपिंग और KEYSYM से टेक्स्ट मैपिंग। यदि आप कर्नेल को गिनते हैं तो और भी परतें हैं, जिसमें एक कीबोर्ड से XT- स्टाइल KEYCODE या USB कीबोर्ड HID कोड पर KEYCODE को मैप करना है। एक KEYCODE एक 8-बिट अहस्ताक्षरित पूर्णांक है जो ऑपरेटिंग सिस्टम का कर्नेल X11 सर्वर से गुजरता है। यह ऑपरेटिंग सिस्टम जैसे लिनक्स और सोलारिस के बीच भिन्न हो सकता है। लिनक्स पर, ये KEYCODE आमतौर पर पुराने XT PC कीबोर्ड पर उपयोग किए जाने वाले नंबर होते हैं। AT, PS / 2, या USB कीबोर्ड वाले नए कंप्यूटर आमतौर पर जीवन को सरल बनाए रखने के लिए उन कीबोर्ड को पुराने XT कोड में मैप करते हैं।

रॉ कीबोर्ड कोड, चाहे वे एक्सटी, एटी, पीएस / 2 हों, या यूएसबी एक कीबोर्ड पर एक भौतिक स्थान का प्रतिनिधित्व करते हैं। XT कीबोर्ड केवल एक 8-बिट नंबर को प्रेस या किसी कुंजी के रिलीज पर भेजता है। एक यूएस / ब्रिटिश XT कीबोर्ड पर q कुंजी 16 नंबर को भेजती है। एक फ्रेंच कीबोर्ड पर उसी भौतिक कुंजी को लेबल किया जाता है, लेकिन यह अभी भी 16 भेजता है। यह ऑपरेटिंग सिस्टम में उच्च परतें हैं जो इसे वास्तविक अर्थ प्रदान करती हैं। जब एक XT कीबोर्ड पर कोई कुंजी जारी की जाती है, तो उसी कीकोड को प्लस 128 भेजा जाता है। इस उदाहरण के लिए, जब q दबाया जाता है, 16 भेजा जाता है, लेकिन रिलीज होने पर, संख्या 142 (16 + 128) भेजी जाती है। AT कीबोर्ड में स्कैन्कोड्स का उपयोग किया जाता है जो संख्याओं की एक श्रृंखला होती है और काफी लंबी हो सकती है। प्रमुख रिलीज़ अतिरिक्त कोड जोड़ते हैं। उदाहरण के लिए, पॉज़ के लिए स्केनोड E1, 1D, 45, E1, 9D, C5 है। डॉस, विंडोज, लिनक्स, फ्रीबीएसडी सहित अधिकांश ऑपरेटिंग सिस्टम, और BIOS सभी मैप स्कैकोड को बहुत सरल एक्सटी-स्टाइल स्कैनकोड में बदल देता है। यह नए कीबोर्ड का समर्थन करना भी आसान बनाता है जो विभिन्न कोड जैसे USB कीबोर्ड का उपयोग करते हैं जो HID कोड भेजते हैं। सभी कोड X11 से पहले ऑपरेटिंग सिस्टम द्वारा कोड के समान सुसंगत सेट पर मैप किए जाते हैं या एप्लिकेशन उन्हें देखता है।

X11 प्रक्रिया के इस भाग से अनभिज्ञ है, यह सिर्फ कर्नेल से KEYCODE प्राप्त करता है और उस KEYCODE को एक KEYSYM में बदलने के लिए अपनी स्वयं की मैपिंग लागू करता है। Xmodmap उस मैपिंग को नियंत्रित करने के लिए मानक उपकरण है। कीबोर्ड मैपिंग का अधिकांश व्यवहार विन्यास योग्य है, लेकिन कई विशेष मामले हैं जैसे कि Num Lock, Mode Switch, और Caps Lock / Shift Lock जो कि X11 में हार्ड कोडित हैं। Shift जैसे अन्य पहलू वास्तव में कॉन्फ़िगर करने योग्य हैं। मोड स्विच या न्यूम लॉक के विपरीत किसी भी कुंजी को शिफ्ट के रूप में कार्य करने के लिए मैप किया जा सकता है।

KEYCODEs ऑपरेटिंग सिस्टम के कर्नेल द्वारा भेजे गए भौतिक कुंजी का प्रतिनिधित्व करते हैं। हर KEYCODE 8 संभावित KEYSYMs के लिए मैप कर सकता है। केवल 4 का उपयोग किया जाता है और कभी-कभी 1-4 स्तर कहा जाता है। स्तर 1 उस KEYSYM को निर्दिष्ट करता है जो तब प्रिंट होता है जब कोई संशोधक सक्रिय नहीं होता है। ये अक्सर अक्षरों और अंकों को कम करते हैं। संशोधक KEYCODEs हैं जो संशोधक सक्रिय होने पर (अन्य दबाए गए या टॉगल किए गए) KEYCODE द्वारा उत्पन्न KEYSYM को संशोधित करते हैं, संशोधक कीकोड को भी Xmodmap के माध्यम से नियंत्रित किया जाता है। लेवल 2 निर्दिष्ट करता है कि शिफ्ट संशोधक दबाए जाने पर एक KEYSYM भेजा जाए। जब भी मोड स्विच KEYSYM को दबाया गया है तब स्तर 3 सक्रिय होता है। स्तर 4 सक्रिय होता है जब एक शिफ्ट कुंजी और मोड स्विच दोनों सक्रिय होते हैं।

एक बार एक KEYSYM उत्पन्न हो जाने के बाद, इसकी सीधे व्याख्या की जा सकती है, लेकिन अधिकतर इसे पाठ में बदल दिया जाएगा। सभी KEYSYM टेक्स्ट में नहीं बदलते हैं या केवल भविष्य के KEYSYM को प्रभावित कर सकते हैं। एक उदाहरण है Shift_L, बेशक, जिसका कोई पाठ प्रतिनिधित्व नहीं है, लेकिन इसमें कई KEYSYM भी हैं जो किसी अन्य वर्ण को लिखने के लिए उपयोग किए जाते हैं। मेरे सिस्टम पर उनकी एक सूची जारी है /usr/share/X11/locale/en_US.UTF-8/Compose। ऐसा ही एक उदाहरण dead_acute KEYSYM है, जिसे दबाए जाने पर, अगले KEYSYM को एक तीव्र उच्चारण पत्र में बदलने का प्रयास किया जाएगा। KEYSYMs को यूनिकोड में बदलने के लिए एक मानक मानचित्रण है

अब जब यह सब कहा जा चुका है, ध्यान दें कि Xmodmap अप्रचलित है और XKB द्वारा प्रतिस्थापित किया गया है जो कि अधिक परिष्कृत है। यह प्रभावित करता है कि कैसे KEYCODEs को KEYSYMs में मैप किया जाता है, लेकिन यह नहीं कि कैसे कर्नेल KEYCODEs उत्पन्न करता है और न ही KEYSYMs को पाठ में रूपांतरित किया जाता है या रचना की जाती है जो अभी भी समान है। XKB को Xmodmap व्यवहार को पुनर्स्थापित करने में अक्षम किया जा सकता है। इसमें Xmodmap का समर्थन करने के लिए एक संगतता परत भी है, लेकिन यह समस्या हो सकती है क्योंकि यह पूरी तरह से संगत नहीं है। एक्सकेबी नियम के तहत हैं /usr/share/X11/xkb/और बहुत अधिक परिष्कृत हैं। कहीं और कुछ अच्छे दस्तावेज हैं कि कैसे यह KEYCODEs को KEYSYMs के मानचित्रण के लिए कीबोर्ड लेआउट बनाता है।

लिनक्स कंसोल के लिए, इसमें अपने स्वयं के कीबोर्ड लेआउट हैं जो कमांड के /usr/share/keymapsसाथ संग्रहीत और लोड किए गए हैं loadkeys। जब GRUB2 सहित BIOS और पुराने बूट लोडर चरणों में, कीबोर्ड मैपिंग वह संख्या है जो BIOS कुंजी को मैप करने का निर्णय लेता है।


महान स्पष्टीकरण और नई जानकारी के लिए धन्यवाद। क्या आप जानते हैं कि बूट प्रक्रिया (अपस्टार्ट या इनस्क्रिप्ट) में कौन से एप्लिकेशन शुरू होते हैं, जो कीबोर्ड पर निर्णय लेते हैं और चरण में लॉगिन में क्या होता है, मैं लेआउट चुन सकता हूं। कौन सा प्रोग्राम इसके साथ इंटरैक्ट करता है और यह फाइलसिस्टम में कहाँ संग्रहीत है? लॉगिन xmodmap या xkb के बाद लॉगिन प्रक्रिया में चुने गए डिफ़ॉल्ट लेआउट को ओवरराइट कर देगा?
xralf

कर्नेल कीमैप, जैसा कि मैंने कहा था loadkeysकि एक init स्क्रिप्ट द्वारा लोड किया गया है। grep loadkeys /etc/init.d/*फ़ाइल को प्रकट करता है keymap.sh। X11 की खुद की कीमैपिंग है जिसे Xmodmap द्वारा Xsession स्टार्ट-अप स्क्रिप्ट में से एक परम्परागत रूप से लोड किया गया है। आजकल, XKB के बजाय Xmodmap का उपयोग करने के साथ, डिफ़ॉल्ट कीमैपिंग Xorg.conf में या तो विभिन्न Xkb विकल्पों के माध्यम से या HAL के माध्यम से सेट की जाती है। एक बार या तो Gnome या KDE प्रदर्शन प्रबंधक लोड हो जाता है, तो वे setxkbmapकमांड के माध्यम से अपना स्वयं का लेआउट लोड कर सकते हैं । उपयोगकर्ता का डेस्कटॉप वातावरण भी लॉगिन पर एक अलग लेआउट सेट कर सकता है।
पेंगुइन 35

मैं आदेश की कोशिश की grep loadkeys /etc/init.d/*और locate keymap.shऔर कुछ भी नहीं मिला था। Xorg.conf फ़ाइल भी नहीं मिली। क्या यह मेरे उबुन्टु संस्करण पर निर्भर है जो १०.०४ है?
xralf

खिड़की को किस तरह की घटना मिलेगी? KEYSYM और उसके बाद एप्लिकेशन के साथ एक घटना किस तरह से टेक्स्ट में बदल जाती है? क्या Xorg ऐप्स को KEYSYM को टेक्स्ट में बदलने के लिए IPC / RPC इंटरफ़ेस प्रदान करता है? या ऐप को शुद्ध रूप से इसे स्वयं करना है?
炸鱼 炸鱼
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.