Keyameleon 和 Keychange 解决的是同一个问题。macOS 对所有键盘只使用一个输入法,所以从美版 MacBook 键盘换到德语外接键盘时,就得手动切换布局。两者都是免费开源的菜单栏应用,会在你开始用另一个键盘打字时替你切换。它们的区别在于支持哪些 Mac、如何处理你按下的第一个键,以及需要多大程度地访问你的输入。

一览

KeyameleonKeychange
切换依据你正在打字的键盘你正在打字的键盘
价格和许可证免费,MIT免费,MIT
macOS26 或更高版本14 或更高版本
权限输入监控输入监控;使用“Before key press”时还需要辅助功能
刚换用的键盘上的第一个键使用之前的输入法使用之前的输入法,除非开启了“Before key press”
对输入的访问只监听:无法延迟、修改或注入按键默认只监听;“Before key press”会拦截每一次按键
设置引导设置窗口,之后使用设置窗口菜单栏弹出面板中,每个键盘一个下拉菜单
安装DMG 或 brew install --cask mastro993/tap/keyameleonDMG 或 brew install dennistimmermann/tap/keychange

两者的共同点

  • 每个键盘只需指定一次输入法,之后在该键盘上按键时,应用就会选择它,在任何 App 中都是如此。
  • 键盘按硬件身份识别,所以拔下再重新连接后,指定依然有效。
  • 把自己报告为键盘、但其实不是键盘的设备(例如带快捷键按钮的鼠标)可以隐藏,这样它们永远不会触发切换。
  • 两者都需要“输入监控”权限来区分键盘,也都不会记录或发送你输入的内容。
  • 两者都可以按需在登录时启动,并通过 Sparkle 更新。Keyameleon 每天最多检查一次,只安装你批准的更新;Keychange 会提示安装新的 GitHub 发行版。

你按下的第一个键

一个监视你在用哪个键盘的应用,只有在 macOS 收到按键之后才能得知这次按键。等它完成切换时,这个按键通常已经在发往前台 App 的路上,用的是旧布局。两款应用都从这一点出发,但在如何应对上分道扬镳。

Keychange 有一个 Before key press 模式。它会拦截每个 App 中的每一次按键(密码栏除外),切换布局,再用新布局重新转换字符;对于某些输入方式,则会短暂扣住按键。这样第一个字符就是对的。它需要“辅助功能”权限,并且让 Keychange 处在你的键盘和每个 App 之间。

Keyameleon 从不介入这条路径。它通过 Apple 的 CoreHID 框架以只监听模式观察键盘,这种模式无法延迟、修改或注入输入;它也只通过 macOS 文字输入系统来更改布局。代价就是它常见问题里说的那一点:触发切换的那个按键,以及 macOS 完成切换前输入的其他按键,仍可能使用之前的输入法。

如果你经常在一个词打到一半时换键盘,Keychange 的这个模式就是真正的区别。如果你更希望没有任何应用能改动你的按键,Keyameleon 正是围绕这条原则打造的。

当别的东西更改了输入法

你可能会从菜单栏选择另一个输入法,也可能有其他 App 更改了它。Keychange 让你选择接下来怎么做:关闭自身;暂停,直到输入法再次与键盘相符;保留你的选择,直到你换键盘;或者保留到你下一次按键。

Keyameleon 只有一种行为,没有相关设置。它会记下这次更改,在菜单中显示不匹配,但不与之对抗。你下一次在已指定输入法的键盘上按键时,它会再次选择该键盘的输入法。

只有 Keyameleon 有的功能

  • 引导设置。一个窗口带你完成“输入监控”授权,为每个键盘指定布局,并在应用转到菜单栏之前确认一切就绪。
  • 切换校验。向 macOS 请求切换输入法后,Keyameleon 会读回当前输入法进行确认。如果切换没有成功,菜单会显示警告,并提供“Retry Now”(立即重试)。
  • 不悄悄替换。如果某个已指定的输入法从 macOS 中删除,这项指定会保留,不会用其他输入法顶替,菜单也会一直提示,直到它恢复。
  • 自定义键盘名称,以及一个列出所有已指定键盘及其布局国家/地区代码的菜单。
  • 可以在菜单中用 ⌘ P 暂停和恢复。

只有 Keychange 有的功能

  • 支持 macOS 14 Sonoma 和 15 Sequoia。Keyameleon 需要 macOS 26。
  • Before key press 模式,见上文。
  • 菜单栏标记,一眼就能看到当前输入法。
  • 针对其他来源更改输入法的四种策略。
  • 按住 Option 点按可显示厂商 ID 和产品 ID,用于区分名称相似的键盘。

该用哪一个?

  • 你的 Mac 运行的是 macOS 14 或 15:Keychange。Keyameleon 无法在这些版本上运行。
  • 第一个字符必须永远正确:开启 Before key press 的 Keychange,前提是你愿意授予“辅助功能”权限,并让它拦截每一次按键。
  • 你想要一个只能观察、绝不触碰你输入的应用,还要有引导设置,出问题时有清晰的警告:Keyameleon。

两者都免费,都试一试也没有任何成本。不过请一次只运行一个:它们改的是同一项系统设置。

刚接触这个问题?先从 如何为外接键盘使用不同的键盘布局 开始。Keychange 称其灵感来自 autokbisw,那篇对比介绍了这个命令行方案。