मैं कुछ कुंजियों या उपकरणों को कैसे निकालूं?


236

मैं उबंटू में कुछ चाबियों को फिर से बनाने का तरीका खोज रहा हूं।

अर्थात

मैं बदलना चाहते हैं PgUpकरने के लिए Homeया PgDownकरने के लिए End

क्या एक अंतर्निहित कमांड या एक टूल उबंटू / GNOME में पुन: असाइन कीज़ मौजूद है?


यहाँ मेरे उत्तर की जाँच करें । यह कॉपी और एक ही जवाब पेस्ट नहीं करता है। शायद इससे आपको मदद मिलेगी।
राहुल वीरपारा

1
इकाई चरणों के लिए CTRL-P / N के लिए यहां कोई भी Emacs जैसे बाइंडिंग?
लेओ लेपोल्ड हर्ट्ज़ '

चूंकि कुछ समय xmodmapसे वंचित है! एक सिस्टम वाइड सेटिंग प्राप्त करने के लिए जिसका आपको उपयोग करना है xkb। इसलिए /usr/share/X11/xkb/symbols/अपने परिवर्तनों को वहां जोड़ने के लिए भाषा फ़ाइल को संपादित करें । देखें askubuntu.com/a/898462/34298
rubo77

जवाबों:


249

सूचना: 2013 तक, उबंटू और डेरिवेटिव अब उपयोग नहीं करते हैं xmodmap, बल्कि उपयोग करते हैं xkb। अधिक जानकारी के लिए यह उत्तर देखें । नीचे दिए गए उत्तर वर्तमान रिलीज के लिए प्रासंगिक नहीं हैं।


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

  1. टर्मिनल विंडो शुरू करें और चलाएं xev। अब यह सक्रिय है और आपको एक कुंजी दबाने के लिए इंतजार कर रहा है। फिर उस कुंजी को दबाएं जिसका व्यवहार आप बदलना चाहते हैं। यानी PgUp

  2. xevदबाया कुंजी के बारे में कुछ जानकारी उत्पादन होगा। तीसरी पंक्ति महत्वपूर्ण है। यह समान दिखना चाहिए:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    इस उदाहरण Priorमें उस व्यवहार का नाम है जिसे कुंजी को फिलहाल सौंपा गया है, नंबर कीकोड कुंजी को पहचानने के लिए आंतरिक आईडी है। अब इसे किसी अन्य कुंजी के साथ करें अर्थात PgDownयह आउटपुट दें

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    यहाँ फिर से हमारे लिए दिलचस्प हिस्सा है - keycode 115और Nextव्यवहार का नाम।

  3. अब जब आप दो कुंजी का उपयोग स्वैप करना चाहते हैं xmodmap

     xmodmap -e "keycode 110 = Next"
    

    यह आपके कीबोर्ड पर कीकोड 110 के साथ कुंजी को क्रिया में बदलता है Next। यह बहुत आसान है।

    ध्यान दें कि यदि आप जिस मैपिंग को मैप कर रहे हैं, उसका Shiftकुंजी के साथ उपयोग किए जाने पर एक अलग अर्थ होना चाहिए (उदाहरण के लिए ब्रिटिश कीबोर्ड लेआउट, Shift+ 2उद्धरण चिह्न देता है) तो आप बस पहले के बाद माध्यमिक कमांड को सूचीबद्ध कर सकते हैं। उदाहरण के लिए, यदि आप कोड 53 के साथ कुंजी को सामान्य रूप से बैकस्लैश में मैप करना चाहते हैं, लेकिन बार सिंबल में जब शिफ्ट के साथ प्रयोग किया जाता है, तो आपको निम्न करना पड़ सकता है:

     xmodmap -e "keycode 53 = backslash bar"
    

अतिरिक्त जानकारी: इन मैपिंग के अनुक्रम है Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key। एक कॉलम का उपयोग करने के लिए NoSymbol। इसके अलावा, यहां सभी की-बोर्ड की एक व्यापक सूची है।

नोट: ये परिवर्तन केवल सक्रिय X सत्र के लिए हैं और रिबूट के बाद खो जाएंगे। जब आप परिवर्तनों को स्थायी रूप से सहेजना चाहते हैं, तो आपको ऊपर दिए गए के बाद निम्नलिखित कमांड को चलाना होगा:

xmodmap -pke >~/.Xmodmap

(यह .Xmodmapआपके घर निर्देशिका में नाम से एक फ़ाइल बनाता है ~) ( )

फिर आपको .xinitrcअपने होम डायरेक्टरी में एक फाइल बनानी होगी, जहां आप कमांड डालेंगे xmodmap .Xmodmap

अब आप परिवर्तनों को तुरंत देखने के लिए कंसोल से संशोधित .Xmodmapऔर चला सकते हैं xmodmap .Xmodmap। में परिवर्तन .Xmodmapजारी रहेगा।

स्रोत: उबंटू फोर्न्स

बोनस सामान:

यदि आप जो रीमैप कर रहे हैं, उसमें एक स्थिति के आधार पर अलग-अलग व्यवहार होता है (जैसे कि संख्यात्मक कीबोर्ड में कुंजियाँ NumLock पर कैसे निर्भर होती हैं) तो आपको बस xmodmap -pmसंशोधक की सूची प्राप्त करने के लिए करना होगा और फिर करना होगा:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

उदाहरण के लिए, मान लीजिए कि आप संख्यात्मक कीबोर्ड (अधिकांश प्रोग्रामर के लिए उपयोगी) पर अल्पविराम के बजाय एक अवधि प्राप्त करना चाहते हैं, लेकिन आप चाहते हैं कि NumLock बंद होने पर "हटाएं" व्यवहार रखें।

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2क्योंकि xmodmap -pmहै कि हमें बताता है mod2है Num_Lock, अन्य नामों में कुंजी का उपयोग करके प्राप्त कर रहे हैं xev


3
xevFnमहत्वपूर्ण दबावों को पकड़ने में सक्षम नहीं है
om-nom-nom-nom

3
चयनित उत्तर उबंटू 12.10 पर मेरे लिए कैप्स-लॉक कुंजी को फिर से भरने के लिए काम नहीं आया। मैं सिस्टम सेटिंग्स -> कीबोर्ड -> लेआउट सेटिंग्स -> विकल्प पर जाकर ऐसा करने में सक्षम था, जिसमें कुंजी और वैकल्पिक व्यवहारों की एक सूची है। एकता और टर्मिनल में निर्दोष रूप से काम किया।
एलिल आइसोसाइनेट

1
यदि आपके पास कई कीबोर्ड जुड़े हैं, तो क्या ये उपकरण दूसरे कीबोर्ड पर एक ही कुंजी के बीच अंतर देखेंगे?
stommestack

1
अजीब बात है, मैंने सब कुछ किया, लेकिन मेरी कीमैपिंग फिर से शुरू होने के बाद भी रीसेट हो गई।
कोस्टा

1
मुझे नहीं लगता कि मेरे पास -eventउबंटू 12.04 में एक झंडा है। यह एक त्रुटि फेंकता है और "घटना" का उल्लेख नहीं करता है man xev
isomorphismes

20

यदि आप Shift कुंजी को स्थानांतरित करने का प्रयास कर रहे हैं, तो कुछ अतिरिक्त चरण हैं:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating

+1 एक संशोधक के लिए उन सभी का सबसे यूनिक्स-वाई उत्तर (मैंने पहले से ही ऐसा किया था, अपने iBook 2 के साथ वापस आ गया, जब मैं चाहता था कि Control_R का कार्य करने के लिए प्रवेश कुंजी थी, लेकिन विवरण भूल गया था)।
राबितो

2
लेनोवो लैपटॉप पर कीबोर्ड का उपयोग करने वाले उपयोगकर्ताओं के लिए एक महत्वपूर्ण उत्तर
Eirl aflafsson

16

मैंने अभी-अभी सोचा है .. मुझे लगता है कि आप "रीमैप" से पूरी तरह से अलग हो सकते हैं .. लेकिन मैं अपना उत्तर छोड़ दूंगा क्योंकि यह है ... (मुझे नहीं पता कि एक कुंजी को फिर से कैसे सौंपा जाए? दूसरे के रूप में व्यवहार करें)

अद्यतन : मेरे 'बाद' की पुष्टि की गई है; (मैंने गलत प्रश्न का उत्तर दिया है:) ... कृपया एनईएस के सामुदायिक विकी उत्तर (ऊपर स्वीकार किए गए) देखें।

वहाँ दो सामान्य तरीके से कर रहे हैं पुन: मैप एक महत्वपूर्ण rebind।

  • एक विशेष कार्यक्रम के लिए स्थानीय रूप से
    (एक कुंजी का उपयोग विभिन्न ऐप / विंडो में अलग-अलग चीजों के लिए किया जा सकता है)
  • विशिष्ट उपयोगकर्ता के लिए विश्व स्तर पर
    (सभी विंडो में एक कुंजी का समान कार्य होता है)

'लोकल टू ए प्रोग्राम' के तरीकों के लिए, कभी-कभी ऐप द्वारा दी जाने वाली कीबाइंडिंग को बदलने का एक तरीका होता है ... उदा।

Firefoxएक addon keyconfig कहा जाता है ... कुछ जानकारी के लिए इस MozillZine पोस्ट देखें

अधिकांश उबंटू कार्यक्रम Gnome आधारित हैं और इन Gnome एप्लिकेशन के किसी भी मेनू आइटम के लिए कीबाइंडिंग को संशोधित करने के लिए एक विशिष्ट उपयोगिता है ... इसे कहा जाता है Editable Menu Accelerator... यह एक बहुत 'स्पर्शी' उपकरण है, लेकिन काफी शक्तिशाली है। आप सक्षम कर सकते हैं। यह चल रहा है gconf-editor(टर्मिनल या Alt + F2 के माध्यम से) ... नेविगेट करने के लिए desktop- gnome- interfaceऔर चयन करें can_change_accels.... आप तब मेनू आइटम को वर्चुअल चीज़ों में बदल सकते हैं जो आपको पसंद हैं (प्रति प्रोग्राम / विंडो) ... मेरा सुझाव है कि आप अक्षम करें जैसे ही आपने वो किया जो आपको चाहिए ..

अन्यथा आप ग्लोबल हॉटकी स्थापित कर सकते हैं। मैं xbindkeys नामक एक कार्यक्रम का उपयोग करता हूंXbindkeys स्थापित करें , और मुख्य मेनू - प्राथमिकताएं, नामक एक विकल्प भी उपलब्ध हैKeyboard Shortcuts

यदि आप xbindkeys का उपयोग करते हैं, तो आपको इसे अपने "स्टार्टअप एप्लिकेशन" (मुख्य मेनू - प्राथमिकताएं) में जोड़ना होगा ... इसके अलावा (जैसा कि स्टेफानो पलाज़ो द्वारा सुझाया गया है) मैंने पहले इस पर एक जवाब में xbindkeys का अधिक विस्तृत विवरण लिखा है। Askubuntu पेज


+1, बहुत अच्छा! एक सुझाव: आपको अपने महान उत्तर को दूसरे प्रश्न से इस एक में एकीकृत करना चाहिए , शायद xbindkeys के कॉन्फ़िगरेशन प्रारूप को भी थोड़ा समझाना चाहिए।
Stefano Palazzo

1
अन्य कुंजियों को असाइन करने के बारे में बिट द्वारा नियंत्रित किया जा सकता है xdotool, मैन पेज देखें, मैंने इस समस्या को हल करने के लिए इसका उपयोग किया है
Stefano Palazzo

मैंने हाल ही में xmodmap नामक टूल के साथ एक और अप्रोच प्राप्त किया है जिसे xev नामक टूल के साथ संयोजन में रखा गया है। मुझे नहीं पता कि xmodmap और xbindkeys के बीच क्या अंतर हैं, लेकिन यह मेरे लिए बहुत अच्छा काम करता है। नामित दो को पसंद करने के लिए उपकरण के साथ कुछ सलाह? यहाँ कदम गाइड द्वारा एक बहुत ही उपयोगी कदम है जो xmodmap और xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES

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

हां, लेकिन कोई बात नहीं। जवाब भी दिलचस्प है। कदम से कदम गाइड मैं ऊपर लिंक को सही तरीके से पोस्ट किया था। इसलिए मैं इस समाधान के साथ एक संक्षिप्त उत्तर दूंगा कि अन्य उपयोगकर्ताओं के पास एक अच्छा मार्गदर्शक है। धन्यवाद फ़्रेड
NES

9

यहाँ मैंने ENTERकुंजी की मैपिंग को स्विच करने की कोशिश की है SHIFT(और इसके विपरीत):

$ uname -a

रिपोर्ट:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

रिपोर्ट:

/usr/bin/xmodmap

$ which xev

रिपोर्ट:

/usr/bin/xev

$ xev

(अगली पचास पंक्तियों को अनदेखा करें)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

क्या महत्वपूर्ण है प्रत्येक कुंजी की तीसरी पंक्ति:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

मैपिंग की समीक्षा करें:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

परिणाम सहेजें:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

जोड़ें

 xmodmap ~/.Xmodmap

$ sudo reboot

मुख्य समस्या यह थी कि उलट काम नहीं किया। ENTERकुंजी को मैप किया गया था SHIFT_Rकुंजी; लेकिन SHIFT_Rकुंजी को मैप नहीं किया गया था ENTER। जाओ पता लगाओ।


7

एक्स के स्वतंत्र रूप से वैश्विक रीमैप करने के लिए, आप इसके बजाय कंसोल-सेटअप (5) का उपयोग कर सकते हैं ।

मेरे मामले में, मैं Caps Lockकुंजी को फिर से तैयार करना चाहता था D, क्योंकि मेरा- Dतोड़ा टूट गया है :)

पहले मैंने डंपकी (1) का इस्तेमाल मैपिंग के लिए टेम्प्लेट लेने के लिए किया, -की के मामले में D, दिलचस्प बिट कीकोड 32 (मेरे कीबोर्ड पर) के लिए मैपिंग है; ध्यान दें कि grep पैटर्न में दो स्थान हैं!

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

इसके Caps Lockबजाय (मेरे कीबोर्ड पर कीकोड 58) पर लागू करने के लिए नक्शा बदलने के लिए

sed 's/32/58/' -i tempfile

अब यह पढ़ता है

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

इस रीमैप को डिफ़ॉल्ट मानचित्र में जोड़ने के लिए, इसे बस रीमैप में संलग्न करना होगा जिसमें कंसोल-सेटअप के लिए फ़ाइल शामिल है

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

और कंसोल-सेटअप को पुन: कॉन्फ़िगर किया जाना चाहिए (निम्न प्राथमिकता वाले प्रश्नों को छोड़ देना -phigh)

sudo dpkg-reconfigure console-setup -phigh

अब रीमैप को पूरा किया जाना चाहिए, और बूट पर स्वचालित रूप से लोड किया जाना चाहिए।


3

मैंने एक शॉर्टकट बनाने की कोशिश में पूरा दिन लगा दिया Ctrl+Pageup

मैंने पहली बार कोशिश की xmodmapलेकिन वह संशोधक घटनाओं को उत्पन्न नहीं कर सकता। इसलिए एक शॉर्टकट बनाना असंभव है जो Controlघटना के उदाहरण के लिए उत्पन्न करता है ।

मैं तो कोशिश की xbindkeysके साथ xmacro। इस तरह के काम करता है, लेकिन xbindkeysमेरे सिस्टम पर कुछ प्रमुख संयोजनों को पकड़ने में सक्षम नहीं है, जैसे कि Alt + ___

इसलिए मैंने आखिरकार अपने शॉर्टकट सेटअप के लिए एकता के स्वयं के कीबोर्ड शॉर्टकट -> कस्टम शॉर्टकट का उपयोग किया।

और इसके बजाय xmacro, मैंने अब xvkbdकीबोर्ड की घटनाओं को उत्पन्न करने के लिए कार्यक्रम का उपयोग किया है , लेकिन यह सिर्फ एक व्यक्तिगत प्राथमिकता है। दोनों xmacroऔर xvkbdकाम लगभग एक जैसा। एक अतिरिक्त टिप यह है कि घटनाओं को खोना नहीं है, यह सुनिश्चित करने के लिए xmacroया देरी पैरामीटर जोड़ना है xvkbd


2

मेरे लिए सॉफ्टवेयर सेंटर से AutoKey ने सबसे अच्छा काम किया। इसमें नई बाइंडिंग क्लिक जोड़ने के लिए सहज ज्ञान युक्त GUI है -> वाक्यांश और

  1. नाम जोड़ें, ठीक पर क्लिक करें
  2. "वाक्यांश सेटिंग" अनुभाग में सुनिश्चित करें कि प्रयोग करने वाला पेस्ट कीबोर्ड पर सेट है
  3. आप उपयोग करना चाहते हैं कि हॉटकी जोड़ें
  4. टेक्स्ट फ़ील्ड में कमांड जोड़ें, जैसे कि बाएँ तीर कुंजी का अनुकरण करना - यह होगा <left>(विशेष कुंजी की सूची यहाँ है )।

यह स्थापित करने के लिए Super+Cऔर Super+Vकरने के लिए perfekt काम किया Ctrl+Cऔर Ctrl+V। मैक पर VirtualBox के माध्यम से उबंटू का उपयोग करते समय बस सही समाधान
बेन

हालाँकि, यह अन्य आदेशों को अक्षम नहीं करता है जो इन शॉर्टकट्स को सुनते हैं। Super+V"सूचना सूची दिखाने के लिए" अक्षम करने के लिए "सेटिंग -> डिवाइसेस -> कीबोर्ड पर जाएं और वहां इसे अक्षम करें
बेन

@ हाँ, यह बहुत अच्छा होगा अगर यह अन्य ऐप्स के बाइंडिंग प्रदर्शित करता है, लेकिन यह केक पर नहीं है। मेरी समस्या यह है कि "एफएन" कुंजी को फिर से बनाना संभव नहीं है। मैंने उह कीबोर्ड की कोशिश करने का फैसला किया है - यह ओएस से स्वतंत्र प्रोग्राम योग्य है, यह देखेगा कि यह कैसे जाता है।
अहं

0

यदि आपको केवल एक विशेष कार्यक्रम के लिए एक कुंजी को रीमैप करने की आवश्यकता है, तो मैंने अभी इस सुविधा को hax11 में जोड़ा है

मैं बदलना चाहते हैं PgUpकरने के लिए Homeया PgDownकरने के लिए End

Hax11 के साथ ऐसा करने के लिए, प्रोग्राम की प्रोफ़ाइल कॉन्फ़िगरेशन फ़ाइल को नीचे खोलें ~/.config/hax11/profiles(उदाहरण के लिए ~/.config/hax11/profiles/usr\lib\firefox\firefox), और जोड़ें:

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