这不是理想的方法,但这是一个解决方案。为防止笔记本计算机在机盖关闭且使用电池供电时休眠,请运行以下命令:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
要在盖上盖子并且使用电池供电时重新启用笔记本电脑的睡眠功能,请运行以下命令:
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0
第二组命令中的“ 5”表示电池供电后进入睡眠状态的分钟数;根据您的笔记本电脑进行调整。
这有点危险,因为如果您忘记重新启用设置,则笔记本计算机在为电池供电时将永远不会休眠。因此,我编写了一个Shell脚本来自动重新启用设置:
#!/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 <enter> to continue..."
sudo pmset -b disablesleep 1
sudo pmset -b sleep 0
}
function enable_sleep() {
# $1: <enter> = 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
; 可悲的是,这是不可避免的AFAIK。我在系统上所做的就是创建它,因此不必输入密码即可以pmset
root 用户身份运行。为此,请编辑sudoers
文件(sudo visudo
)并添加以下行:
joe ALL=(ALL) NOPASSWD: /usr/bin/pmset
用您的用户名替换“ joe”。您可以通过运行Shell脚本SETUID来达到相同的结果(即,无需输入密码即可运行脚本),但是我不喜欢这样做。通过sudoers打开此命令对我来说风险较小。
要运行该脚本,请将其粘贴到您的目录中,PATH
然后按以下方式调用它:
noz [<timeout in seconds>]
当你到了你要去的地方,只需点击Enter或Ctrl- C你是好去。如果您忘记了它,它将自动重置并进入睡眠状态。
可能有一种方法可以通过AppleScript来实现所有这些目的,以便您可以为其分配一个热键,而不能给它分配热键。如果我对从命令行运行它感到厌倦,我会尝试一下。