서두
본 글은 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에 댓글로 부탁드립니다.
- 더 간단한 구현이 가능할 경우 공유해주시면 매우 환영입니다!