XKB के साथ कुछ कीकोड को ओवरराइड करें


10

मैं XKB के साथ कुछ कुंजी फेरबदल करना चाहता हूं। (क्यों? एक लैपटॉप पर जहां कुछ चाबियाँ असुविधाजनक रूप से स्थित हैं।) मैं वर्तमान में xmodmap का उपयोग करता हूं:

keycode 110 = Prior
keycode 115 = Delete
keycode 112 = Next
keycode 117 = Insert
keycode 119 = End
keycode 118 = Home

इसके बजाय मैं XKB का उपयोग करना चाहता हूं और कुछ निश्चित कुंजी के लिए अलग-अलग कुंजीशब्दों को असाइन करने के बजाय कुछ भौतिक कुंजी के लिए अलग-अलग प्रतीकात्मक नाम निर्दिष्ट करना चाहता हूं। ( यही कारण है।) मैं चाहता हूं कि कीकोड 110 को भेजने के PGUPबजाय HOME, कीकोड 115 के DELEबजाय भेजने के लिए END, आदि। कॉन्फ़िगरेशन के बाकी को प्रभावित नहीं किया जाना चाहिए (इसलिए PGUPचाबी भेजना जारी रखना है Prior, आदि), और अन्य सभी चाबियाँ बनी रहें जैसे वो हे वैसे)।

मैं इन विशिष्ट कीकोड के असाइनमेंट को कैसे बदल सकता हूं? मैं एक फ़ाइल लोड करूँगा xkbcomp somefile.xkb $DISPLAY, मुझे क्या करने की आवश्यकता है somefile.xkb?

जवाबों:


14

अपने कीकोड परिवर्तन वाली फ़ाइल बनाएँ, और इसे (उदाहरण के लिए) सहेजें ~/.xkb/keycodes/local। ( keycodesनिर्देशिका हार्ड-कोडित है; आधार निर्देशिका कुछ और हो सकती है, और फ़ाइल नाम भी।) यह आपके मामले में शामिल होगा।

xkb_keycodes {
  <PGUP> = 110;
  <PGDN> = 112;
  <DELE> = 115;
  <INS> = 117;
  <HOME> = 118;
  <END> = 119;
};

इसे लोड करने के लिए, भागो

setxkbmap -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.xkb - $DISPLAY

यह आपकी वर्तमान सेटिंग्स को आउटपुट +localकरता xkb_keycodes includeहै, स्टेटमेंट में जोड़ता है , और इसे एक्सकेबी कंपाइलर में लोड करता है, जिसमें ~/.xkbशामिल पथ शामिल है। (आप अपनी फ़ाइल के अलावा कुछ नामित हैं ~/.xkb/keycodes/local, तो आप स्पष्ट रूप से परिवर्तन करने की आवश्यकता होगी +localऔर -I${HOME}/.xkb}इस तरह अन्य सभी सेटिंग को संरक्षित कर रहे हैं।)।


1
तो यह-I स्विच करने के लिए इसे पारित करने के लिए अपेक्षित पथ और तरीका है ! धन्यवाद, मैं इस पृष्ठ से यह पता लगाने में असमर्थ था।
एल। लेवेल

एक जादू की तरह काम किया! अगर यह xkb_symbols को अपडेट करना चाहता है तो काम किया है, बस इसके साथ xkb_keycodes को बदलें, काम किया
zw963

5

आप setxkbmap -print > somefile.xkbआधार के रूप में उपयोग किए जा रहे कीमैप को प्राप्त करने के लिए शुरू कर सकते हैं, और फिर xkb_keycodesअनुभाग में इच्छित प्रमुख नामों को फिर से परिभाषित कर सकते हैं जैसे:

xkb_keymap {
 xkb_keycodes {
  include "evdev+aliases(azerty)"
  // Custom <key name> = keycode
  <INS> = 117;
  <HOME> = 118;
  <PGUP> = 110;
  <DELE> = 115;
  <END> = 119;
  <PGDN> = 112;
 };
 xkb_types { include "complete"};
 xkb_compatibility { include "complete"};
 xkb_symbols { include "pc+fr+inet(evdev)"};
 xkb_geometry { include "pc(pc104)"};
};

यह चेतावनी देता है कि कुछ प्रमुख नामों को कई बार असाइन किया जाता है, लेकिन यह काम करता है क्योंकि केवल अंतिम एक गिनती (इसलिए इसमें शामिल होने के बाद कस्टम सेटिंग्स डालना महत्वपूर्ण है)। और फ़ाइल को पठनीय होने का फायदा है।

एक अन्य तरीका है कि आप फ़ाइल में उपयोग किए जाने वाले कीमैप को डंप करें: xkbcomp $DISPLAY somefile.xkbऔर उसी पंक्तियों को संशोधित करें (यह मूल्यांकन किए गए अंकों के साथ समान कीमैप है)। इस तरह से कई परिभाषाओं के लिए कोई चेतावनी नहीं है, लेकिन यह कम पठनीय है।


1
ये सभी नाम ( evdev+aliases(azerty), आदि) कहां से आ रहे हैं? मैं स्पष्ट रूप से एक सापेक्ष परिवर्तन करना चाहता हूं, न कि पूर्ण पुन: संयोजन। प्रश्नों में सूचीबद्ध 6 के अलावा अन्य कुंजी प्रभावित नहीं होनी चाहिए, वे उस स्थिति में रहना चाहिए, जब मैं कमांड जारी करता था।
गिल्स एसओ- बुराई को रोकना '

1
वे आते setxkbmap -printहैं, वे फाइलों से हैं /usr/share/X11/xkb/। मुझे लगता है कि आपको एक पूरा कीमैप देना होगा, xkbcompलेकिन मैं गलत हो सकता हूं ...
Leiaz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.