在Mojave / Catalina上,防止Mac在盖子关闭时进入睡眠状态。

admin 7514 2025-12-04 10:15:07

继CJ的回答之后,您可以创建一个shell脚本来自动管理pmset启用和禁用睡眠。

https://apple.stackexchange.com/a/270835/408131

#!/bin/bash

#***************************************************************************

#*** noz - prevent laptop from sleeping when lid is closed

#***************************************************************************

#***** set some defaults *****

BATTERY_SLEEP=5 # in minutes

DEF_WAKE_LEN=300 # in seconds

#***** determine timeout value *****

timeout_len=${1:-$DEF_WAKE_LEN}

function prevent_sleep() {

echo

echo -n "Preventing sleep for $timeout_len seconds; press to continue..."

sudo pmset -b disablesleep 1

sudo pmset -b sleep 0

}

function enable_sleep() {

# $1: = 0, timeout = 1, Ctrl-C = undef

#----- insert a newline for timeout or Ctrl-C -----

if [[ ${1:-1} -eq 1 ]]; then echo; fi

echo "Restoring previous battery sleep setting: $BATTERY_SLEEP"

sudo pmset -b disablesleep 0

sudo pmset -b sleep $BATTERY_SLEEP

#----- sleep on timeout only -----

if [[ ${1:--1} -eq 1 ]]; then sudo pmset sleepnow; fi

exit

}

#***** prevent it from sleeping *****

prevent_sleep

#***** trap Ctrl-C *****

trap enable_sleep INT

#***** wait for an enter *****

read -t $timeout_len

rc=$?

#***** re-enable normal sleep *****

enable_sleep $rc

该shell脚本将禁用睡眠直到按下Enter键,此时它将重新启用睡眠设置(或者,您可以按下Ctrl-C以达到同样的效果)。它还将设置一个超时时间(默认为300秒/5分钟),超过该时间后睡眠设置将自动重新启用,并强制笔记本电脑进入睡眠状态。如果您在会议中使用笔记本电脑,则可能会感到困扰,但如果您忘记了并把笔记本电脑放在包里带回家,它将成为救命稻草。

敏锐的读者会注意到这些命令需要sudo权限;很遗憾,在我所知道的情况下是不可避免的。在我的系统上,我已经做了一些配置,使得我无需输入密码就能以root身份运行pmset。要实现这一点,请编辑sudoers文件(执行sudo visudo)并添加以下行:

YOURUSERNAME ALL=(ALL) NOPASSWD: /usr/bin/pmset

将“YOURUSERNAME”替换为您的用户名。您可能可以通过运行SETUID shell脚本来实现相同的结果(即在不输入密码的情况下运行脚本),但我不喜欢这样做;通过sudoers打开此一个命令似乎对我来说风险较小。

要运行脚本,请将其放在您的PATH目录中,并按以下方式调用:

noz []

当你到达目的地时,只需按下Enter或Ctrl-C,然后你就可以开始了。如果你忘记了,它会自动重置并进入睡眠状态。

你还可以设置一个Automator快速操作,告诉它执行noz,并将其绑定到一个热键上。

上一篇
下一篇
相关文章