मैं macOS सिएरा, उदाहरण के लिए, राइट ऑल्ट टू राइट कंट्रोल की एक चाबी कैसे निकालूं?


44

मैंने करबिनर का उपयोग राइट एल्ट टू राइट कंट्रोल को रीमैप करने के लिए किया था (एक एमाक्स उपयोगकर्ता के रूप में मैं कंट्रोल म्यूच का अधिक उपयोग करता हूं कि Alt) लेकिन सिएरा को अपडेट करने ने इसे तोड़ दिया। डाउनग्रेड करना कोई विकल्प नहीं है।

मैं सिएरा में मैन्युअल रूप से रीमैप चाबियाँ कैसे करूं? मैं विशेष रूप से राइट ऑल्ट टू राइट कंट्रोल को रीमैप करना चाहूंगा।

जवाबों:


39

Apple के टेक्निकल नोट TN2450 में बताया गया है कि कैसे कीप को रिमैप किया जाता है। निम्नलिखित कमांड को चलाने से राइट ऑल्ट का रीमैप कंट्रोल होगा।

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

ध्यान दें कि उपरोक्त कमांड राइट ऑल्ट और राइट कंट्रोल को स्विच नहीं कर रहा है। वे दोनों राइट कंट्रोल होंगे। यदि आपके पास मैकबुक है, तो आप बाहरी कीबोर्ड में प्लग करने तक इस पर ध्यान नहीं देंगे। यदि आप राइट ऑल्ट और राइट कंट्रोल को स्विच करना चाहते हैं , तो आपको निम्न की तरह दूसरा स्विच कमांड जोड़ना होगा।

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e4,
      "HIDKeyboardModifierMappingDst":0x7000000e6},
     {"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

तकनीकी नोट के नीचे स्थित तालिका में प्रत्येक कुंजी के लिए हेक्स मानों की एक सूची है। किसी भी कुंजी को स्विच करने के लिए उपरोक्त उत्तर को सामान्य करने के लिए, आपको orउस सूची से एक साथ हेक्स मान प्राप्त करना होगा 0x700000000। निम्न पायथन कोड ऐसा करने का एक तरीका दर्शाता है।

In [1]: def convert(val):
   ...:     int_val = int(val, 16)
   ...:     int_ref = 0x700000000
   ...:
   ...:     return hex(int_ref | int_val)
   ...:

In [2]: r_alt = '0xE6'

In [3]: print(convert(r_alt))
0x7000000e6

अच्छा धन्यवाद! क्या इस आदेश के साथ उनकी चूक के लिए मैपिंग को पुनर्स्थापित करने का कोई तरीका है?
ᴄʜᴇʀᴏɴғᴀɪʟ

1
@ C, किसी भी कुंजी को रीसेट करने के लिए, आप बस उस कुंजी के मान के साथ फिर से कमांड चलाते हैं Srcऔर दोनों में Dst
स्टीवन सी। हॉवेल

यह रिबूट पर निर्भर करता है। मैं प्रत्येक बूट पर इस कमांड को फिर से चला सकता हूं, लेकिन मैं ऐसा नहीं करना चाहूंगा। क्या इसे स्थायी बनाने का कोई तरीका है?
फ़ायरबश

2
@firebush यह पोस्ट इस तरह की आज्ञाओं को बनाने के लिए एक लॉगिन हुक का उपयोग करने का सुझाव देती है: stackoverflow.com/a/46460200/629530
firebush

1
@ StevenC.Howell फ़ंक्शन संशोधक के संयोजन के बारे में कैसे? उदाहरण के लिए, \ मेरे कीबोर्ड में बैकवर्ड स्लैश है, Shift+Option+7जिसे मैं कुछ सरल से बदलना चाहूंगा जैसे Option+.कि मैं शायद ही उपयोग करूं। मैं उसको कैसे करू? आपकी सहायता के लिए धन्यवाद।
नानशी गोम्बे

15

एक अधिक सामान्य और उपयोगकर्ता के अनुकूल दृष्टिकोण Karabiner-Elements का उपयोग करना है , जो Karabiner का एक संस्करण है जो सिएरा पर काम करता है।


2
Karabiner-Elements पर त्वरित अपडेट । यह macOS हाई सिएरा 10.13.3 (17D102) पर काम करता है। मैंने अपने राइट कमांड और ऑप्शन कीज को सफलतापूर्वक स्वैप किया।
स्टीव क्लेमेंट

थर्ड पार्टी ऐप्स कभी भी "अधिक सामान्य" नहीं होते हैं। कोई भी अपने सिस्टम को एप्स के साथ अव्यवस्थित क्यों करेगा जो ओएस में सही तरीके से निर्मित हैं?
बछसौ

1
@ बैचसौ यह अधिक सामान्य है कि आप कई अन्य सामानों को करने की अनुमति देते हैं, जैसे कि कुंजी संयोजन, मैक्रोज़ और प्रोफाइल सेट करना, या किसी भी आंतरिक और बाहरी कीबोर्ड के लिए साझा और / या विभाजन मैपिंग कॉन्फ़िगरेशन का उपयोग करना।
Janosch

@ बैचसौ मैं अपने प्रत्येक कीबोर्ड के लिए अलग-अलग प्रोफाइल रखता हूं, इसलिए वे समान कार्य करते हैं। बहुत अच्छा अनुप्रयोग
एलेक्स

9

यह स्टीवन सी। हॉवेल के जवाब का एक परिशिष्ट है।

मेरे पास स्कैंडिनेवियाई कीबोर्ड के साथ एक नया मैकबुक प्रो है। इस नए मॉडल में अब Esc कुंजी नहीं है, जो मेरे लिए एक महत्वपूर्ण बाधा है।

मुझे पता चला कि निम्नलिखित (कुंजी (ऊपरी बाएँ, 1 के ऊपर और टैब कुंजी के ऊपर) का अनुवाद करेगा - जो मुझे नहीं लगता कि मैंने आज से पहले कभी किसी चीज़ के लिए उपयोग किया है - Esc उत्पादन करने के लिए।

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'

Apple के दस्तावेज़ीकरण (स्टीवन के उत्तर से जुड़ा हुआ) में इसे "कीबोर्ड गैर-यूएस \" और के रूप में लेबल किया गया है। (0x64)।

"गैर-यूएस" कुंजी में से कई को खोजना मुश्किल है क्योंकि वे आम तौर पर उन कुंजियों को संदर्भित करते हैं जो आपके द्वारा उपयोग किए जा रहे कीबोर्ड पर एक अलग लेबल है। (मैं यह भी पता चला है कि "ग्रेव एक्सेंट और लहरिल" बाईं पारी और z के बीच मुख्य है, जो अपने कीबोर्ड पर पैदा करता है को संदर्भित करता है <। मैं जो करने के लिए कुंजी मेल खाती है "गैर-अमेरिका की स्थापना करने में असमर्थ था #और ~" और एक बार मैंने पाया आगे प्रयोग नहीं किया मेरी कुंजी।) यदि आप प्रयोग करना चाहते हैं, तो टर्मिनल में स्क्रिप्ट चलाने का प्रयास करें जब तक आपको वह कुंजी न मिल जाए जिसकी आपको आवश्यकता है:

for ((i=1;i<=128;++i)); do
    printf '0x7000000%0x\n' "$i"
    printf '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000%0x,"HIDKeyboardModifierMappingDst":0x70000000a}]}' "$i" |
    xargs -0 hidutil property --set >/dev/null
    read -p "Type some stuff: "
    hidutil property --set '{"UserKeyMapping":[{}]}' >/dev/null
done

यह कीकोड पर लूप करता है और एक समय में एक को बदलता है, इस उम्मीद में कि आप परीक्षण के माध्यम से पा सकते हैं और एक कुंजी को त्रुटि दे सकते हैं जो आपके लिए विशेष रूप से उपयोगी नहीं है। जब आपसे यह पूछा जाए कि कुछ टाइप करने की कोशिश करें - यदि gआपको उम्मीद है कि इसके बजाय, आपको सही कुंजी कोड मिल गया है। ( 0x70000000aअगर gआपके लिए सुविधाजनक विकल्प नहीं है तो कुछ और बदलें । हो सकता है कि आप gकुंजी को फिर से तैयार करना चाहते हों ?) जब आप टाइपिंग कर रहे हों, तो अगली कुंजी पर आगे बढ़ने के लिए Enter दबाएं।

इसके लायक क्या है, लूप के अंदर अंतिम कमांड है कि आप सभी UserKeyMappingसेटिंग्स को कैसे नापते हैं:

hidutil property --set '{"UserKeyMapping":[{}]}'

जब आप शुरू में hidutil property --get UserKeyMappingइसे चलाते हैं

(null)

लेकिन ऐसा लगता है कि आप सेटिंग को वापस करने के लिए इस मूल्य को वापस नहीं कर सकते (या यों कहें कि यह स्वीकार करता है लेकिन इस इनपुट को अनदेखा करता है)।

(आप टर्मिनल से अपरिचित हैं, बस से कॉपी / पेस्ट बात forजब तक doneअपने पर bash$शीघ्र या इसी तरह की।)

के अनुसार इस संबंधित स्टैक ओवरफ़्लो सवाल आप अपने घर निर्देशिका में एक स्क्रिप्ट फ़ाइल में आदेश रखा है और अपने में जोड़ सकते हैं launchdविन्यास इस परिवर्तन को लगातार बनाने की।

मामले में कुछ पाठक अपने दम पर ऐसा करने में सहज नहीं हैं, यहाँ एक त्वरित स्क्रिप्ट है जो आपके लिए ऐसा करती है। फिर से, टर्मिनल प्रॉम्प्ट पर इसे कॉपी / पेस्ट करें।

mkdir -p "$HOME"/bin
printf '%s\n' '#!/bin/sh' \
    'hidutil property --set '"'"'{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'"'" \
    >"$HOME"/bin/userkeymapping
chmod 755 "$HOME"/bin/userkeymapping
cat<<: >"$HOME"/Library/LaunchAgents/userkeymapping.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>userkeymapping</string>
    <key>ProgramArguments</key>
    <array>
        <string>$HOME/bin/userkeymapping</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
:
launchctl load "$HOME"/Library/LaunchAgents/userkeymapping.plist

जाहिर है कि अगर आप 0x700000064स्क्रिप्ट में, या फ़ाइल में "$HOME"/bin/userkeymappingइसे बदलने की आवश्यकता से कुछ अन्य कुंजी के साथ समाप्त हो गया है , तो यदि आप पहले से ही ऊपर भाग कर रहे हैं, तो यह समाप्त होता है।


इस उत्तर के पहले संस्करण का उपयोग करने की वकालत की गई LoginHookथी लेकिन यह मेरे लिए काम नहीं कर रहा था, और stackoverflow.com/a/22872222/874188 के आधार पर मैंने launchdइसके बजाय एक दृष्टिकोण पर स्विच किया ।
ट्रिपल

एक उत्साही vi / vim प्रशंसक के रूप में यह ठीक वही है जो मैं खोज रहा था। धन्यवाद।
फिलिप कर्न्स

7

यदि आप सब करना चाहते हैं एक ही कुंजी remap है

उदाहरण: मैक पर एस्केप कीप को कैसे हटाएं

  1. To Apple मेनू पर जाएं और "सिस्टम प्राथमिकताएं" चुनें और फिर "कीबोर्ड" वरीयता पैनल पर जाएं और "कीबोर्ड" टैब चुनें

  2. निचले दाएं कोने में "संशोधक कुंजी" बटन पर क्लिक करें

  3. उस कुंजी को चुनें जिसे आप एस्केप फंक्शन करने के लिए रीमैप और संशोधित करना चाहते हैं: कैप्स लॉक (हमारी सिफारिश), नियंत्रण, विकल्प, या कमांड
  4. ड्रॉप कुंजी से उसी "एस्केप" का चयन करें जिसे आप हार्डवेयर एस्केप कुंजी के रूप में रीमैप करना चाहते हैं, फिर परिवर्तन को सेट करने के लिए "ओके" पर क्लिक करें।

संदर्भ


2
यह केवल आपको उन चार कुंजियों पर नियंत्रण देता है जो इस उत्तर में संलग्न हैं।
tripleee

सही, और बहुत मददगार। यदि कोई अतिरिक्त चाबियों को फिर से तैयार करना चाहता है, तो करबिनर पर विचार करें
जसोनलोनहार्ड

ऐसा लगता है कि किसी विशिष्ट कुंजी को निर्दिष्ट करने का कोई तरीका नहीं है, जैसे "दाएं", या तो। सबसे विशिष्ट जिसे आप प्राप्त कर सकते हैं, वह संकेत है, जैसा कि "किसी भी" में है।
मर्चको

सही है, लेकिन अच्छा हिस्सा यह है कि आपको कुछ भी स्थापित करने की ज़रूरत नहीं है, यह सिर्फ काम करता है।
जस्सोनलोंहार्ड

0

इस मामले में कि आप चूक को बहाल करना चाहते हैं:

# setting it to 'null' does not work on my MBP High Sierra
hidutil property --set '{"UserKeyMapping":[]}'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.