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

macOS Sequoia下zsh脚本临时禁用askForPassword失效,求解决方法

macOS Sequoia下临时禁用锁屏验证的脚本修改方案

问题原因

macOS Sequoia调整了锁屏安全机制,原通过defaults write com.apple.screensaver askForPassword -int 0禁用锁屏验证的方式不再生效——系统现在会优先遵循「隐私与安全性」面板中的全局设置,单独修改该偏好键无法覆盖系统规则。

可行解决方案(优先推荐低风险方案)

方案1:临时设置超长锁屏密码延迟

通过修改锁屏密码触发延迟,让脚本运行期间唤醒屏幕时无需验证,结束后恢复原设置。这种方法不改变全局验证开关,安全性更高。

修改后的完整zsh函数代码:

function tpp(){
    if (( ! $# )) ; then
        printf 'Usage: tpp filenameFragment ... [minutes]\n'
        return 2
    fi

    local minutes
    local files=()
    for needle in $argv[1,-2] ; do
        files+=(~/podcastEpisodes/*${needle}*)
    done
    if [[ $argv[-1] == <-> ]] ; then 
        minutes=$argv[-1]
    else
        minutes='45'
        files+=(~/podcastEpisodes/*$argv[-1]*)
    fi
    printf "Will sleep in $minutes minutes\n"

    # 保存原锁屏密码延迟设置,用于后续恢复
    local original_delay=$(defaults read com.apple.screensaver askForPasswordDelay 2>/dev/null)
    [[ -z "$original_delay" ]] && original_delay=0

    # 设置退出/中断时的恢复逻辑
    local interrupted=0
    trap '{
        interrupted=1
        # 恢复原锁屏密码延迟
        defaults write com.apple.screensaver askForPasswordDelay -float "$original_delay"
        killall cfprefsd
        # 终止VLC进程
        [[ -n "$vlc_pid" ]] && kill "$vlc_pid" 2>/dev/null
        printf "Trap executed - restored original lock screen delay\n\n"
    }' EXIT INT TERM

    # 设置超长锁屏延迟(比定时时长多1分钟,确保运行期间唤醒无需验证)
    defaults write com.apple.screensaver askForPasswordDelay -float $((minutes * 60 + 60))
    killall cfprefsd

    # 启动VLC播放音频
    /Applications/VLC.app/Contents/MacOS/VLC "${files[@]}" vlc://quit 2>/dev/null &
    vlc_pid=$!

    sleep $(($minutes * 60))
    (( ! $interrupted )) && pmset sleepnow
}

方案2:临时修改锁屏授权规则(高风险,谨慎使用)

通过修改系统授权数据库,直接允许锁屏后无需密码解锁。此方法会完全禁用锁屏验证,存在安全隐患,仅建议在绝对安全的环境下使用。

修改要点:

  1. 在函数开头备份原授权规则:
local original_auth=$(security authorizationdb read system.login.screensaver)
  1. 在禁用验证部分替换为:
# 临时允许无需密码解锁锁屏
security authorizationdb write system.login.screensaver allow
  1. 在trap恢复部分添加:
# 恢复原锁屏授权规则
echo "$original_auth" | security authorizationdb write system.login.screensaver

说明

  • 方案1的核心逻辑是利用「锁屏后延迟N秒才要求验证」的机制,把延迟设为脚本运行的总时长+缓冲时间,既满足需求又不破坏全局安全设置。
  • 两种方案都会在脚本中断(如按Ctrl+C)或正常结束时自动恢复原有设置,避免留下安全漏洞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:24:52