개인적으로 맥북 키보드의 기본 키맵은 꽤나 괜찮다고 생각한다. 하지만.. 키 배열이 다른 외장키보드를 연결할 경우 매우 불편해진다.

이를테면 보통 사용되는 한글 키보드의 경우 스페이스 키 왼쪽에는 CONTROL-COMMAND-OPTION 순서로 키가 매핑되는데, 이게 맥북 기본 키보드의 (FN-)CONTROL-OPTION-COMMAND와 다른 점과, 맥북 키보드의 FN키를 외장 키보드에서 누를 방법이 없는 점이 그렇다(Page up/down이야 직접 키를 누르면 된다고 하자, 화면 밝기 조절이나 볼륨 조절 등은?).

이를 해결할 방법을 찾아보니 거의 모든 답변이 키를 리매핑하는 소프트웨어를 이용하는 것이었는데, 직접 해보니 확실히 편리해지긴 했지만, 그 과정에서 약간의 삽질을 했기 때문에 -_-; 다시 헤매는 일이 없도록 내가 사용한 설정법을 간단하게 적어본다.

1. Karabiner 다운로드 및 설치(https://pqrs.org/osx/karabiner/index.html.en).

2. private.xml 위치 찾기

3. 단순한 키 변환 문법(자세히:https://pqrs.org/osx/karabiner/xml.html.en#autogen-syntax)

키를 다른 키로 바꾸기: 

<autogen>__KeyToKey__ KeyCode::CONTROL_L, KeyCode::OPTION_L</autogen>

(왼쪽 CONTROL키를 왼쪽 ALT키로 바꾼다)

키를 다른 키 조합으로 바꾸기: 

<autogen>__KeyToKey__

    KeyCode::OPTION_R,

    KeyCode::SPACE, ModifierFlag::COMMAND_L

</autogen>

(오른쪽 OPTION키를 왼쪽 COMMAND + 스페이스 키로 바꾼다)

키 조합을 다른 키로 바꾸기: 

<!-- LCTRL+LSHIFT+ARROW(R/L) ==> VOLUME UP/DOWN -->

<autogen>__KeyToConsumer__

    KeyCode::CURSOR_RIGHT, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L,

    ConsumerKeyCode::VOLUME_UP

</autogen>

<autogen>__KeyToConsumer__

    KeyCode::CURSOR_LEFT, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L,

    ConsumerKeyCode::VOLUME_DOWN

</autogen>

  *3개 이상의 키 조합의 경우에는 pipe(|)를 이용한다.

키 조합을 다른 키 조합으로 바꾸기: 

<autogen>__KeyToKey__

    KeyCode::SPACE, ModifierFlag::SHIFT_L,

    KeyCode::SPACE, ModifierFlag::COMMAND_L

</autogen>


4. 디바이스 한정 문법

외장 키보드의 키 리맵이 내장 키보드에까지 영향을 주면 불편하기 때문에 키 리맵을 외장 키보드로 입력하는 경우만으로 제한하면 편리하다.

우선 메뉴 바의 사과마크를 클릭, "이 Mac에 관해서"를 선택한 다음, "시스템 리포트"를 눌러 외장 키보드를 찾는다.

<devicevendordef>

    <vendorname>LEOPOLD</vendorname>

    <vendorid>0x0853</vendorid>

</devicevendordef>

<deviceproductdef>

    <productname>FC660C</productname>

    <productid>0x0134</productid>

</deviceproductdef>

그 다음엔 위와 같이 디바이스와 제조사의 정보를 정의한 다음, 아이템에 device_only를 추가하면 된다.

<item>

        <name>FC660C</name>

        <identifier>private.fc660c</identifier>

        <device_only>DeviceVendor::LEOPOLD,DeviceProduct::FC660C</device_only>

 

        ... (키 리맵 정보들)


</item>

5. 예시

<?xml version="1.0"?>

<root>

 

    <devicevendordef>

        <vendorname>LEOPOLD</vendorname>

        <vendorid>0x0853</vendorid>

    </devicevendordef>

 

    <devicevendordef>

        <vendorname>APPLE</vendorname>

        <vendorid>0x05ac</vendorid>

    </devicevendordef>

 

    <deviceproductdef>

        <productname>FC660C</productname>

        <productid>0x0134</productid>

    </deviceproductdef>

 

    <deviceproductdef>

        <productname>AppleInternal</productname>

        <productid>0x0273</productid>

    </deviceproductdef>

 

    <item>

        <name>FC660C</name>

        <identifier>private.fc660c</identifier>

        <device_only>DeviceVendor::LEOPOLD,DeviceProduct::FC660C</device_only>

 

        <!-- CTRL+SHIFT+ARROW ==> VOLUME UP/DOWN -->

        <autogen>__KeyToConsumer__

            KeyCode::CURSOR_RIGHT, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L,

            ConsumerKeyCode::VOLUME_UP

        </autogen>

 

        <autogen>__KeyToConsumer__

            KeyCode::CURSOR_LEFT, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L,

            ConsumerKeyCode::VOLUME_DOWN

        </autogen>

 

        <autogen>__KeyToKey__

            KeyCode::OPTION_R,

            KeyCode::SPACE, ModifierFlag::COMMAND_L

        </autogen><!-- Right Option ==> Kor./Eng. Change -->

 

        <autogen>__KeyToKey__ KeyCode::CONTROL_L, KeyCode::OPTION_L</autogen>

        <autogen>__KeyToKey__ KeyCode::OPTION_L, KeyCode::COMMAND_L</autogen>

        <autogen>__KeyToKey__ KeyCode::COMMAND_L, KeyCode::CONTROL_L</autogen>

 

    </item>

 

    <item>

        <name>Apple::Alt.To.Lang.Chng</name>

        <identifier>private.AppleLangChng</identifier>

        <device_only>DeviceVendor::APPLE,DeviceProduct::AppleInternal</device_only>

        <autogen>__KeyToKey__

            KeyCode::OPTION_R,

            KeyCode::SPACE, ModifierFlag::COMMAND_L

        </autogen><!-- Right Option ==> Kor./Eng. Change -->

    </item>

 

</root> 

*여담인데, 문법이 include를 지원하기 때문에 이 설정 역시 dotfile과 함께 git으로 관리해도 편할 것 같다.

신고