स्वैप पूरी और सुपर


27

मेरे पास एक मैकबुक एयर है जो लिनक्स चलाता है। मैं कीबोर्ड के दोनों किनारों में एक दूसरे के साथ चाबियाँ altऔर superचाबियाँ स्वैप करना चाहता हूं ।

मैं इसे cli टूल्स के साथ कैसे करूँ?

अद्यतन करें

द्रविण स्लोअन के जवाब के बाद मैंने निम्नलिखित प्रयोग किया:

keycode 64 = Alt_L
keycode 133 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

keycode 108 = Alt_R
keycode 134 = Super_R
remove Mod1 = Alt_R
remove Mod4 = Super_R
add Mod1 = Super_R
add Mod4 = Alt_R

1
अजीब तरह से, मेरे लिए चीजें (मैक एयर) के लिए काम किया जब मैंने केवल पहली 6 लाइनें लीं और न कि एक बार एक फाइल में बॉटम और उस पर xmobmap फ़ाइल चलाई। नीचे की पंक्तियों के साथ मेरी त्रुटियाँ थीं।
सिंह उफिम्त्सेव

जवाबों:


20

इसे प्राप्त करने का एक तरीका है xmodmap। आप xevमहत्वपूर्ण घटनाओं को प्राप्त करने के लिए दौड़ सकते हैं । चलाने पर xevएक बॉक्स दिखाई देना चाहिए और आप इसे केंद्रित कर सकते हैं और उन कुंजियों को दबा सकते हैं जिन्हें आप स्वैप करना चाहते हैं। यह Altकुंजी के लिए समान विवरण का उत्पादन करना चाहिए :

KeyPress event, serial 28, synthetic NO, window 0x8800001,
  root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
  state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

मैं एक पीसी पर हूं, और "कमांड की" नहीं है, लेकिन बराबर "विंडोज की" है, और एक्सवी देता है:

KeyPress event, serial 28, synthetic NO, window 0x8000001,
  root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
  state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

क्योंकि xmodmap का कोई विचार नहीं है state, और आसानी से कुंजी मैपिंग को तोड़ सकता है, मेरा सुझाव है कि आप एक:

xmodmap -pke > defaults

फिर हम एक xmodmap फ़ाइल बनाते हैं:

keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

ध्यान दें कि मैं कैसे कीकोड का उपयोग कर रहा हूं जो xevवापस आ गया है। यहाँ भी मैं केवल लेफ्ट सुपर और ऑल्ट कीज़ की जगह ले रहा हूँ (और अपने पुराने बर्ताव को सही छोड़ रहा हूँ)। तब हम बस xmodmapइन कुंजियों को सेट करने के लिए दौड़ सकते हैं :

$ xmodmap -v modmap.file
! modmap:
! 1:  keycode 14 = Alt_L
        keycode 0xe = Alt_L
! 2:  keycode 93 = Super_L
        keycode 0x5d = Super_L
! 3:  remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
        remove mod1 =  0xe
! 4:  remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
        remove mod4 =  0x5d
! 5:  add Mod1 = Super_L
        add mod1 = Super_L
! 6:  add Mod4 = Alt_L
        add mod4 = Alt_L
!
! executing work queue
!
        keycode 0xe = Alt_L
        keycode 0x5d = Super_L
        remove mod1 =  0xe
        remove mod4 =  0x5d
        add mod1 = Super_L
        add mod4 = Alt_L

आप -vमौन चल के लिए (क्रिया) स्विच के बिना चला सकते हैं , लेकिन मुझे यह उपयोगी लगता है यदि आपने अपने मॉडमैप फ़ाइल में गलतियाँ की हैं। अगर चीजें गड़बड़ होती हैं, तो बस अपनी चूक फिर से करें:

xmodmap defaults

मॉडमैप अक्सर X के प्रारंभ में चलाया जाता है, इसलिए यदि आप अपने मॉडमैप आदेशों को डालते हैं, तो आप इनको डिफ़ॉल्ट के रूप में लागू कर सकते हैं ~/.xmodmaprc


क्या ऐसा करने का कोई तरीका है setxkbmap? मैं इसके setxkbmap -option compose:raltसाथ विकल्प का उपयोग करना चाहूंगा ।

मैंने दूसरे उत्तर में swap_opt_cmd समाधान का उपयोग किया है, लेकिन यह एक उत्थान के योग्य है क्योंकि यह बहुत गहन और स्पष्ट रूप से लिखा गया है। ब्रावो, सर।
जॉन फ्रैंकलिन

धन्यवाद। मुझे xmodmap गड़बड़ मिला और सराहना करें कि क्या आप askubuntu.com/questions/1026246/…
टिम

26

यदि आप इसे Apple कीबोर्ड पर करना चाहते हैं, तो इसे आज़माएँ:

echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

लिनक्स के निचले संस्करण के लिए काम करने के लिए आप इसे आज़मा सकते हैं: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html


हालाँकि अन्य उत्तर भी काम करते हैं, यह मैक बुक्स का समाधान है; एक जादू की तरह काम किया!
सिनिस्टरस्टुफ

1
यह डिफ़ॉल्ट क्यों नहीं है ?!
जॉन फ्रैंकलिन

मेरा इस फ़ाइल में कोई लेखन-अभिगम नहीं है। :-(
itmuckel

1
@ Micha90 - आप का उपयोग करने की आवश्यकता है tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin

2
Xmodmap को कॉन्फ़िगर करने में एक घंटा खर्च करें। यह काम करता हैं। फिर दूसरा उत्तर देखें ...
बिल्लो

17

यदि आप केवल बाईं ओर की अदला-बदली करना चाहते हैं और सुपर कुंजी आपके टर्मिनल में कमांड निष्पादित करती है:

setxkbmap -option altwin:swap_alt_win

केवल उपयोग करने के लिए डिफ़ॉल्ट व्यवहार को पुनर्स्थापित करने के लिए:

setxkbmap -option

नोट: यह अस्थायी है। यदि आप प्रभाव को स्थायी रूप से अपनी स्टार्टअप फ़ाइल में जोड़ना चाहते हैं।


4
यह स्वीकृत समाधान होना चाहिए, क्योंकि यह साफ है और निर्मित फ़ंक्शन का उपयोग करता है। आपको उल्लेख करना चाहिए, कि डिफ़ॉल्ट व्यवहार को पुनर्स्थापित करने के लिए जिसे आप अभी उपयोग कर सकते हैं setxkbmap -option। और अगर आप केवल बाईं ऊँचाई और सुपर की को स्वैप करना चाहते हैं , तो इस कमांड का उपयोग करें setxkbmap -option altwin:swap_lalt_lwin:।
एरिक

1
मेरे पास लॉजिटेक कीबोर्ड है और इसने मेरी विंडोज़ की (सुपर .0) को बाईं ओर की Alt (Alt_L) के साथ स्विच करने का काम किया। धन्यवाद!
डेरेक

4
$ xmodmap -pke

इस बात पर ध्यान दें कि किन-किन कीकोड्स में परमानेंट और सुपर बाउंड हैं, फिर अपने होम फोल्डर में एक नई फाइल .xmodmaprc खोलें / बनाएं। उदाहरण के लिए, मेरी सुपर / ऑल्ट कीज इस तरह बंधी हैं

keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R Alt_R Meta_R
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R

लेकिन चाबियों को स्वैप करने के लिए, आप निम्न को .xmodmaprc में डालेंगे

keycode  64 = Super_L NoSymbol Super_L
keycode 108 = Super_R NoSymbol Super_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R

कीकोड / भूमिका संघों को अधिलेखित करना ... सरल, और यह काम करता है। आश्चर्य है कि अगर remove ...समाधान की तुलना में कोई कमी है ।
रिंग Ring

याद रखें कि आप grepआउटपुट को फ़िल्टर करने के लिए उपयोग कर सकते हैं ताकि आपको xmodmap -pke | grep -i "super\|alt"यह देखने में आसानी हो कि आपको क्या चाहिए।
बेंजामिन आर

0

यदि आप मेरे जैसे दुर्भाग्यशाली लोगों में से एक हैं जो सही Ctrl के साथ सही Alt स्विच करने के लिए xmodmap नहीं पा सके, तो शायद यह आपकी मदद करेगा।

यदि आप दाएं Alt और e दबाते हैं और आपको é मिलता है तो यह समाधान आपके लिए है (सुधार की आवश्यकता है)।

इसे टर्मिनल में चलाएं (xev के साथ अपने कीकोड की जांच करें):

xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"

फिर इस कोड को अपने .Xmodmap में डालें:

remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

यह कोड Alt_R के लिए आपकी Alt_Gr कुंजी सेट करता है, और फिर यह Alt_r को Ctrl_R के साथ स्वैप करता है।

यदि आप चाहते हैं कि आप लॉगआउट करने के बाद भी बने रहें, तो अपनी स्टार्टअप शेल फ़ाइलों में से किसी में भी निम्न कमांड डालें, उदाहरण के लिए ~।

if [ -f $HOME/.Xmodmap ]; then
  xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"
  /usr/bin/xmodmap $HOME/.Xmodmap
fi

सूत्रों: सवाल 1 सवाल 2

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