Left Shift और Left Control को स्वैप करने के लिए setxkbmap का उपयोग करें


17

क्या इसके बजाय का उपयोग करते हुए वामपंथी Shiftऔर वामपंथियों की अदला-बदली संभव है ?CTRLsetxkbmapxmodmap

संपादित करें

मैंने Fcitx पर स्विच कर दिया है , जो मेरे कीबोर्ड लेआउट और आईबीएम की तुलना में अनुकूलित कीमैप के साथ हर तरह से बेहतर काम करता है। मैं इसकी पुरजोर सलाह देता हूँ।

जवाबों:


28

xmodmapअप्रचलित है; तो वास्तव में यह xkbउपकरण के साथ किया जाना चाहिए ।

आप जो स्वैप चाहते हैं, वह डिफ़ॉल्ट wth X11 फाइलों में शामिल नहीं है; इसलिए आपको इसे स्वयं लिखना होगा।

पृष्ठ http://madduck.net/docs/extending-xkb/ ने मुझे इसे समझने और खोजने का एक तरीका दिया।

एक फ़ाइल बनाएं ~/.xkb/keymap/mykbdजहां आप आउटपुट डालते हैं setxkbmap, यह आपकी आधार कीबोर्ड परिभाषा होगी; उदाहरण के लिए:

setxkbmap -print > ~/.xkb/keymap/mykbd

फिर, अपनी कुंजी स्वैपिंग को परिभाषित करने के लिए एक प्रतीक फ़ाइल बनाएं, इसे उदाहरण के लिए रखें ~/.xkb/symbols/myswap

वहाँ, निम्नलिखित पंक्तियाँ डालें:

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key <LCTL>  { [ Shift_L ] };
    replace key <LFSH> { [ Control_L ] };
};

फिर, ~/.xkb/keymap/mykbdफ़ाइल को संपादित करें , और xkb_symbolsजोड़ने के लिए लाइन बदलें

+myswap(swap_l_shift_ctrl)

अंत में, आप इसे xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY( -Iपैरामीटर के लिए "~" का उपयोग नहीं कर सकते हैं )। यह शायद कुछ दुर्लभ कुंजियों के लिए अपरिभाषित प्रतीकों के बारे में बहुत सारी चेतावनियाँ देगा, लेकिन आप उन्हें अनदेखा कर सकते हैं (उदाहरण के लिए, त्रुटि को पुनः निर्देशित करें:) 2> /dev/null

यदि आप एक सामान्य और अपने उल्टे ctrl / shift एक के बीच आसानी से स्वैप करना चाहते हैं; ~/.xkb/keymap/अतिरिक्त "myswap" विकल्प के बिना बस एक अन्य फ़ाइल के तहत बनाएं , और इसे लोड करें xkbcomp। आप उन्हें लोड करने के लिए दो छोटी स्क्रिप्ट बना सकते हैं।


1
धन्यवाद। यह काम करता है, लेकिन एक बार के लिए। समस्या यह है कि मैं एक इनपुट इंजन का उपयोग कर रहा हूं जिसे IBus कहा जाता है। जब भी मैंने इनपुट विधि को स्विच किया और फिर कुंजी स्ट्रोक "Ctrl + Space" के द्वारा, Left Shift और Left Control को वापस स्विच किया गया। इससे कैसे बचा जाए, इस पर कोई सुझाव।
दिन

एमएमएन, शायद आईबस खुद ही कुछ कीबोर्ड पुनर्निर्धारण करता है। xkbcomp $DISPLAY some.dumpआईबस को कॉल करने से पहले और बाद में प्रयास करें , और दो डंप का एक अंतर करें (वे पूर्ण कीबोर्ड परिभाषा हैं); आप शायद अंतर देखेंगे।
पाब्लो शरतगागा

हम्म, यह करता है, कितना कष्टप्रद। समस्या से छुटकारा पाने के लिए कोई विचार? ध्यान दें कि कमांड setxkbmap -option caps:escapeकाम करता है। IBus को स्वैप की गई Esc और Caps_Lock कुंजियों की याद है, लेकिन यह स्वैप की गई Shift और Left Control कुंजियों की अदला-बदली नहीं करता है।
दिन

शायद आईबस लॉन्च होने पर कीबोर्ड को पढ़ता है। IBus को उतारने, अपने कीबोर्ड को बदलने और फिर से लोड करने का प्रयास करें। यदि समस्या बनी रहती है, तो एक IBus विशिष्ट प्रश्न बनाया जाना चाहिए (और शायद एक बग की रिपोर्ट करें; यह कौन है, IBus को कीबोर्ड परिवर्तनों का पता लगाना चाहिए और उन्हें सम्मानित करना चाहिए)
पाब्लो सरताक्सगा

नमस्ते। क्या कोई मुझे बता सकता है कि मैं कैसे एक ही तकनीक का उपयोग करने के लिए बाईं नियंत्रण कुंजी के साथ बाईं ओर स्वैप कर सकता हूं? मैंने myswap फ़ाइल बदलने की कोशिश की: आंशिक modifier_keys xkb_symbols "swap_l_shift_ctrl" {{प्रमुख कुंजी <LCTL> {[Alt_L]}; कुंजी बदलें <LALT> {[Control_L]}; }; लेकिन यह काम नहीं किया। TIA !!!
नील गिरधारी

3

मैं पाब्लो के समाधान का उपयोग LALTकरने के लिए मैपिंग के कुछ मुद्दों में भाग गया , ऐसा प्रतीत होता है कि आपको विकल्प भी निर्धारित करने की आवश्यकता है ।Control_Lmodifier_map

मैंने एक टेम्प्लेट की प्रतिलिपि बनाई /usr/share/X11/xkb/symbols/altwin- इसके लिए देखो xkb_symbols "ctrl_alt_win"- और इसे संशोधित करके निम्नलिखित परिवर्तन निर्धारित किए हैं:

  • नियंत्रण के लिए LALT कुंजी **
  • Alt के लिए LWIN कुंजी
  • Windows कुंजी के लिए मेनू कुंजी

अंतिम ~/.xkb/symbols/myswapफ़ाइल थी:

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};

मैंने एक नया शेल खोलने पर किसी भी चेतावनी आउटपुट से बचने के -w0लिए xkbcompकमांड में जोड़ा ।

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY

** मैक और लिनक्स के बीच स्विच करना, मैं अपनी मांसपेशियों की मेमोरी के लिए मैक कीबोर्ड को अनुमानित करने के लिए लिनक्स पर दो नियंत्रण कुंजी रखना पसंद करता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.