यहां दो लेयर्स हैं, 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 कुंजी को मैप करने का निर्णय लेता है।