Universal Control에서 막히는 Caps Lock 한/영 전환을 되살립니다.
커서를 다른 Mac으로 옮겨도, 손은 익숙한 전환 방식을 그대로 기억합니다.
왜 필요한가요? · 빠른 시작 · 사용법 · 작동 방식 · 업데이트 · 개발
Universal Control은 키보드와 트랙패드 하나로 Mac 두 대를 자연스럽게 오갈 수 있게 해 줍니다. 하지만 한국어 사용자가 당연하게 쓰던 Caps Lock 한/영 전환은 다른 Mac에서 작동하지 않을 때가 있습니다.
커서를 다른 Mac으로 옮긴 뒤 평소처럼 Caps Lock을 누르면:
- 한/영이 바뀌지 않은 채 입력이 시작됩니다.
- 잘못 입력한 글자를 지웁니다.
- 입력 메뉴를 클릭하거나 별도의 단축키를 찾아 다시 전환합니다.
- 문서, 메신저, 터미널을 오갈 때마다 같은 흐름이 반복됩니다.
커서는 자연스럽게 넘어갔는데, 익숙한 입력 방식은 따라오지 않는 것.
Universal Control Helper는 바로 이 작은 듯 큰 불편을 해결합니다.
| 기존의 불편 | Universal Control Helper 사용 후 |
|---|---|
| 다른 Mac에서 Caps Lock을 눌러도 한/영이 바뀌지 않음 | 어느 Mac에서든 평소처럼 Caps Lock 한 번 |
| 입력 언어가 달라 오타를 낸 뒤 다시 작성 | 두 Mac의 ABC ↔ 두벌식 상태를 자동 동기화 |
| 입력 메뉴를 클릭하거나 다른 단축키를 기억해야 함 | 커서가 어디에 있든 같은 근육 기억을 유지 |
Universal Control Helper는 키보드가 연결된 Mac의 물리 Caps Lock을 감지해 조작 중인 Mac으로 전달합니다. 입력 메뉴나 다른 단축키로 바꾼 ABC ↔ 두벌식 상태도 함께 맞춰 줍니다.
- 일반 키 입력은 처리하지 않습니다.
- 입력한 텍스트, 클립보드, 마우스 이벤트를 수집하거나 전송하지 않습니다.
- 메뉴 막대에서 조용히 실행되며, 필요할 때 언제든 기능을 끌 수 있습니다.
Mac 두 대를 Universal Control로 연결하고 Caps Lock으로 한/영을 전환한다면, 이 앱은 끊어진 입력 경험의 마지막 한 조각을 이어 줍니다.
Apple과 제휴하거나 Apple이 보증한 제품이 아닌 비공식 오픈 소스 유틸리티입니다.
다음 명령은 최신 GitHub Release를 내려받고, 게시된 SHA-256 체크섬과 앱 서명을 확인한 뒤 /Applications에 설치합니다. 기존 설치본은 삭제하지 않고 사용자 Library의 백업 폴더로 이동합니다.
curl -fsSL https://github.com/feelgom/universal-control-helper/releases/latest/download/install.sh | bash실행 전에 스크립트를 확인하려면:
curl -fsSL https://github.com/feelgom/universal-control-helper/releases/latest/download/install.sh -o /tmp/universal-control-helper-install.sh
less /tmp/universal-control-helper-install.sh
bash /tmp/universal-control-helper-install.sh앱을 자동 실행하지 않거나 다른 폴더에 설치할 수도 있습니다.
bash /tmp/universal-control-helper-install.sh --no-launch
bash /tmp/universal-control-helper-install.sh --install-dir "$HOME/Applications"최신 Release에서 UniversalControlHelper-macOS-universal.zip을 받아 압축을 풀고 Universal Control Helper.app을 /Applications로 옮깁니다.
Important
Apple Developer ID가 설정되지 않은 공개 빌드는 임시 서명으로 배포되므로 첫 실행 시 Finder에서 앱을 Control-클릭한 뒤 열기를 선택해야 할 수 있습니다. Developer ID 자격 증명이 등록되면 같은 파이프라인이 자동으로 서명·공증된 앱을 배포합니다.
두 Mac에 앱을 설치한 다음 역할과 페어링 코드만 맞추면 됩니다.
| Mac | 역할 | 필요한 권한 | 할 일 |
|---|---|---|---|
| 키보드가 연결된 Mac | 키보드 Mac (Source) | 입력 모니터링, 로컬 네트워크 | 자동 생성된 코드 확인 |
| 조작할 다른 Mac | 대상 Mac (Target) | 로컬 네트워크 | Source의 코드 입력 |
- 두 Mac을 같은 로컬 네트워크에 연결하고 Universal Control을 활성화합니다.
- 메뉴 막대의 설정… 또는
Command-,로 설정창을 엽니다. - 키보드가 연결된 Mac은 Source, 다른 Mac은 Target으로 선택합니다.
- Source에 자동 생성된 페어링 코드를 Target에 입력합니다.
- 첫 연결 때 두 Mac에 나타나는 로컬 네트워크 요청을 허용하고, Source에서만 입력 모니터링을 허용합니다.
설정창은 일반, 연결, Source 전용 입력 권한, 소프트웨어 업데이트 순서로 구성됩니다. 창이 열려 있을 때 Command-W를 누르면 메뉴 막대 앱은 계속 실행되지만 Command-Tab 목록에서는 숨겨집니다. 다시 열 때는 메뉴 막대의 **설정…**을 사용합니다. 로컬 네트워크 권한은 첫 연결 때 macOS가 자동으로 요청하므로 별도의 설정 항목으로 표시하지 않습니다. 접근성 권한은 필요하지 않습니다.
메뉴 막대 메뉴에는 전체 기능 스위치, 설정, 종료만 표시합니다. 역할, 페어링 코드, 연결과 업데이트는 설정창에서 관리합니다. 상단 스위치나 설정창의 Universal Control Helper 사용을 끄면 입력 소스 동기화와 두 Mac 간 연결이 함께 일시 중지됩니다. Mac에 로그인할 때 자동으로 실행을 켜면 별도 헬퍼 없이 macOS 로그인 항목으로 등록됩니다.
물리 Caps Lock + ABC/두벌식 상태
│
▼
Source Mac ── Bonjour / 같은 LAN ──▶ Target Mac
Caps Lock 감지 6자리 코드 확인 한/영 전환
- Source는 물리 키보드의 Caps Lock 누름만 감지하고 키 입력을 차단하지 않습니다.
- 새 버전끼리는 입력 메뉴 또는 다른 단축키로 바꾼 ABC/두벌식 상태도 동기화됩니다.
- Bonjour로 Target을 자동 검색하고, 코드가 일치한 연결만 처리합니다.
- Target은 현재 입력 소스를 확인한 뒤 macOS API로 ABC와 두벌식을 직접 전환합니다.
- 일반 키 입력, 입력한 텍스트, 클립보드, 마우스 이벤트는 수집하거나 전송하지 않습니다.
- macOS 13 이상
ABC ↔ 두벌식조합- 신뢰할 수 있는 동일 로컬 네트워크
- Source가 실행 중이면 ABC/두벌식 상태 변경을 Target에 자동 전달
페어링 코드는 같은 네트워크의 다른 앱을 구분하는 용도이며 네트워크 암호화를 제공하지 않습니다. 공용·비신뢰 네트워크에서는 사용하지 마세요.
앱은 Sparkle로 GitHub Release의 EdDSA 서명 업데이트를 확인합니다. 설정창의 소프트웨어 업데이트 섹션에서 현재 버전을 보거나 **업데이트 확인…**을 선택할 수 있으며, 기본 주기 확인도 지원합니다.
v1.5.3은 Universal Control이 키보드를 Target으로 전달하는 동안에도 물리 Caps Lock을 감지하기 위해 Source에서 입력 모니터링 권한을 사용합니다. Target에는 이 권한이 필요하지 않습니다. 스위치가 켜져 있어도 현재 빌드가 미허용이면 설정창의 **권한 항목 재등록…**을 사용하고 macOS 승인 요청을 허용하세요. 앱이 목록에 자동으로 나타나지 않으면 입력 모니터링 설정의 +를 누르고 /Applications/Universal Control Helper.app을 선택합니다. Developer ID가 없는 임시 서명 빌드에서는 업데이트 후 macOS가 권한을 다시 요청할 가능성을 완전히 배제할 수 없으며, Developer ID를 도입하면 앱의 서명 신원을 업데이트 간에 유지할 수 있습니다.
swift test -Xswiftc -warnings-as-errors
BUILD_UNIVERSAL=1 ./scripts/build-app.sh
REQUIRE_UNIVERSAL=1 ./scripts/verify-release.shv* 태그를 푸시하면 GitHub Actions가 테스트, Universal Binary 빌드, Sparkle 서명, 앱캐스트 생성과 Release 업로드를 수행합니다. Apple 자격 증명이 있으면 Developer ID 서명과 공증도 자동으로 추가됩니다. 자세한 절차는 RELEASING.md를 참고하세요.
- 보안 문제는 공개 Issue 대신 보안 정책에 안내된 비공개 신고 기능을 이용해 주세요.
- 버그 제보와 개선 제안은 GitHub Issues에서 받습니다.
- 코드는 MIT License로 배포됩니다.