[macOS][Karabiner][V13] macOS Control <=> Command 키 토글

서두

본 글은 macOS에서 Command 키나 Control 키가 먹히지 않을 경우, Karabiner를 이용하여 두 키를 서로 바꾸어(토글) 사용할 수 있는 해결 방법을 공유한다. 키가 고장났을때도 유용할 것 같다.

최근 sickcodes/Docker-OSX를 WSL2 위에서 돌려서 만족하면서 써보고 있는데, Windows 키가 WSL2 KVM QEMU에서 제대로 전달되지 않아 macOS에서 Command 키를 사용할 수 없다는 문제가 발생했다. 해당 문제를 Karabiner를 이용하여 해결해보았다.

Karabiner 소개

macOS에서 키 바인딩을 편리하게 바꿀수 있는 도구이다. 이전 글에서도 이 어플리케이션을 이용하여 한/영키를 Shift+Space로 편리하게 자동 전환하는 JSON 스크립트를 만든적이 있었다.

[V13] left_shift twice to toggle between Control 스크립트 설치

간단하게 아래 페이지를 열어 스크립트를 Karabiner에 적용할 수 있다: 링크
(주소가 매우 긴데, 이는 JSON 스크립트 Body 자체가 인코딩되어 들어있기 때문이다. 원본 JSON 스크립트는 이 링크에서 확인할 수 있다)

Press left_shift twice to toggle between Control and Command key. Another key pressed during each left_shift press will be considered as a cancel, and timeout will also considered as cancel.

사용법

Karabiner에 스크립트를 적용 완료하였다면, “Left Shift”를 두번 연타하여 Control과 Command를 토글할 수 있게 된다. 상태가 총 두 가지인데,

  • 일반 상태: Control 키와 Command 키가 각각 원래 역할을 한다.
  • 토글 상태: Control 키는 Command 키로, Command 키는 Control 키로 동작한다.

위와 같은 방식으로 동작하게 된다. 토글의 조건이 몇가지가 있는데, 신경쓰인다면 확인해보는것도 좋을것 같다.

  • Shift를 두번 연타할 때에는 500ms 이내로 연타하면 된다.
  • 처음 Shift pressed event 이후 다음 Shift pressed event 전까지 임의의 키가 입력되면 무시된다.
  • 처음 Shift pressed event에서 Shift가 modifier key로 사용되었다면 (예, Shift+A 등의 조합키) 무시된다.

여기서 무시된다는 것은, 해당 동작이 토글을 바꾸는 데에 효과가 없다는 것을 의미한다. 이는 빠른 타이핑 도중에 여러번 Shift가 눌리는 상황을 고려하여 만들었다.

개선 사항

  • 알고리즘이나 키 바인딩 관련한 개선이 필요한 경우 해당 Gist에 댓글로 부탁드립니다.
  • 더 간단한 구현이 가능할 경우 공유해주시면 매우 환영입니다!

[M1/M2] 수월한 macOS 한/영 전환 환경 만들기

환경

  • 메인 PC: Macbook Air M1
  • 작동 가능한 원격 환경 (키보드/마우스 공유 포함)
    • Microsoft Remote Desktop – Windows 11 (x64)
    • Parallels Desktop 18 – Windows 11 (ARM64)
    • Synergy (M1 Macbook Air가 Host, Windows 11이 Guest)

목표

  • macOS를 메인으로 사용할 때, Synergy Guest인 Windows, Parallels Guest인 Windows, 그리고 Remote Desktop 모두에서 한/영 전환을 문제없이 하기 위함
  • 오른쪽 Command키를 Shift+Space와 동일한 효과를 나도록 함

준비물

세팅 방법 – Windows 파트

Windows에서는 날개셋 입력기만 설치하고 주 입력기로 설치하면 된다. 기본적으로 날개셋 입력기는 Shift+Space와 한/영키 두 가지 모두 한/영 변환이 가능하다. 이는 모든 Windows Guest에 설치해야 작동할 것이다.

세팅 방법 – macOS 파트

macOS에서는 여러 프로그램을 설치할 필요가 있다. 기본적으로 아무 세팅도 하지 않은 상태에서는 Caps Lock키가 한/영 전환키이며, 길게 누르면 기존 Windows와 동일한 Caps Lock Toggle을 수행하게 된다. 이를 바꿔서, 우리는 Shift+Space를 한/영 전환키로 바꿔보고 원격이나 Synergy에서도 활용할 수 있게 해보자. (각 프로그램의 설치 과정은 상세히 기록하지 않았다. 일반적인 설치 방법을 참고하면 된다.)

  1. Karabiner-Elements 설치: 설치는 일반적인 방식대로 진행하면 된다.
  2. Right Command to Left Shift+Space 프리셋 먹이기: Karabiner-Elements에 먹일 수있는 Preset이다. 이를 적용하고 나면 오른쪽 Command 키가 시스템 전역으로 Left Shift+Space로 대체된다.
  3. 구름 입력기 설치: 설치 과정을 진행하고 난 뒤 언어 입력기 설정에서 기본 입력기인 “두벌식”을 구름 아이콘의 “두벌식”으로 변경하자. 이 때부터는 Caps Lock을 통한 한/영 전환이 비활성화된다.
  4. com.apple.symbolichotkeys.plist 수정: 기본적으로 설정>키보드>단축키>입력 소스>입력 메뉴에서 다음 소스 선택 부분을 Shift+Space로 변경하면 끝나는데, macOS Monterey에서는 이를 허용하지 않는것 같다. plist 파일을 수정하고 재 부팅하면 이때부터는 값이 변경되어 있으므로 오른쪽 Command나 Shift+Space를 통해 한/영 전환을 사용할 수 있을 것이다.

세팅 방법 – Parallels Desktop 18

Parallels Desktop 18에서는 기본적으로 입력소스 전환 키를 윈도우의 LALT+Shift로 매핑하는것 같다. 하지만 우리는 Windows Guest에 날개셋 입력기를 설치하였으므로, 이를 Override해보자.

먼저 Parallels 제어 센터에서 설정으로 들어간다

다음으로는 단축키에서 Windows 11 섹션으로 들어간다. 기본적으로 Shift+Space가 언어 변경으로 매핑되고 끌 수 없는것을 확인할 수 있다.

이는 엔트리를 추가하여 Override할 수 있다. 아래 + 버튼으로 Shift+Space를 그대로 Shift+Space로 전달하는 룰을 추가한다.

이렇게 하면 Windows 안에서도 언어 전환이 가능하다.

한계점

언어 전환시 언어 자체의 동기화는 되지 않는다. 이 말은, Windows에서는 한글로 입력 중이나 macOS에서는 영어 상태일 수 있다는 의미이다. 큰 의미는 없지만, 언어 선택이 완벽하게 일관성있게 작동하지 않으므로 나중에 문제가 생길수도 있을 것이다.

또한 날개셋 입력기는 기본 Windows 입력기가 아니다. 웬만한 상황에서는 잘 작동할 것이라 생각하나 일부 게임/뱅킹 프로그램이 작동하지 않거나 입력기 프로그램을 차단할 수 있으므로, 해당 상황에서는 기본 Windows 입력기로 전환하여 사용하는 것이 좋을 것이다.