You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AppleScript中sudo命令失效,求助配置Touch ID适配方案

问题背景

2023年9月27日 编辑:
若有人知晓如何为Gordon Davisson的解决方案配置Touch ID,即可彻底解决本问题。

2023年9月9日 原帖:
我使用数月的MacBook睡眠脚本突然失效,想了解原因,是否后台终端密码提示机制发生了变化?我通常禁用睡眠功能,以便合盖时不中断或锁定任何进程。此前脚本运行正常,如今执行时出现报错:

'sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
sudo: a password is required'
之前脚本可自行触发支持指纹授权的用户提示,只需激活脚本并触摸指纹传感器即可完成操作。

完整脚本如下:

do shell script "sudo pmset -a disablesleep 0"

tell application "System Events" to sleep

do shell script "sudo pmset -a disablesleep 1"

该脚本已打包为应用,存放于应用程序文件夹中。我尝试使用sudo -S pmset,但该选项似乎用于从其他位置管道输入密码或其他类型的提示,并非我想要的效果,我希望恢复此前通过终端弹出提示的功能。


解决方案

原因分析

打包成应用的AppleScript在无终端交互的后台环境运行,sudo无法唤起常规的密码/Touch ID验证弹窗,因此触发报错。以下是几种可行的修复方式:

方法1:使用系统原生管理员授权弹窗(推荐)

直接修改AppleScript,添加with administrator privileges参数,这会触发系统自带的授权窗口,原生支持Touch ID验证,无需额外配置:

do shell script "pmset -a disablesleep 0" with administrator privileges

tell application "System Events" to sleep

do shell script "pmset -a disablesleep 1" with administrator privileges

替换原脚本内容后重新打包为应用即可,运行时会弹出系统授权提示,触摸指纹即可完成验证。

方法2:配置sudo免密码执行pmset

如果希望完全跳过验证步骤,可配置让你的用户无需密码就能执行pmset命令:

  1. 打开终端,执行sudo visudo
  2. 在文件末尾添加一行(替换your_username为你的Mac实际用户名):
    your_username ALL=(ALL) NOPASSWD: /usr/bin/pmset
    
  3. 按Ctrl+O保存文件,Ctrl+X退出编辑器
  4. 原脚本无需修改,运行时会自动执行sudo命令而无验证提示

方法3:配置askpass助手实现Touch ID弹窗

通过第三方工具唤起支持Touch ID的验证窗口:

  1. 若已安装Homebrew,执行brew install pinentry-mac安装工具
  2. 修改脚本,在sudo命令前指定askpass工具路径:
    do shell script "SUDO_ASKPASS=/usr/local/bin/pinentry-mac sudo pmset -a disablesleep 0"
    
    tell application "System Events" to sleep
    
    do shell script "SUDO_ASKPASS=/usr/local/bin/pinentry-mac sudo pmset -a disablesleep 1"
    
  3. 重新打包应用,运行时会弹出pinentry-mac的验证窗口,支持Touch ID操作

内容的提问来源于stack exchange,提问作者sockrabbtt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:32:53