키보드 매핑:상어60과 K9 Pro

키보드가 자리를 많이 차지하는 것을 싫어해서 포커 배열을 쓰기 시작한 지 십수 년쯤 됐다. 로우 프로파일 키보드인 K9 Pro에 정착한 지도 몇 해가 지났다. 최근 블로그 정비하면서 더 빠른 문장부호 입력 방법을 궁리하던 중, F13~F24 키 코드를 단축키 지정에 활용하자는 아이디어가 떠올라 키 매핑을 손보기로 했다.

기존 매핑

포커 배열 키보드는 우하단 특수키 4개 중 하나 이상을 Fn 키로 활용하는 경우가 많다. 그러나 표준 위치가 정해지지 않았다는 점에서 미완성으로 느껴졌고, 해당 영역 자체가 ‘기능 키’1라면 몰라도 ‘조합 키’2로 활용하기에는 피곤했다. 그래서 활용 빈도는 낮지만 긴장 없이 누를 수 있는 CapsLockFn 키로 전용하고, 우하단 특수키 4곳에 순서대로 ···를 매핑해서 키 조합 없이 방향을 입력할 수 있게 했다. 화살표들이 한 줄로 배치된 것은 타협이지만, viH·J·K·L 이동 시퀀스를 그대로 따른 것이므로 적응은 쉽다3. Fn 레이어에서는 관습에 따라 숫자 키 열에 F1~F12를, 커스텀 룰을 확장해서 우하단 특수키 4개에 순서대로 Home PgDn PgUp End를 배정했다. 전체 매핑 규칙은 다음과 같다:

레이어 위치 기능
0 CapsLock Fn1
0 BR04
0 BR1
0 BR2
0 BR3
0 Esc Esc·~
1 BR0 Home
1 BR1 PgDn
1 BR2 PgUp
1 BR3 End
1 1·!~=·+ F1~F12
1 Esc `·~
1 Bs Del

이 매핑 규칙을 십년 넘게 고수했으나, F13~F24 키 코드를 입력하려면 새 규칙이 필요했다.

새 매핑

SpaceFn5 키 코드를 이용해 Space 키를 조건부 Fn1 키로 사용하고, 기존 CapsLock 위치는 Fn2로 배정했다. 추가된 Fn2 레이어에서는 F11~F22 입력을, Fn3 레이어에서는 F21~F24Pause·Vol-·Vol+·Mute 입력을 받는다. 이 방식은 Space 키를 홀드해서 공백을 연속 입력할 수 없는 단점이 있다. 그러나 기능 손실 없이 추가 레이어에 접근할 수 있고, 사용 빈도가 높은 키를 중심으로 조작할 수 있다는 장점이 있다.

레이어 위치 기능
0 Space SpaceFn1
0 CapsLock Fn2
0 BR0
0 BR1
0 BR2
0 BR3
0 Esc Esc·~
1 BR0 Home
1 BR1 PgDn
1 BR2 PgUp
1 BR3 End
1 1·!~=·+ F1~F12
1 Esc `·~
1 Bs Del
2 1·!~=·+ F11~F226
2 BR0 CapsLock
2 BR1 NumLock
2 BR2 ScrlLock
2 BR3 Print
3 1·!~4·$ F21~F246
3 Bs Pause
3 ,·< Vol-
3 .·> Vol+
3 /·? Mute

매크로 정책

K9 ProVIA 앱을 통해 매크로를 지원하지만, 표준 코드가 아니므로 사용하지 않기로 한다. 이번에 결정한 레이아웃을 앞으로 사용하게 될 모든 제품에 적용할 예정이기 때문이다.

레이아웃 업데이트

상어60

구입 당시 널리 쓰이던 DZ60 보드78가 설치된 키보드. 해당 보드는 VIA 앱을 지원하지 않으므로9 QMK Configurator로 매핑 프로필과 펌웨어를 마련하고 QMK Toolbox로 플래싱했다. 첫 시도는 드라이버 불일치 이슈10로 실패했지만, Zadig 앱으로 드라이버를 강제로 변경11하고 플래싱에 성공했다.

K9 Pro

이 키보드는 외장에 노출된 OS 선택(Win/Mac) 스위치로 기본 레이어를 지정(0/1)하는 기능이 있어 확장 레이어 인덱스를 1씩 밀어야 했다. VIA 앱은 매핑하는 즉시 하드웨어에 반영되기 때문에 작업은 단순했다.

결과 보고

  1. 키 조합 없이 , , , 키 코드를 입력할 수 있다.
  2. Space 키 조합으로 F1~F12, Home, End, PgDn, PgUp 키 코드를 입력할 수 있다.
  3. CapsLock 키 조합으로 F11~F24, CapsLock, NumLock, ScrlLock, Print 키 코드를 입력할 수 있다.
  4. Space + Tab 또는 CapsLock + Tab 키 조합으로 F21~F24, Pause, Vol-, Vol+, Mute 키 코드를 입력할 수 있다.
  1. 단축 키 조합에서 실제 기능을 결정하는 코드. 

  2. 단축 키 조합에서 다른 키의 기능을 바꾸는 코드. 

  3. 이 배열이 입력 빈도를 반영했다는 주장은 증명되지 않았지만, 코딩 환경에서는 타당하다고 본다. 

  4. BR0~BR3은 우하단 특수키 네 개의 물리적 위치를 의미한다. 

  5. Space 키를 홀드하는 동안에는 Fn 키로, 릴리즈하는 순간에는 Space 키로 동작한다. Fn1~Fn3에 대응하는 SpaceFn1~SpaceFn3 코드가 있다. 

  6. 번호키 배열과의 자리 맞춤을 고려해서, 레이어 1과 레이어 2에 F11~F12를, 레이어 2와 레이어 3에 F21~F22를 중복으로 배치했다.  2

  7. ATmega32U4 컨트롤러를 사용한다. 

  8. DFU 모드 진입 방법은 USB 케이블 연결 시 Esc 키를 홀드하는 것이다. 

  9. 본 작업에서는 장치를 인식시키는 방법이 있는지 조사하지 않았다. 

  10. Atmel DFU device has libusb0 driver assigned but should be WinUSB. Flashing may not succeed. 

  11. DFU 모드에서 드라이버를 libusb0winusb으로 변경했다.