요약
맥 Caps Lock 한영 전환 딜레이는 Karabiner-Elements에서Disable the accidental keystroke prevention of Caps Lock룰 하나만 활성화하면 사라진다. 대문자 잠금은Shift + Caps Lock으로 대신 쓰면 된다.
문제
macOS에서 Caps Lock으로 한영 전환을 할 때, 빠르게 타이핑하다 보면 첫 한두 글자가 씹히는 경험을 한 번쯤 해봤을 것이다. 특히 영어와 한국어를 자주 오가는 환경(개발자, 번역가, 이중언어 사용자)에서는 이 미묘한 딜레이가 꽤 거슬린다.
Caps Lock은 한 번 누르면 영어(ABC)로, 다시 누르면 직전에 쓰던 언어(2벌식 한국어 등)로 돌아가는 토글 방식으로 동작한다. 여러 input source를 쓰는 경우에도 “무조건 영어로” 직행하기 때문에 편리하지만, 누를 때마다 감지되는 지연이 문제다.
왜 딜레이가 있는가
이 딜레이의 정체는 macOS 내부의 Accidental Keystroke Prevention(우발적 키 입력 방지) 로직이다.
시스템 설정 → 키보드 → 입력 소스 → 편집으로 들어가 보면 다음과 같은 옵션 설명이 있다:
Use the Caps Lock key to switch to and from ABC
Press and hold to enable typing in all uppercase.
Caps Lock 키 하나에 두 가지 기능이 들어가 있다:
- 짧게 누름 → 영어 ↔ 직전 언어 토글
- 길게 누름(홀드) → 대문자 잠금
macOS는 이 둘을 구분하기 위해 키를 누른 시점이 아니라 뗀 시점(key up) 에 반응한다. 거기에 더해, 너무 짧게 스친 키 입력은 실수로 간주해 무시하는 로직이 추가로 들어가 있다. 이 두 가지가 합쳐져서 체감상의 “딜레이”로 나타난다. 다른 키들(Shift, Control 등)은 누르는 즉시(key down) 반응하기 때문에 상대적으로 Caps Lock만 한 박자 늦게 느껴지는 것이다.
이 문제는 Karabiner-Elements breaking changes 문서에도 언급돼 있다. macOS 15.1.0부터 가상 키보드 장치가 Apple Aluminum USB Keyboard로 인식되면서 이 방지 로직이 더 강하게 적용됐고, Karabiner 개발자는 Caps Lock을 토글하려면 약 100ms 이상 키를 눌러야 한다고 명시했다.
시도해본 방법: F18 우회 매핑
해결책을 찾다 보면 다음과 같은 조언을 보게 된다:
- Karabiner나 Hidutil로 Caps Lock을 F18로 재매핑
- 시스템 설정 → 키보드 → 단축키 → 입력 소스에서 “이전 입력 소스 선택” 단축키를 F18로 지정
이 방법은 딜레이 없이 작동하기는 한다. 하지만 중요한 한계가 있다.
본질적으로 F18 우회는 Control+Space로 input source를 전환하는 것과 동일한 동작이다. macOS의 “이전 입력 소스 선택” 단축키는 단순히 등록된 input source들 사이를 순환시키는 명령일 뿐이다.
input source가 2개라면 토글처럼 보여서 문제를 못 느낀다. 하지만 3개 이상이 되면 한계가 드러난다:
- 한국어 → 일본어 → 영어 → 한국어 → 일본어… 식으로 순차 이동만 가능
- “Caps Lock = 무조건 영어로 직행”이라는 원래 동작은 재현 불가능
- Caps Lock 키 본래의 대문자 잠금 기능도 함께 사라짐(F18로 덮어써졌기 때문에 Shift 조합도 먹히지 않음)
즉, F18 우회는 딜레이는 없애지만 Caps Lock 한영 전환의 핵심 장점인 “영어 직행”을 포기하게 만든다. 결국 다른 단축키를 쓰는 것과 다를 바 없는 셈이다.
해결법: Karabiner-Elements 공식 룰
정답은 Karabiner-Elements의 공식 complex modifications 중 하나인 Disable the accidental keystroke prevention of Caps Lock 룰이다. Karabiner 개발자(tekezo)가 GitHub 이슈에서 직접 추천하는 공식 솔루션이며, breaking changes 문서에서도 해결책으로 명시하고 있다.
어떻게 작동하는가
룰의 실제 JSON은 다음과 같다:
{
"description": "Disable the accidental keystroke prevention of Caps Lock",
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": { "optional": ["any"] }
},
"to": [
{ "key_code": "caps_lock", "hold_down_milliseconds": 200 },
{ "key_code": "vk_none" }
]
}
]
}이 룰이 하는 일을 단계별로 풀어보면:
- 하드웨어 Caps Lock 키가 눌리면 Karabiner가 이벤트를 가로챈다
- 가상 Caps Lock
key_down이벤트를 macOS로 전송 - 정확히 200ms 대기
- 가상 Caps Lock
key_up이벤트를 전송 vk_none을 덧붙여 실제 하드웨어의key_up이벤트를 무시
핵심은 마지막 단계다. vk_none 없이 그냥 두면 하드웨어 key_up 이벤트가 별도로 발생해서 hold_down_milliseconds가 제대로 적용되지 않는다.
결과적으로 macOS 입장에서는 사용자가 Caps Lock을 매번 정확히 200ms 눌렀다 뗀 것으로 인식한다. macOS의 100ms 임계값을 항상 넘기기 때문에 우발적 키 입력 방지 로직에 걸리지 않고 즉시 반응한다. 실제로는 200ms 기다리지만 누르고 떼는 동작 자체에 시간이 걸리기 때문에, 사용자 체감으로는 딜레이가 사라진 것처럼 느껴진다.
설치 순서
1. Karabiner-Elements 설치
karabiner-elements.pqrs.org에서 다운로드한다. 설치 후 시스템 권한(입력 모니터링 등)을 허용해야 한다.
2. 룰 import
Karabiner-Elements 실행 → Complex Modifications 탭 → Add predefined rule → Import more rules from the Internet 클릭.
브라우저가 열리면 accidental keystroke 등으로 검색해 해당 룰을 찾고 Import 버튼을 누른다. 직접 링크로 가도 된다:
https://ke-complex-modifications.pqrs.org/#disable_accidental_keystroke_prevention_of_caps_lock3. 룰 활성화
다시 Karabiner로 돌아와서 import된 룰 옆의 Enable 버튼을 누르면 즉시 적용된다.

대문자 잠금은 어떻게?
이 룰을 적용하면 Caps Lock을 아무리 길게 눌러도 대문자 잠금이 걸리지 않는다. 모든 Caps Lock 입력이 200ms짜리 균일한 이벤트로 시뮬레이션되기 때문이다.
그런데 macOS에는 잘 알려지지 않은 기본 단축키가 있다:
Shift + Caps Lock → 대문자 잠금 토글
이건 룰 설치 여부와 무관하게 원래부터 작동하는 macOS 기본 기능이다. 시스템 설정 어디에도 공식적으로 적혀 있지 않지만, 오래된 유닉스/맥 전통에서 이어져 온 동작이다.
즉, Karabiner 룰로 딜레이를 없애는 동시에, 필요할 때는 Shift를 함께 눌러 대문자 잠금을 사용하면 된다. 기능은 모두 유지된다.
결과
- Caps Lock 1회 → 영어로 전환 (딜레이 없음)
- Caps Lock 1회 더 → 직전 언어로 복귀 (딜레이 없음)
- 여러 input source(일본어, 러시아어 등)를 쓰는 환경에서도 “영어 직행” 동작 유지
Shift + Caps Lock으로 대문자 잠금 사용 가능
참고
- Karabiner-Elements 공식 문서: How to disable caps lock delay
- macOS 15.1.0 변경 사항: Breaking changes
to.hold_down_milliseconds레퍼런스: 공식 문서- 관련 GitHub 이슈: pqrs-org/Karabiner-Elements #3950