Це не ідеально, але ось рішення. Щоб ноутбук не спав, коли кришка закрита і ви працюєте від акумулятора, виконайте такі команди:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
Щоб знову ввімкнути режим сну ноутбука, коли кришка закрита, а ви працюєте на акумуляторі, виконайте такі команди:
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0
"5" у другому наборі команд представляє кількість хвилин перед сном, коли знаходиться на батареї; налаштуйте за бажанням свого ноутбука.
Це трохи небезпечно, оскільки якщо ви забудете знову ввімкнути свої налаштування, ноутбук ніколи не спить, коли працює від акумулятора. Через це я написав сценарій оболонки для автоматичного повторного включення налаштувань:
#!/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
Сценарій оболонки буде відключати режим сну, поки ви не натиснете Enterклавішу, після чого він знову включить параметри сну (по черзі, ви можете натиснути Ctrl- Cі домогтися того ж). Він також встановить тайм-аут (за замовчуванням до 300 секунд / 5 хвилин), після якого налаштування сну автоматично буде знову включено, а ноутбук буде змушений переходити до сну. Хоча це буде біль, якщо ви використовуєте ноутбук на зустрічі, це буде рятівником, якщо ви забули і поклали ноутбук у сумку, щоб повернутися додому.
Проникливі читачі відзначають, що ці команди вимагають sudo
; на жаль, це неминучий AFAIK. Що я зробив у своїй системі, це зробити так, щоб мені не потрібно було вводити свій пароль, щоб запустити pmset
як root. Для цього відредагуйте sudoers
файл ( sudo visudo
) та додайте цей рядок:
joe ALL=(ALL) NOPASSWD: /usr/bin/pmset
замінивши "joe" на ваше ім'я користувача. Можливо, ви могли б досягти такого ж результату (тобто, запустивши скрипт без необхідності введення пароля), запустивши скрипт оболонки SETUID, але мені це не подобається; відкриття цієї команди через sudoers мені здається менш ризикованою.
Щоб запустити скрипт, вставте його в каталог на своєму PATH
і викликайте його як такий:
noz [<timeout in seconds>]
Коли ви дістанетесь туди, куди ви йдете, просто натисніть Enterабо Ctrl- Cі ви добре підете. І якщо ви забудете про це, воно автоматично скинеться і заснути.
Мабуть, існує спосіб досягти всього цього за допомогою AppleScript, щоб потім можна було призначити йому гарячу клавішу, а що ні; Я спробую це, якщо мені колись набридне запускати це з командного рядка.