适用于: Apple Mac、MacBook Air、MacBook Pro、Mac mini、iMac、Mac Studio、Mac Pro
关键词: macOS, 屏幕共享, 输入法, IME, VNC, Hammerspoon
解决 macOS 屏幕共享时,本机与远程输入法不同步的恼人问题。
新版 macOS 屏幕共享已内置「同步键盘语言」功能。
请先检查:屏幕共享 App → 设置,看是否有此选项。
- ✅ 有这个选项 → 直接勾选即可,不需要本工具
- ❌ 找不到这个选项 → 你的 macOS 版本较旧,请使用本工具
本工具适用于:
- 本机或远程是旧版 macOS,没有内置同步功能
- 内置功能有问题时的备用方案
使用 macOS 内置屏幕共享时,输入法会出现以下情况:
| 本机输入法 | 远程输入法 | 实际输出 |
|---|---|---|
| 英文 | 拼音 | 英文 ❌ |
| 拼音 | 英文 | 拼音 ❌ |
| 拼音 | 拼音 | 拼音 ✅ |
这是因为屏幕共享传送的是「本机输入法处理过的字符」,而不是原始按键。
- ✅ 精确同步 — macism 模式直接指定输入法,不会对不齐
- ✅ 每台主机独立设置 — 可选 toggle 或 macism 模式
- ✅ SSH ControlMaster 加速 — 延迟只有 10-50ms
- ✅ 只在屏幕共享 focus 时触发 — 不影响其他工作
- ✅ 自动询问新主机 — 第一次连接时设置,之后自动记住
- ✅ 菜单栏管理 — 暂停/恢复、新增/编辑/删除主机
| 模式 | 图标 | 说明 | 远程需求 |
|---|---|---|---|
| Toggle | 🔄 | 发送 Ctrl+Space 切换 | 只需 SSH + 授权 |
| macism | 🎯 | 直接指定输入法 ID,精确同步 | SSH + macism(需 macOS 10.15+) |
注意: macism 需要 macOS 10.15 (Catalina) 以上才能安装。旧版请用 Toggle 模式。
本机(控制端):
- macOS 10.15 或更新版本
- Homebrew
- Hammerspoon
远程(被控端):
- macOS 10.14 或更新版本
- 开启 SSH(远程登录)
- 授权辅助功能权限
系统偏好设置 → 共享 → 勾选「远程登录」
记下显示的连接信息,例如 ssh user@192.168.1.100
SSH 执行 AppleScript 需要辅助功能权限:
系统偏好设置 → 安全性与隐私 → 隐私 → 辅助功能
- 点左下角 🔒 解锁
- 点「+」新增
/usr/bin/osascript- 按
Cmd+Shift+G输入路径/usr/bin/ - 选择
osascript
- 按
或者新增「终端」App(/Applications/Utilities/Terminal.app)也可以。
在远程 Mac 上直接执行:
osascript -e 'tell application "System Events" to key code 49 using control down'如果输入法有切换,表示权限设置成功。
brew install --cask hammerspoonmkdir -p ~/.hammerspoon
curl -o ~/.hammerspoon/init.lua https://raw.githubusercontent.com/taigadit/mac-screen-sharing-input-sync/main/init.lua- 打开 Hammerspoon
- 到「系统设置 → 隐私与安全性 → 辅助功能」
- 允许 Hammerspoon
# 生成密钥(如果还没有)
ssh-keygen -t ed25519
# 复制到远程主机(需输入远程密码一次)
ssh-copy-id user@远程IP验证免密码登录:
ssh user@远程IP "echo ok"如果直接显示 ok 不用输入密码,就成功了。
ssh user@远程IP "osascript -e 'tell application \"System Events\" to key code 49 using control down'"如果远程输入法有切换,表示一切正常!
mkdir -p ~/.ssh/sockets编辑 ~/.ssh/config,加入:
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
设置权限:
chmod 600 ~/.ssh/config这可以把延迟从 200-500ms 降到 10-50ms。
点菜单栏 Hammerspoon 图标(🔨)→ Reload Config
如果远程是 macOS 10.15+ 且想要精确同步:
ssh user@远程IP
brew tap laishulu/homebrew
brew install macism注意: macOS 10.14 (Mojave) 无法安装 macism,请用 Toggle 模式。
- 打开屏幕共享连接到远程 Mac
- 点击屏幕共享窗口(让它获得焦点)
- 切换本机输入法
- 远程会自动同步!
第一次会弹出对话框:
- 输入 SSH 连接信息(例如
user@192.168.1.100) - 选择同步模式(Toggle 或 macism)
- 设置会自动保存,下次不用再输入
Toggle 模式是用 Ctrl+Space 切换,只能来回 toggle。
重要: 使用前请先手动对齐两边输入法(都切到英文或都切到拼音),之后就会保持同步。
菜单栏会出现 ⌨️ 图标,点开可以:
- ✅ 查看同步状态
- ⏸️ 暂停/恢复同步
- 📋 管理主机列表
- ➕ 新增主机
- 🔄/🎯 切换同步模式
- 主程序:
~/.hammerspoon/init.lua - 主机对应表:
~/.hammerspoon/hostmap.lua
主机对应表格式:
return {
["Akane的Mac mini"] = { ssh = "user@192.168.100.4", mode = "macism" },
["办公室 iMac"] = { ssh = "user@192.168.1.100", mode = "toggle" },
}-
确认 SSH 免密码登录正常:
ssh user@远程IP "echo ok" -
确认远程已授权辅助功能:
ssh user@远程IP "osascript -e 'tell application \"System Events\" to key code 49 using control down'"如果出现权限错误,请到远程的「系统偏好设置 → 安全性与隐私 → 辅助功能」新增
osascript。 -
确认屏幕共享窗口是获得焦点的(点进去)
- macism 模式:会直接指定输入法,不会对不齐
- Toggle 模式:使用前先手动对齐,之后就会同步
macism 需要 macOS 10.15 (Catalina) 以上。如果远程是 Mojave (10.14),只能用 Toggle 模式。
设置 SSH ControlMaster(见安装步骤),可以把延迟从 200-500ms 降到 10-50ms。
点菜单栏 ⌨️ 图标 → 暂停同步
编辑 ~/.hammerspoon/init.lua,找到这行:
cmd = "osascript -e 'tell application \"System Events\" to key code 49 using control down'"修改 key code 和 modifier:
49= Space50= 反引号`control down可改成{control down, option down}等
macOS 屏幕共享的键盘事件处理流程:
按下按键 → 本机输入法处理 → 传送处理结果到远程
远程收到的已经是处理过的字符,远程的输入法根本没机会处理。
让两边输入法保持同步:
本机切换输入法
↓
Hammerspoon 检测到
↓
SSH 到远程执行切换指令
↓
远程输入法同步
↓
两边一致 ✅
MIT License
Developed by Dajiade Co., Ltd. (taigadit)