macOS Sierra에서 키를 어떻게 다시 매핑합니까 (예 : Right Alt to Right Control)?


44

Karabiner 를 사용하여 Right Alt를 Right Control로 다시 매핑 하는 데 사용 했지만 (Emacs 사용자는 Alt보다 Control MUCH를 더 많이 사용합니다) Sierra로 업데이트하면이 문제가 발생했습니다. 다운 그레이드는 옵션이 아닙니다.

Sierra에서 키를 수동으로 다시 매핑하려면 어떻게합니까? 구체적으로 Right Alt를 Right Control로 다시 매핑하고 싶습니다.

답변:


37

Apple의 기술 노트 TN2450 은 키를 다시 매핑하는 방법을 설명합니다. 다음 명령을 실행하면 Right Alt가 Right Control로 다시 매핑됩니다.

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

위 명령은 오른쪽 Alt 및 오른쪽 컨트롤을 전환하지 않습니다. 그들은 모두 올바른 통제가 될 것입니다. MacBook이 있다면 외부 키보드를 연결하기 전까지는이 사실을 알 수 없습니다. 당신이 할 경우 전환 마우스 오른쪽 Alt 키와 마우스 오른쪽 버튼으로 제어, 당신은 다음과 같은 제 2 스위치 명령을 추가해야합니다.

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

기술 노트 하단의 표에는 각 키의 16 진수 값 목록이 있습니다. 위의 답변을 일반화하여 키를 전환하려면 or해당 목록의 16 진수 값과 함께해야 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

감사합니다! 이 명령으로 매핑을 기본값으로 복원하는 방법이 있습니까?
Aᴄʜᴇʀᴏɴғᴀɪʟ

1
Cᴀʟʟᴏᴅᴀᴄɪᴛʏ 어떤 키를 재설정 @, 당신은 단순히 모두 해당 키의 값으로 명령을 다시 실행 Src하고 Dst.
Steven C. Howell

다시 부팅하면 되돌립니다. 부팅 할 때마다이 명령을 다시 실행할 수 있지만이 작업을 수행하지 않는 것이 좋습니다. 이것을 영구적으로 만드는 방법이 있습니까?
firebush

2
: @firebush이 게시물이 지속적 같은 명령 할 로그인 후크를 사용하여 제안 stackoverflow.com/a/46460200/629530
firebush

1
@ StevenC.Howell 함수 수정 자의 조합은 어떻습니까? 예를 들어, \ 키보드 의 백 슬래시 는 내가 거의 사용하지 않는 Shift+Option+7간단한 것으로 대체하고 싶습니다 Option+.. 어떻게합니까? 당신의 도움을 주셔서 감사합니다.
Nanashi No Gombe

15

보다 일반적이고 사용자 친화적 인 접근 방식은 Sierra에서 작동하는 Karabiner 버전 인 Karabiner -Elements 를 사용 하는 것입니다.


2
Karabiner-Elements 빠른 업데이트 . macOS High Sierra 10.13.3 (17D102)에서 작동합니다. 올바른 Command 및 Option 키를 성공적으로 교체했습니다.
Steve Clement

타사 앱은 결코 "더 일반적인"것이 아닙니다. OS에 내장 된 작업을하는 앱으로 시스템을 혼란스럽게 만드는 이유는 무엇입니까?
Bachsau

1
@Bachsau는 키 조합, 매크로 및 프로파일 설정, 내부 및 외부 키보드에 대한 공유 및 / 또는 분할 매핑 구성 사용과 같은 다른 많은 작업을 수행 할 수 있도록하는 것이 더 일반적입니다.
Janosch

@Bachsau 각 키보드마다 다른 프로파일을 유지하므로 기능이 동일합니다. 아주 멋진 앱
AlexG

8

이것은 Steven C. Howell의 답변에 대한 부록입니다.

스칸디나비아 키보드가 장착 된 새로운 MacBook Pro가 있습니다. 이 새로운 모델에는 더 이상 Esc 키가 없으므로 중요한 핸디캡입니다.

나는 다음이 § 키 (왼쪽 위, 왼쪽 및 왼쪽 위 키)를 번역한다는 것을 발견했습니다. 오늘 전에 아무것도 사용하지 않았다고 생각합니다.

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

Apple의 문서 (Steven의 답변에서 링크 됨)에서 "미국 이외의 키보드 \ 및 |" (0x64).

"미국 이외의"키 중 일부는 일반적으로 사용중인 키보드의 레이블이 다른 키를 나타 내기 때문에 찾기가 어렵습니다. (또한 "Grave accent and tilde"는 키보드에서 생성되는 왼쪽 Shift와 z 사이의 키를 나타냅니다 <. 어떤 키가 "Non-US #~"에 해당하는지 확인할 수 없었 으며, 발견 한 후에 는 더 이상 실험하지 않았습니다. 내 키.) 실험을하려면 필요한 키를 찾을 때까지 터미널에서 스크립트를 실행 해보십시오.

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설정 을 zap하는 방법입니다 .

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

때 처음 실행 hidutil property --get UserKeyMapping은 생산

(null)

그러나이 값을 피드백하여 설정을 zap 할 수없는 것 같습니다 (또는이 입력을 수락하지만 무시합니다).

(터미널에 익숙하지 않은 경우 프롬프트 가 표시 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 팬으로서 이것은 내가 찾던 것입니다. 고맙습니다.
Philip Kearns

7

단일 키를 다시 매핑하기 만하면됩니다.

예 : Mac에서 Esc 키를 다시 매핑하는 방법

  1.  Apple 메뉴로 이동하여 "시스템 환경 설정"을 선택한 다음 "키보드"환경 설정 패널로 이동하여 "키보드"탭을 선택하십시오.

  2. 오른쪽 하단에있는 "Modifier Keys"버튼을 클릭하십시오

  3. 이스케이프 기능을 수행하기 위해 다시 매핑하고 수정하려는 키를 선택하십시오 : Caps Lock (권장 사항), Control, Option 또는 Command
  4. 하드웨어 이스케이프 키로 다시 매핑하려는 키에 해당하는 드롭 다운 목록에서 "이스케이프"를 선택한 다음 "확인"을 클릭하여 변경 사항을 설정하십시오.

참고


1
이것은이 답변에 열거 된 4 개의 키 만 제어 할 수있게합니다.
트리플 리

정확하고 매우 도움이됩니다. 누군가가 추가 키를 다시 매핑하려면
karabiner

"right ⌥"와 같은 특정 키를 지정할 수있는 방법이없는 것 같습니다. "any ⌥"에서와 같이 가장 구체적인 신호입니다.
Merchako

맞습니다. 그러나 좋은 점은 작동하는 것을 설치할 필요가 없다는 것입니다.
jasonleonhard

1

기본값을 복원하려는 경우 :

# setting it to 'null' does not work on my MBP High Sierra
hidutil property --set '{"UserKeyMapping":[]}'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.