emit-fn-key-on-macos
Emit a Real Fn Key on macOS
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
Macos's Fn key (also called the "globe" key on modern MacBooks) is special. It's not a regular modifier — it carries kCGEventFlagMaskSecondaryFn, a flag that macOS's input subsystem discards if set from userland via CGEventPost. Many "remap anything" tools assume Fn behaves like Cmd / Option / Ctrl and try to emit it via CGEventPost — and silently fail for dictation, Typeless, macOS's dictation shortcut, Spotlight-via-globe, emoji picker, etc.
The only userland path that emits a Fn the kernel accepts is a DriverKit VirtualHIDDevice. Karabiner-Elements ships one. That's why Karabiner is the only FOSS tool for this job in 2026.
When to Use This Skill
- User wants a macro-pad button, mouse button, or any external key to trigger:
- Typeless push-to-talk (
pushToTalk: "Fn"by default) - macOS dictation (
Fn Fndouble-tap, or single-Fn in System Settings) - Emoji picker (
Fn+E) - Spotlight-via-globe (
Fn) - App-specific Fn combos that don't work when remapped by BTT
- Typeless push-to-talk (
- User reports "BTT says the shortcut is firing but nothing happens in Typeless"
- User tries
hidutil property --setwith Fn mappings and sees no effect - User flashed QMK/ZMK on a board and Fn emission is broken