서드파티 마우스도 macOS에서 그만큼 잘 씁니다
macOS가 서드파티 마우스에 남겨둔 빈자리를 채우는 네이티브 macOS 앱입니다.
- 부드러운 스크롤
- Button Mapping
- 하드웨어 제어
- 눌러서 말하는 음성 입력
- 입력 소스 전환
macOS 13.3 이상, Apple Silicon과 Intel 모두 지원합니다. 릴리스 노트 →
휠 이벤트, 손대지 않은 상태
디텐트마다 한 번씩 건너뜀, 중간 프레임 없음
표준 Scroll Curve를 거친 결과
아래에서 설정한 곡선을 따라 펼쳐집니다
포인터를 패널 위에 놓고 휠을 돌려 보십시오.
두 패널은 마우스에서 같은 휠 이벤트를 받습니다. 왼쪽은 시스템이 넘겨주는 그대로 적용하고, 오른쪽은 Scroll Curve를 거칩니다. 앱에 실제로 들어가는 것과 같은 코드입니다. 슬라이더를 움직이면 곡선이 바뀝니다.

DPI, SmartShift, 배터리, 컨트롤 테이블을 HID++로 직접 읽고 씁니다. Logitech 소프트웨어를 띄울 필요도, 계정을 만들 필요도 없습니다.

맨 앞 앱에 따라, 또는 지금 보고 있는 브라우저 탭의 도메인에 따라 입력 소스를 전환합니다.
이 앱이 하는 세 가지
부드러운 스크롤
마우스가 보내는 띄엄띄엄한 스크롤 휠 이벤트를 합성한 픽셀 단위 관성 스크롤로 대체합니다. Scroll Curve(최소 스텝, 속도 게인, 지속 시간, 감쇠)는 실시간 미리보기를 보면서 시각적으로 편집하고, 앱별로 따로 지정할 수 있습니다.
휠 이벤트, 손대지 않은 상태
56 px
디텐트마다 한 번씩 건너뜀, 중간 프레임 없음
표준 Scroll Curve를 거친 결과
56 px · 320 ms
거리의 대부분은 앞쪽 몇 프레임에 실립니다
Button Mapping
버튼 하나에 Trigger가 줄지어 붙고, 각 Trigger는 정확히 하나의 Action을 가리킵니다. 그림에서는 클릭이 키보드 단축키, 길게 누르기가 modifier 유지입니다. Trigger는 네 방향 드래그, Chord, Hold + Scroll까지, Action은 AppleScript와 셸 명령까지 있습니다. 둘 다 앱별로 재지정할 수 있습니다.
Wheel Mode Button
Click
Keyboard shortcutfnSpaceLong press
Hold modifierfnHeld only while the mouse button is down.
DPI, SmartShift, 배터리 잔량
MouseTuner가 알아보는 마우스라면 이 값들을 HID++로 직접 읽고 씁니다. Logitech 자사 소프트웨어와 같은 프로토콜이지만, Logitech 소프트웨어를 띄울 필요도 계정도 없습니다. 그 밖의 마우스도 부드러운 스크롤과 Button Mapping은 그대로 씁니다.
MX Master 3S Bluetooth
DPI1000SmartShiftRatchetAuto-disengage threshold10Only used while SmartShift follows the device.
Battery85%Buttons7 buttons
사이드 버튼을 누른 채 말하고, 손을 뗍니다
Modifier Hold는 시작과 끝이 있는 유일한 Action입니다. 이것을 Fn에 매핑하면 눌러서 말하는 받아쓰기 도구를 엄지로 시작하고 멈출 수 있습니다.
이번 주에 내보낼 것들:
휠 모드 버튼을 클릭해 말하기를 시작하거나, 누른 채로 유지하십시오.fn up · 0.00 s
- 사이드 버튼의 길게 누르기를 Hold modifier → Fn에 매핑합니다.
- 버튼을 누른 채 말합니다. 도구는 누르고 있는 시간만큼만 녹음합니다.
- 손을 뗍니다. modifier가 해제되고, 그 버튼은 다시 아무 일도 하지 않는 상태로 돌아갑니다.
눌린 키를 감지하는 도구라면 무엇이든 함께 씁니다. Typeless, Wispr Flow, superwhisper, macOS 받아쓰기 등입니다.
modifier가 눌린 채로 멈춰 버리는 것이 이 앱이 저지를 수 있는 최악의 사고입니다. 그래서 “버튼” 패널에는 항상 “눌린 보조 키 해제” 버튼이 있고, 엔진도 앱 전환, 권한 상실, 이벤트 탭 실패 시에 modifier를 해제합니다.
손으로 바꿔야 할 일이 하나 줄어듭니다
규칙이 맨 앞 앱이나 지금 보고 있는 브라우저 탭의 도메인에 따라 입력 소스를 고릅니다. 매칭은 정확한 호스트에서 상위 도메인으로 내려가며 www. 접두사는 무시합니다. 브라우저의 URL을 읽으려면 손쉬운 사용 권한이 필요하지만, 앱에 따른 전환에는 필요하지 않습니다.
Domain Rule — 지금 이 순간 보고 있는 탭
gist.github.com → no rule → github.com → ABC
App Rule — 맨 앞 응용 프로그램
not reached
전역 기본값 — 그 밖의 모든 경우
not reached
맨 앞 앱이나 탭을 바꿔 보세요. 처음 일치한 층이 입력 소스를 정하고, 그 아래 층은 아예 확인하지 않습니다.
다른 점
네이티브 Swift 앱
MouseTuner는 샌드박스를 쓰지 않습니다. 그래야 원시 HID 입력을 읽고 전역 이벤트를 가로챌 수 있기 때문입니다. 대신 Mac App Store로는 배포할 수 없어서, Developer ID 서명과 공증을 거친 빌드와 Homebrew Cask로 배포합니다.
직접 확인할 수 있는 네트워크 요청 목록
앱이 내보내는 모든 연결을 무엇이 일으키는지, 어디로 가는지, 무엇을 보내는지까지 개인정보 페이지에 적어 두었습니다. 끌 수 없는 두 건도 포함입니다. 이 목록은 패킷 캡처로 하나씩 대조해 볼 수 있습니다.
전체 요청 목록 보기 →하드웨어 제어는 기본 포함입니다
HID++ 기기 제어(DPI, SmartShift, 배터리)는 처음부터 들어 있습니다. 앱은 버전이 하나뿐이고, 돈을 더 내야 열리는 기능을 따로 빼 두지 않았습니다.
매핑하지 않은 키는 MouseTuner를 설치하지 않은 것처럼 동작합니다
이것이 기본 동작입니다. 매핑이 없는 입력, Profile이 없는 기기, 권한이 없는 기능은 모두 앱이 없을 때와 완전히 동일하게 동작하고, 화면이 그 이유를 설명합니다.
휠 모드 버튼
0x00C4 → Hold modifier · fn
이 마우스에서 매핑이 있는 유일한 버튼입니다. 누르고 있는 동안 정확히 그만큼 Fn이 눌린 채 유지됩니다.
$9.9 한 번, 3대
계정도 카드도 없이 30일 동안 모든 기능을 쓰고, 그다음 한 번만 결제합니다. 마음이 바뀌면 14일 안에 이유를 묻지 않고 환불합니다.
질문
제 마우스에서도 되나요?
부드러운 스크롤과 Button Mapping은 어떤 마우스에서든 동작합니다. 기기가 아니라 시스템 입력 이벤트를 다루기 때문입니다. 추가 HID++ 제어에는 Device Profile이 필요한데, 이 Profile은 아직 실제 하드웨어에서 뜨고 있는 중입니다.
트랙패드는 어떻게 되나요?
그대로 둡니다. 부드러운 스크롤은 휠 마우스에만 적용됩니다. 트랙패드와 Magic Mouse는 이미 픽셀 단위 이벤트를 보내므로 손대지 않고 통과합니다.
왜 Mac App Store에 없나요?
원시 HID 접근과 전역 이벤트 가로채기는 App Sandbox에서 둘 다 불가능한데, App Store는 샌드박스를 요구합니다. 그래서 Developer ID 서명과 공증을 거쳐 Homebrew Cask와 함께 배포하고, 업데이트는 Sparkle로 합니다.
체험 기간이 끝나면 어떻게 되나요?
향상 기능인 Scroll Curve 사용자화, Button Mapping, HID++ 기기 제어가 꺼집니다. 앱은 OS 기본 동작 그대로 계속 실행됩니다. 무언가 망가지는 것이 아니라, OS가 이미 하는 것 이상을 하지 않게 될 뿐입니다.




