每个Mac用户应该都遇到过这种场景:正在用拼音输入法打中文打得起劲,突然弹出一个密码输入框,不管是Wi-Fi密码、应用商店下载确认、还是sudo命令的密码,输完之后回车,抬头一看——输入法已经悄悄变成了ABC。接下来继续打字,屏幕上蹦出来的全是英文字母,只能骂骂咧咧地切回去。要是你每天解锁Mac十几次、输各种密码的次数更多,这个小问题累积起来的烦躁感真的不容忽视。
这个问题的正式表述就是“Mac输入密码后输入法自动变成ABC”。很多人以为是自己误按了快捷键,或者Mac“记忆混乱”,实际上这是macOS输入法管理机制在密码框场景下的一种“设计缺陷”。我花了不少时间翻官方文档、Google各种论坛帖子,也把自己的Mac反复折腾了几轮之后,终于把这个问题彻底解决了。在这篇博文里,我会把自己的排查思路、完整的解决方案、以及踩过的坑都写出来,希望能帮你一劳永逸地告别“输密码变ABC”的日常折磨。
1. 问题根源:密码框背后的输入法切换机制
1.1 先分清你遇到的是哪一种“输密码变ABC”
想要修好一个问题,第一步是把问题定位准确。“输入密码后输入法变了”,这句话在不同场景下对应的原因和解决方案其实完全不同。我总结了一下,大体可以分为三种情况:
第一种,是解锁Mac时,在登录界面输完密码回车,进入桌面后整个系统的输入法都变成了ABC。这种情况最让人抓狂,因为每次熄屏后再打开,都要重新切一轮输入法。
第二种,是在某个App里输入密码,比如连个Wi-Fi、在App Store下载软件、用sudo执行命令,输完密码之后,当前这个App的输入法变成了ABC。注意,这种场景下你可能发现其他App还是保持拼音,只有刚才输入密码的那个窗口变成了英文输入状态。
第三种,是输入法在密码框内能自动切成英文模式(这是合理行为,密码本来就是英文为主),但密码输入完毕之后,它没有自动恢复到你之前使用的中文输入法,而是保持在英文状态不动了。
这三种情况的触发点虽然不同,但背后的核心机制是同一个,就是我接下来要讲的macOS的安全输入模式,以及“自动切换到文稿的语言”这个功能。
1.2 系统为什么会“擅自”切到ABC
先从“自动切换到文稿的语言”这个功能说起。这个功能在macOS上已经存在很多年了,它的设计意图是:根据你当前正在输入的文稿的语言环境,自动帮你选择最合适的输入法。比如你在备忘录里写中文,它会把输入法切到拼音;你在Xcode里写代码,它会自动切到ABC。听起来很智能对吧?但在实际使用中,这个功能有两个致命的缺陷。
第一个缺陷是:密码框里的输入,并不被系统当作“文稿”来处理。密码是纯英文的(至少绝大多数情况下是),系统在进入密码输入状态时,会默认按英文语言环境来处理,于是自动把输入法切到了ABC。这里其实还算合理,因为密码确实需要英文字母和数字。
第二个缺陷才是真正的bug所在:密码框为了保证输入安全,会启动一个叫“安全输入模式”的机制。在这个模式下,所有第三方软件都无法截获你的键盘输入,这本身是好事,能防键盘记录器窃取密码。但是,这个模式同时也会把输入法管理器的状态记录功能一并“屏蔽”掉。等你在密码框里输完密码、安全输入模式退出之后,系统并没有把输入法状态恢复到你之前使用的那个,而是保留了这个安全模式下被强制切过去的ABC输入源。
于是,你看到的最终结果就是——输完密码,输入法从拼音变成了ABC,而且不会自动变回来。这不是Mac“记性差”,而是系统在密码框这个特殊场景下,切换了输入法之后“忘了”切回来。
1.3 一个关键认知:系统不是“记不住”,而是“不需要记住”
这个认知非常关键,决定了你后续的解决思路。macOS其实在各个App之间是有“输入法记忆”功能的。举个例子,你在备忘录里用拼音输入法,在Safari地址栏里用ABC,切换应用的时候,系统会自动把输入法调成这个应用上次使用的状态。所以Mac并不缺“记忆输入法”的能力。
但在密码框这里,情况完全不一样。密码框在系统层面被归类为“安全输入上下文”,它使用的输入法被锁死为ASCII输入源(也就是我们熟悉的ABC),并且系统刻意关闭了对输入法状态的记录和恢复。也就是说,系统在这个场景下压根“不需要记住”你之前用的是拼音,它认为密码输入上下文就应该统一用英文输入源。
这就解释了一个很多人不解的现象:为什么你明明在系统设
