삶은계란 (Diary)/일상

레오폴드 750RBT 맥에서 써보기

걔랑계란 2022. 2. 24. 00:25

요약


어떤 식으로 작동되는 건지 궁금하다면 글을 읽어 보시길 바란다.
수정에는 어느 정도의 정보가 필요하니 글을 읽어 보시길 바란다.
그것도 귀찮다면 일단 파일을 올려 드린다.

 

 

hidutil key remapping generator

 

hidutil-generator.netlify.app

직접 수정하는 게 귀찮다면 해당 사이트의 도움을 받는 것도 좋다.

com.local.KeyRemapping.plist
0.00MB

해당 파일의 본 글과 같이 매핑하도록 돼있는 plist 파일이다.
'Macintosh HD > Library > LaunchAgents' 경로에 넣고 재부팅하면 적용된다.
적용하고 딥스위치와 설정만 변경하면 그림의 레이아웃과 동일하게 사용할 수 있다.

com.local.KeyRemapping.plist
0.00MB

해당 파일은 Keyboard Application 키에 Fn 키를 할당한 plist 파일이다.
'Macintosh HD > Library > LaunchAgents' 경로에 넣고 재부팅하면 적용된다.
적용하고 딥스위치와 설정만 변경하면 그림의 레이아웃과 동일하게 사용할 수 있다.

 

⚠️

  • 적용하고 나면 맥에 연결된 모든 키보드의 배열이 해당 설정에 맞춰 동작한다.
    따라서 맥북 등에 적용할 때는 주의가 필요할 수 있다.

 

서론


대부분의 키보드는 어느 PC든 연결되기만 하면 제 기능을 하긴 하지만
업데이트나 변경이 가능한 SW와는 다르게 HW이기 때문에 기대하던 바와는 다른 방향으로 작동하기도 한다.
예를 들면 내가 보고 있는 A키가 더 이상 A키가 아니게 될 수도 있다는 말이다.

이런 경우가 아주 드문 것도 아니고 당장 내 환경인 맥과 윈도우 사이에서 유독 그렇다.
이전에 사용하던 FC750R도 그렇고 새로 바꾼 FC750 RBT도 그렇고
배열이 반대가 되거나 내가 누른 키가 다른 키로 동작하는 경우가 존재한다.

해결하는 방법은 Karabiner 등의 프로그램을 사용해 변경하는 방법이 가장 간단하지만 그런 만큼 단점도 존재한다.

  • 업데이트 이후 정상 작동을 보장할 수 없다.
    이전 OS X Catalina > OS X Big Sur의 업데이트 때 그랬듯
    대규모 업데이트가 진행된 다음에는 해당 프로그램의 정상 작동을 보장할 수 없는 경우가 생긴다.
  • 메크로로 간주될 가능성이 존재한다.
    실제 경험으로 대학교 온라인 시험에서 메크로로 간주돼 곤란했던 경우가 있었다.

따라서 이번 포스팅에선 별도의 프로그램을 사용하지 않고 키를 맵핑하는 방식을 소개한다.

해당 방식은 맥의 Caps Lock을 사용한 한/영 전환 시 발생하는 변환 딜레이의 해결 법에서부터 시작한다.
멀쩡히 레오폴드의 한/영 키가 한/영 키로 동작할 수 있도록 하는 변환도 포함한다.

또한 TKL 배열의 레오폴드 750 RBT를 기준으로 작성되기 때문에
풀 배열이나 기타 배열들과는 완벽히 호환된다고 보장할 수 없다.
따라서 개인의 환경에 맞게끔 차근차근 방법을 이해할 수 있도록 유도해 보도록 한다.

 

본론


문제점 파악

해당 레이아웃은 레오폴드의 FC750 RBT의 레이아웃이다.
일반적인 윈도우 기반 TKL 키보드의 배열로, 대부분의 키는 정상적으로 인식되고, 정상적으로 동작한다.

해당 레이아웃은 레오폴드의 FC750 RBT를 맥에 연결했을 때의 키 배열이다.
눈썰미가 좋다면 금세 무엇이 문제인지 알 수 있다.
차이점을 정리하면 다음과 같다.

  • PtrSc, ScrLk가 F13, F14로 동작한다.
  • 윈도우 키가 Cmd로 동작한다.
  • 한/영 키가 기능을 상실하고 순수한 Alt로써 기능한다.

당장 눈에 보이는 문제점은 위와 같고 실제 사용 시 발생하는 문제는 다음과 같다.

  • 레오폴드의 Fn 키는 맥의 Fn 키가 아니다.
  • 맥에서는 Ins 키가 의미가 없다.
  • 맥에서는 Del 키가 의미가 없다.
  • 맥에서는 Pause 키가 의미가 없다.
  • 맥에는 존재하는 Eject/Power 키가 존재하지 않는다.

위와 같은 문제점들을 해결하기 위해 레오폴드의 자체적인 방법과 기타 방법을 사용해서
다음과 같은 레이아웃을 만드는 것이 최종 목표이다.

맥에서 레오폴드의 PrtSc, ScrLk가 F13, F14가 되는 이유는 다음과 같다.

맥 키보드가 원래 그렇게 인식한다.
말 그대로 해당 키들이 맥 키보드에는 존재하지 않는다.
마찬가지로 넘 패드 위의 NumLk 키도 존재하지 않는다.
심지어는 인디케이터나 로고 자리에 F19까지 꽉 채워져 있다.
해당 기능키들의 기능을 단축키의 형태로 따로 제공하기 때문이다.

이렇게 생소한 F키들이 19까지 맥에는 존재하는 이유도 간단하다.

원래 키보드엔 F24까지 존재하기 때문이다.
최근엔 간소화돼 Shift와의 조합으로 12개의 키를 사용해 24개를 표현하기 때문에 별도로 존재하지 

따라서 일반 키보드와 비교해 우린 있는지도 모르고 살거나 잊고 살던 F13 ~ F24까지 12개의 여유 키가 존재한다.
해당 키들을 이용해 기존 맥의 단축키 메커니즘에 영향을 주지 않는 맵핑을 하는 것이 가능하다.

Cmd와 Alt 위치 바꾸기

윈도우에서는 대부분의 단축키가 Ctrl과의 조합으로 이루어져 있지만,
맥에서는 Cmd와의 조합으로 이루어져 있다.
또한 맥 키보드에서의 Cmd 키의 위치는 스페이스바 바로 옆으로,
Alt와 변경하면 그 배열이 거의 동일해진다.

이건 레오폴드 키보드 자체에서 커스텀을 지원한다.
키보드 후면의 해당 부위는 딥 스위치(Dip Switch)라고 부르는 것으로,
HW상에서 특정 키들의 배열을 변경할 수 있게 하는 기능이다.
모든 기계식 키보드에 존재하진 않지만 모든 레오폴드 키보드에는 딥스위치가 존재한다.
사용법은 다음과 같다.

Switch Off On
SW1 L-Ctrl / CapsLock CapsLock / L-Ctrl
SW2 Windows / L-Alt L-Alt / Windows
SW3 Windows / FN FN / Windows
SW4 Windows Available Windows Disable

해당 스위치를 올리고 내리는 것 만으로 해당하는 키들의 위치를 맞바꿀 수 있다.

따라서 우리는 SW2를 On으로 변경하면
Cmd 키와 Alt 키의 위치를 맞바꿀 수 있다.

케이블이 연결돼 있다면, 혹은 블루투스 전원 켜져 있다면
케이블을 해제하거나 배터리를 분리한 후 딥스위치를 조작하면 된다.
이후엔 식별이 편하도록 Windows키와 Alt 키의 키캡을 뽑아 변경해 주면 시각적으로도 더 분명해지게 된다.

한/영 키 기능 찾아주기

여기서부턴 본격적인 매핑의 영역이다.
별도의 프로그램을 사용하지 않고 맥의 내장 기능을 사용하는 방식으로,
부팅 시 특정 경로에 존재하는 설정 파일을 읽어 들이는 방식으로 동작한다.

 

Technical Note TN2450: Remapping Keys in macOS 10.12 Sierra

Technical Note TN2450 Remapping Keys in macOS 10.12 Sierra In macOS Sierra 10.12, we introduced a new way to keyboard key remapping. This document will discuss the various ways to do so. IntroductionUnder macOS Sierra 10.12, the mechanism for key remapping

developer.apple.com

바로 hidutil이다.
Sierra부터 애플에서 공식적으로 탑재하기 시작한 무려 '키보드 맵핑 툴'이다.

기본적으로는 터미널과 명령어를 통해 사용되지만 앞서 언급한 대로 특정 경로에 스크립트 파일을 넣어두면,
부팅 시에 자동으로 적용한다.

<?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>local.hidutilKeyMapping</string>
    
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/hidutil</string>
        <string>property</string>
        <string>--set</string>
        <string>{
            "UserKeyMapping": [
                { 
                    "HIDKeyboardModifierMappingSrc":From,
                    "HIDKeyboardModifierMappingDst":To
                }
            ]
        }</string>
    </array>
 
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

일반 텍스트 파일을 하나 만들어 위의 양식대로 작성한다.
자잘한 것들은 건너뛰고 Dictionary에 변경할 키의 Usage ID를 From과 To를 대체해 넣어주면 된다.
해당하는 키의 Usage ID는 위의 hidutil 글에 표로 정리돼있다.

표에 따르면 변경할 한/영 키에 해당하는 r-Alt 키가 '0xE6'
한영키를 배정할 여유 F키인 F18이 '0x6D'이다.
정확히는 '0x65'가 '0x7000000E6', '0x6D'가 '0x7000000D'이다.
따라서 위의 코드를 수정하면 다음과 같다.

<?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>local.hidutilKeyMapping</string>
    
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/hidutil</string>
        <string>property</string>
        <string>--set</string>
        <string>{
            "UserKeyMapping": [
                { 
                    "HIDKeyboardModifierMappingSrc":0x7000000E6,
                    "HIDKeyboardModifierMappingDst":0x70000006D
                }
            ]
        }</string>
    </array>
 
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

해당 파일을 'com.local.KeyRemapping'라는 이름으로 변경한 뒤,
'.txt' 확장자를 '.plist'로 변경한다.

이제 이 파일을 특정 경로에 저장해 줘야 부팅 시에 hidutil이 자동으로 적용한다.
경로는 'Macintosh HD > Library > LaunchAgents'로, LaunchAgents 폴더 내에 던져 두기만 하면 된다.
간혹 LaunchAgents 폴더가 없는 경우 하나 만들어 주면 된다.

이제 맥을 재부팅해 주면 레오폴드의 Alt 키는 F18 키로 동작하게 된다.
이 상태로 맥의 설정으로 진입한다.

'System Preferences > Keyboard > Input Sources'

위의 화면으로 접근해 'Use the 한/영 key to switch to and from U.S.'
항목을 체크 해제해 준다.
해당 항목은 맥의 CapsLock을 사용해 입력 언어를 전환하고, 길게 눌러 CapsLock의 기능을 하도록 하는 설정이다.
해당 설정이 손에 편하다는 장점이 있지만 메커니즘 상 키를 누를 때가 아닌 키를 뗄 때 트리거가 작동해
잦은 언어 전환 시 오타의 주범이 된다.

'System Preferences > Keyboard > Shortcuts'

위의 화면으로 접근해 Select next source in input menu의 단축키를 레오폴드의 '한/영(r-Alt)'로 지정한다.
위와 같이 단축키가 F18 혹은 자신이 변경한 Usage ID에 맞게 변경이 됐다면
키보드 매핑도, 한/영 키 설정도 완료된다.

레오폴드에 사라진 Eject 키 만들기

위에 잠시 스쳐 지나갔던 키보드 레이아웃을 다시 한번 보자.

맥의 키보드에는 F12 바로 옆에 작은 화살표 키가 존재한다.
Eject 키로 불리는 키로 현행 맥들에선 독자적으로의 기능은 크게 의미 없을 수도 있겠지만 단축키의 수준이라면 이야기가 좀 다르다.

  • Cmd + Option(Alt) + Eject = 잠자기
  • Cmd + Ctrl + Eject = 재시작
  • Cmd + Option(Alt) + Ctrl + Eject = 종료
  • Ctrl + Shift + Eject = 화면 끄기

알아두면 상당히 편해지는 단축키들이 전부 Eject 키와 관련이 있다.
적어도 내게는 매우 중요한 키라고 할 수 있다.
따라서 레오폴드에는 존재하지 않는 해당 키를 레오폴드에 매핑해 본다.

사용할 Key는 별 기능이 없는 Pause 키다.
위치 상으로도 가장 오른쪽 상단에 위치하니 정말 안성맞춤이다.

Pause 키는 문서의 표에서 '0x48'로 '0x700000048'로 표현한다.
Eject 키와 같은 기능을 하는 키는 '0x66'의 '0x700000066'로 표현하는 Keyboard Power 키다.

<?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>local.hidutilKeyMapping</string>
    
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/hidutil</string>
        <string>property</string>
        <string>--set</string>
        <string>{
            "UserKeyMapping": [
                { 
                    "HIDKeyboardModifierMappingSrc":0x7000000E6,
                    "HIDKeyboardModifierMappingDst":0x70000006D
                },
                { 
                    "HIDKeyboardModifierMappingSrc":0x700000048,
                    "HIDKeyboardModifierMappingDst":0x700000066
                }
            ]
        }</string>
    </array>
 
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

위에서 작성했던 plist 파일에 키를 추가해 주면 된다.

이제 설정 파일에 따라 r-Alt 키는 F18이자 한/영 키로,
Pause 키는 Keyboard Power 키로 동작한다.

Keyboard Application 키를 Emoji 키로 사용하기

Emoji 키는 맥에 원래 존재하는 키는 아니지만 Emoji나 특수문자를 조금 더 편하게 사용하기 위한 방법이다.
위의 매핑 방식을 응용하고, 설정을 조금만 해 주면 된다.

바꿀 대상은 항상 존재하지만 어디에 쓰는지 모르거나 잊어버린 Keyboard Application 키 다.
이름으로 말하면 짐작하기 힘들 수도 있다.

바로 이 키다.
내 기준 있는지도 몰랐고, 있었다면 어디에 쓰는 건지도 모를 만큼 존재감이 없는 키인데,
어찌 됐건 맥에서 해당 키는 먹통이거나 알 수 없거나 최소한 좌클릭으로 사용된다.
Keyboard Application 키는 '0x65'로 '0x700000065'이다.

이제 설정과 연동될 키를 찾아야 하는데 그 주인공이 바로 Globe 키다.

최근엔 iOS의 SW Keyboard나 모바일용 키보드 액세서리에서 볼 수 있는 키로
일반적인 맥 키보드에선 Fn 키 자리에 위치한다.
해당 키를 Emoji 키로 사용할 수 있도록 설정에서 제공하고 있기 때문에 Globe 키로 매핑하면 된다.
Globe 키는 문서의 표에 따로 적혀있지 않다.
Globe 키는 '0xFF00000003'로 다른 키들과는 Usage ID의 방식도 조금 다르다.

마찬가지로 둘을 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>local.hidutilKeyMapping</string>
    
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/hidutil</string>
        <string>property</string>
        <string>--set</string>
        <string>{
            "UserKeyMapping": [
                { 
                    "HIDKeyboardModifierMappingSrc":0x7000000E6,
                    "HIDKeyboardModifierMappingDst":0x70000006D
                },
                { 
                    "HIDKeyboardModifierMappingSrc":0x700000048,
                    "HIDKeyboardModifierMappingDst":0x700000066
                },
                { 
                    "HIDKeyboardModifierMappingSrc":0x700000065,
                    "HIDKeyboardModifierMappingDst":0xFF00000003
                }
            ]
        }</string>
    </array>
 
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

이후엔 설정을 만져 줘야 한다.

'System Preferences > Keyboard > Keyboard'

위의 화면으로 이동해서 'Press Fn Key to' 항목을 'Show Emoji & Symbols'로 변경한다.
재부팅을 하고 나면 이제부터 레오폴드의 Keyboard Application 키는 Globe 키이자 Emoji 창의 단축키가 된다.

순수한 FN키 재할당하기

다시 맥 키보드의 레이아웃을 확인해 보면 Ins키 자리에 Fn 키가 존재하는 것을 확인할 수 있다.
해당 자리에 Fn 키를 할당해 보도록 한다.

소단원의 이름이 왜 순수한 Fn 키 할당인지 의구심을 가질 만도 하다.
이는 이전의 Keyboard Application 키를 Globe 키로 재할당하고,
이를 사용해 Emoji 키로 활용하는 것에서 출발한다.

이전에 변경한 설정값의 이름이 'Press Fn key to' 였음에도 Globe 키로 할당된 키를 눌렀을 때 정상적으로
Emoji 창이 나타난 것은 Globe 키가 Fn 키의 기능을 동시에 수행하기 때문이다.

따라서 위에서 사용상의 문제점으로 꼽았던 레오폴드의 Fn 키가 맥의 Fn 키와 다르게 동작한다는 것이 문제가 된다.
실제로 레오폴드의 Fn 키를 사용해 여러 시스템 단축어 등을 사용할 수 있지만,
레오폴드의 Fn 키로는 Emoji 창이 열리지 않는다.

Globe 키로 할당한 Keyboard Application 키는 Emoji 창이 열리고 시스템 단축어도 사용할 수 있다.
하지만 Globe 키이다.

따라서 선택이 필요하다.

  • Ins 키 자리에 순수한 Fn 키를 매핑
  • Globe 키가 아닌 순수한 Fn 키를 매핑
  • Globe 키에 여분의 F 키를 할당하고, Ins 키 자리에 Fn 키를 매핑

셋 중 하나가 된다.

본 소단원에서는 위의 내용들을 요약정리할 겸 Ins 자리에 순수한 Fn 키를 할당한다.
필요 없다면 해당 자리를 여분의 F 키로 변경하고 맥의 단축어를 할당해도 무방하다.

문서에서 Ins 키의 Usage ID를 찾는다.
'0x49'로 되어있고 '0x700000049'로 사용한다.

문서에 나와있지 않은 순수한 Fn의 Usage ID는 '1095216660483'이다
그대로 사용하면 된다.

<?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>local.hidutilKeyMapping</string>
    
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/hidutil</string>
        <string>property</string>
        <string>--set</string>
        <string>{
            "UserKeyMapping": [
                { 
                    "HIDKeyboardModifierMappingSrc":0x7000000E6,
                    "HIDKeyboardModifierMappingDst":0x70000006D
                },
                { 
                    "HIDKeyboardModifierMappingSrc":0x700000048,
                    "HIDKeyboardModifierMappingDst":0x700000066
                },
                { 
                    "HIDKeyboardModifierMappingSrc":0x700000065,
                    "HIDKeyboardModifierMappingDst":0xFF00000003
                },
                { 
                    "HIDKeyboardModifierMappingSrc":0x700000049,
                    "HIDKeyboardModifierMappingDst":1095216660483
                }
            ]
        }</string>
    </array>
 
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

재부팅하면 Ins 키는 맥의 순수한 Fn 키로서의 동작을 수행한다.
Globe 키와 역할을 공유하기 때문에 해당 키로도 Emoji 창을 열 수 있다.

 

결론


이제 이런 방식의 키 매핑이 완료됐다.
원래대로 돌리고 싶다면 언제든지 해당 파일을 삭제하는 것과 설정을 만져 돌아갈 수 있다.

참고로 파일을 수정하는 것 자체가 귀찮다면 자동으로 생성해 주는 곳도 존재한다.

 

hidutil key remapping generator

 

hidutil-generator.netlify.app

본 포스팅에서 작성한 hidutil용 plist 파일을 자동으로 작성해 주는 사이트다.
적용 법은 동일하다.

하나씩 설명하며 오다 보니 글이 쓸데없이 길어졌다.
원래 시작할 때는 이렇게 장황하게 쓸 생각이 없었는데...
욕심이 과했던 것 같다.

나와 같은 문제로 골머리를 앓고 있을 누군가에게 도움이 되길 바란다.

 


Log

2022.03.30.
요약 부분에 주의사항 추가