# 如何在输入密码后尽快恢复中文输入法（macOS）

> 本文公开全文。

原文：https://utgd.net/article/20696

输入法问题总是像微分方程一样难解，你可能要面对无数变量，同时要处理变量间的复杂关系。从输入法本身、macOS 的权限机制、macOS 的键盘设置、当前软件的语言设置到有无其他软件介入从而诱发冲突，仅仅是定位问题这一环，也难如侦探游戏。

对于中文用户来说，还有一种堪称中文圈地方性疾病的输入法问题：在绝大多数软件中，如果需要输入密码，那么无论是手动输入还是自动填充，在此之后，当前的输入法都会变成系统自带的英文键盘，需要手动切换回来。

这个貌似开发人员晚上喝醉酒留下的白痴问题，背后实则有超过10年的复杂历史，可以料想，短期内也不会有什么好办法。本文同样无力根除问题，但将尝试滤清问题，并提出缓解方案。

## 问题分析

之所以重视输入法问题，不仅因为它就像蚊子叮咬一样总让人难受，更因为这是一个只在中文环境下——或许其他非英语国家也有——才有的问题，考察这样一种非英语地区的地方性疾病，不仅可以重新思考问题，也利于我们认识自己所处的讨论环境。

围绕密码输入前后的种种现象展开搜索，不难发现，总体上存在两类问题，一种是自动化工具受到影响，在一段时间内或部分软件中无法正常使用——此时，那帖万能的重启药方总是出现在评论区。另一类问题则是本文所关注的输入法变化问题，理所当然当然，你几乎找不到关于这一资源的英文资源。

唯有意识到上述两类信息的存在，方有可能拓宽思考范围，不仅仅把问题定位在输入法本身，而是综合考虑从输入密码到输入法被强制修改之间的各个环节。当然，我们几乎找不到这样讨论，目之所及，要么就是重启，要么就是在系统键盘设置里乱点鸳鸯谱，就好像家里的空气开关跳闸后，也不管上面的标语是什么，反正全部上上下下拨一遍，总有一次能成功。

重启固然无奈，乱碰运气的前提也是你所尝试的方法至少覆盖了可能范围，但苟从一开始就走错了方向，那么尝试一万次也没有用。输入法变化问题实际上和输入法本身没有任何关系，如果我们稍微站得远一点，考察密码输入的完整流程，就会发现，其实输入法变化只是安全输入（Security Input）带来的副作用之一。详言之，当你尝试输入或者填充密码时，系统就会打开安全输入模式，这也是欧美地区 Power User 经常抱怨的——不少自动化工具在这段时间内无法使用，比如 Keyboard Maestro、TextExpander 或 1Passeword。

仅对于非英语地区的用户来说，输入法变化问题才有可能被人发现——毕竟，如果一个人本来就在用英文键盘，他怎么可能发现输入法有何变化呢？

## 解法评析

既然安全输入方是病因，那为何坊间流传的许多偏方仍然以系统键盘设置为药？实际上，这些设置并不根治问题，只是貌似有用。以最有名的文稿设置为例，开启后即可将安全输入造成的影响局限在当前软件的标签页（如有）中，例如临时要登录淘宝买点零什，虽然在当前页面仍会遭遇问题，但在其他标签页或软件里打字，则依然是中文。

——可惜，上述解法毫无意义，除非你登录后在当前页面中连一个汉字都不会输入，否则，你还是需要手动切回中文输入法。真正糟糕的是，不同标签页或软件中的输入法竟不一样，会造成进一步混乱：设想打开了好几十个标签页，在绝大多数情况下都可以正常打字，但其中有几个页面无论如何都输不了中文，绝大多数人的第一反应肯定认为电脑坏了，而很难想起来自己曾开启过某个冷门设置（最后还是重启）。

虽能定位问题，但并不意味着能够妥善解决。不过我还是尝试提出未来可能的方案，如果打通这些环节，则有可能借助自动化工具修正输入法状态——无需多言，最理想的情况自是 Apple 能够重视问题，不过我对此不抱任何希望。

整个输入过程中，不难注意到两个关键节点：第一，系统进入了安全输入模式，随后又很快退出；第二，原本正常的输入法，突然变成了英文输入法。如果两套状态变化能够作为触发机关（trigger）并配合自动化工具，那就有可能自动更正。

很可惜，我暂时没有找到监控上述状态的合理方案，即便是 Keyboard Maestro 也爱莫能助，暂时管不了。不过，我注意到 Keyboard Maestro 会持续监控当前是否处于安全输入状态，并在菜单栏中提示，只不过它并没有把这一状态作为 Trigger 提供给用户，你不能接上自动化操作。好吧，严格来说不是没有，其实你可以用脚本或自带函数检测当前是否处于安全输入模式，但为确保有效，就得在后台持续运行，我不知道这样是否会拖慢电脑速度。

除了安全模式，另一个可能的方向是当前输入法布局，可惜包括 Keyboard Maestro 在内，我没有找到哪个软件在键盘布局变化后能够及时反应。

在搁置了各种可能性之后，我降到一个临时办法：检查当前所输入字符的规律（模式），如果发现输入了一长串的连续英文字符，那么在中文环境下可以合理推测，这是一个中文用户在系统出错时不慎输入了一长串输入码——其实我也经常手打英文，但不间断且不参杂其他符号的英文确实罕见。

设置了这套输入字符 Trigger 后，修复方式稍微自然一些：当我发现打出来的文字变成了一堆英文字母后，不需要离开键盘主区域——Geek 们可能很偏爱这个概念——去按边角的快捷键，只需要接着胡乱输入一会儿，输入法就被 Keyboard Maestro 扳回去。Keyboard Maestro 还会删除刚才输入的错误文本，进一步减轻工作量（输入太快的话可能会残留几个字符，手动删一下）。

这样的自动化动作，毫无优雅可言，当特殊的自动化方案设计暗示了一种新的可能：如果你既不能事先预防，也不能在情况发生变化时马上反应，那么至少在早期破坏发生后，应当立刻修复。换言之，在这种特殊的自动化设计中，系统或软件问题造成的破坏本身成了自动化的触发机关。

---

[前往标准阅读页](https://utgd.net/article/20696?audience=web)
