Это не идеально, но вот решение. Чтобы ноутбук не спал, когда крышка закрыта и вы работаете от батареи, выполните следующие команды:
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
заменив "Джо" на ваше имя пользователя. Вероятно, вы могли бы достичь того же результата (т.е. запустить скрипт без необходимости ввода пароля), запустив сценарий оболочки SETUID, но мне это не нравится; открытие этой команды через sudoers кажется мне менее рискованным.
Чтобы запустить скрипт, поместите его в каталог в вашей PATH
и вызовите его так:
$ noz [<timeout in seconds>]
Когда вы доберетесь до места, просто нажмите Enter или Ctrl - C, и все готово. И если вы забудете об этом, он автоматически сбросится и уснет.
Вероятно, есть способ добиться всего этого через AppleScript, так что вы можете назначить ему горячую клавишу, а что нет; Я попробую это, если мне даже надоест запускать это из командной строки.