Mac VPN 键盘快捷键:Shortcuts 与 Automator 对比
Shortcuts 与 Automator 都能把 Mac VPN 绑到一个按键上。比较两者各自把键放在哪里、会向你询问什么,以及没反应时该检查什么。
一次按键就足以启动 Mac VPN,而 Apple 提供了两种原生绑定方式。Shortcuts 为每个快捷指令提供自己的按键组合和菜单栏入口。Automator 提供一个 Quick Action,其按键要在系统设置中指定,与工作流本身分开。两条路径把同一个请求发送给同一个连接服务,因此真正要紧的差异在于绑定存放在哪里、你需要穿过哪些权限关卡,以及按键似乎毫无反应时要检查什么。
下文都假设已存在一个系统 VPN 服务,且它会出现在 scutil --nc list 中。如果你的服务商提供的是第三方客户端,其连接从不出现在那里,那么两个工具都无法通过 scutil 驱动它,你需要那个厂商自己的操作。
两条路径调用同一个服务
从列表开始,而不是从应用开始。scutil --nc list 会打印每个已保存的服务及其状态和精确的显示名称,而这个字符串正是你必须在命令中加引号的内容:
/usr/sbin/scutil --nc start "Office VPN"那一行是激活请求。请求被接受后它会立刻返回;它不等待第二因素,不报告私有 DNS 已设置,也不确认文件服务器有响应。把它当作你在菜单里会做的那次点击,只是没有菜单。
scutil 里同样没有开关。把连接和断开分成两个动作,比用一个翻转状态的键更容易推理,因为在握手中途按下的翻转可能中止一个尚未完成的连接。如果你只想要一个键,就按 scutil --nc status "Office VPN" 的输出分支并明确判断;不要盲目来回切换。
Shortcuts:一个动作一个键,权限面更大
在 Shortcuts 中创建本地快捷指令,并按任务命名,例如 Connect Office VPN。
添加 Run Shell Script 并粘贴启动请求,服务名要逐字输入,而不是从剪贴板或选中文本中取。
在你自己的已登录会话中从编辑器运行一次并完成正常的认证流程,让系统记录它需要的批准。
打开快捷指令的详细信息,用 Add Keyboard Shortcut 绑定一个组合。Apple 在其 Shortcuts 用户指南 中记录了这个绑定;系统已经保留的组合无法占用。
绑定随快捷指令一起走,所以一个动作也可以直接出现在菜单栏或 Dock 上,不需要额外工作。代价是第二道权限:Shortcuts 在其偏好设置中允许脚本之前不会运行 shell 脚本,而在受管理的 Mac 上该设置可能被策略锁定。只对你亲手编写或阅读过的快捷指令放行,不要为内容不明的导入文件放行。
同步是另一个陷阱。从另一台 Mac 复制来的快捷指令仍然带着那台 Mac 的字面服务名。在服务命名不同的机器上,键会触发,脚本会退出,却没有任何东西告诉你原因。
Automator:活动部件更少,但要自己去找那个键
在 Automator 中选择 Quick Action,把工作流设为在任何应用中都不接收输入,并添加 Run Shell Script,使用同一条命令,shell 为
/bin/zsh。用一个你在列表里认得出的名字保存它,因为之后你要找的就是这个名字。
打开系统设置,然后是键盘,然后是键盘快捷键,然后是服务。找到该工作流,若未勾选就勾选,并记录一个组合。
工作流以服务的形式被调用,所以这个键存在于服务表中,并以工作流名字为键。若之后重命名已保存的工作流,应重新打开该面板确认指定还在。服务快捷键是全局的,这很方便,直到它与另一个应用想要的组合冲突。
你得到的是更小的产物和更少一次权限询问:一个普通的工作流文件,没有自己的菜单栏项,也没有需要争论的脚本开关。你失去的是可发现性,因为只有工作流被保存并被系统看过一次之后,动作才会出现在服务列表里。
按键毫无反应时,两者在哪里分道
| Symptom | Shortcuts route | Automator route |
|---|---|---|
| Key fires, nothing connects | Service name mismatch; re-read scutil --nc list | Same name mismatch inside the shell action |
| Key never fires anywhere | Binding collides with a reserved or app-level combination | Service entry unticked in Keyboard Shortcuts, or renamed |
| An authorization dialog appears every time | Prompt comes from the VPN type, not from Shortcuts | Same prompt, same cause; the script runs as you |
| Connects, no reachable resource | Readiness not checked after the request | Identical gap, identical fix |
| Works only inside one app | Rare; check where the shortcut is made available | Workflow set to receive input from a specific app |
这张表是故意做歪的:五行里有两行的修法确实不同。多数失败的按键都归结为同一对故障,名字与已保存的服务不匹配,以及把请求误当成已完成的连接,而换工具并不能治好其中任何一个。
两条路径也都拒绝保存凭据。一个按键组合无法把交互式登录变成无人值守登录,而把密码贴进脚本比每天输入一次更糟。
按这三个条件来选
当你想要每个动作一个键外加菜单栏入口,并且机器上已经允许脚本时,选 Shortcuts。当你想要一个可以在 Mac 之间复制的文件且不要额外开关时,选 Automator。如果你的组织锁住 Shortcuts 的脚本,Quick Action 是两者中唯一无需改策略就能运行的,这就替你定了答案。
在你依赖这个键之前,走一遍这份清单:在 scutil --nc list 中确认服务;从冷启动按下按键并观察 scutil --nc status;打开隧道存在的那个资源;并另建一个名字清楚的断开动作。不要把唯一的停止动作放在一个你需要隧道才能到达的远程会话上。
下一步:只绑定 Connect,让 Disconnect 一天不绑定,并记下你仍然伸手去点菜单的频率。这能告诉你按键是在省时间,还是只是在藏状态。