Используйте кофеин для предотвращения сна на крышке рядом с аккумулятором

41

Нативная caffeinateутилита не работает, чтобы препятствовать тому, чтобы мой macbook спал, когда я закрываю дисплей. Вместо этого система не работает, и различные сетевые службы (VPN, общие экраны, VOIP-звонки, клиенты для обмена сообщениями, передача файлов) перестают работать, пока я иду от своего рабочего стола до моей встречи менее чем за 5 минут.

Ходьба с полуоткрытой крышкой ноутбука затрудняет его безопасную переноску с кофе, и это явно не круто.

Нативная caffeinateутилита предназначена для обработки этого как удобной замены pmset, но, похоже, не предназначена для работы при отключении от сети переменного тока.

Документы через man caffeinate

-s Создайте утверждение, чтобы система не спала. Это утверждение действительно только тогда, когда система работает от сети переменного тока .

Ищете нативную альтернативу InsomniaX или nosleep .

Функция тайм-аута очень важна, так что я избегаю случайной упаковки моего ноутбука-нежити в сумку, что может привести к беспорядку. ( caffeinate -tуказывает значение времени ожидания в секундах)

Вот
источник
Я боюсь , что нет родной альтернативы, как MacBook должна идти спать , когда вы закрываете его. : - /
Asmus
2
Прогуливаясь с MacBook является именно поэтому я также хочу решение для предотвращения сна , когда крышка закрыта.
theonlygusti
Вы попробовали вариант -t, как caffeinate -t 3600? По моему опыту, это работает, даже если MacBook работает от батареи.
Цян Сюй
Спасибо за предложение, не работал на начальных попытках. Я что-то пропустил? Проверено 1) caffeinate -t 36002) Закройте ноутбук 3) Подождите 5 с 4) Откройте ноутбук, чтобы найти экран входа в систему и отключенные сетевые службы.
здесь
@ Здесь я не пытался закрыть крышку. Я просто запустил команду с -tпараметром, когда мой MacBook работает от батареи, и он не пошел спать. Я не пробовал с закрытой крышкой, но похоже, что MacBook будет вынужден спать, как только вы закроете крышку. Извините за мое недоразумение. Я думал, что вы ищете способ заставить его работать, когда он работает только от батареи, без закрытой крышки.
Цян Сюй

Ответы:

37

Это не идеально, но вот решение. Чтобы ноутбук не спал, когда крышка закрыта и вы работаете от батареи, выполните следующие команды:

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, так что вы можете назначить ему горячую клавишу, а что нет; Я попробую это, если мне когда-нибудь надоест запускать это из командной строки.

Джо Касадонте
источник
6
Круто! Большое спасибо! Предложение / упрощение: я не думаю, что вам нужно менять sleepнастройки. Просто включите disablesleepи выключите. pmset -a disablesleep 1и pmset -a disablesleep 0отлично работает для меня. Мой MacBook не засыпает, когда я закрываю крышку. Все остальные настройки остаются прежними.
jcsahnwaldt говорит GoFundMonica
Пользователь Github iccir создал бесплатное приложение под названием Fermata, которое использует этот трюк под капотом и красиво оборачивает его иконкой меню, таймером и т. Д. Я только что попробовал его на Мохаве (10.14.2), и он отлично работал для меня. github.com/iccir/Fermata
Алекс Райан
5

Пользователь Github iccir создал очень удобное небольшое бесплатное приложение для работы с менубаром под названием Fermata, которое делает именно то, что вам нужно: держит MacBook в активном состоянии с закрытой крышкой и позволяет установить время ожидания.

Я только что попробовал это на Мохаве (10.14.2), и он отлично работал для меня. https://github.com/iccir/Fermata

Алекс Райан
источник
5

Там нет родной способ сделать это. Вот что я получил после некоторых поисков и испытаний:

введите описание изображения здесь

Заметка:

  • Не удалось загрузить расширение ядра Nosleep на High Sierra
  • Закрытый SPI НЕ поддерживается Apple после High Sierra. Фермата перешел наpmset метод после версии 1.1
  • Возможно, вам придется отключить Gatekeeper, чтобы позволить бессонницу работала как положено.
  • Другие приложения, которые я пробовал, не работают с закрытой крышкой
Simba
источник
1

Вы пробовали это приложение ? Я нахожу это очень полезным именно для того, что вы ищете.

Я уверен, что у него есть функция тайм-аута, которую вы установили в настройках приложения.

Митчелл Д
источник
6
Спасибо @ mitchell-d. Вопрос специально задает нативное решение, такое как кофеинат. Существуют и другие приложения, предлагаемые в разделе «Есть ли какой-нибудь способ установить macbook-pro-not-sleep-at-you-close-the-lid». Тем не менее, я попробовал приложение с кофеином, которое вы рекомендуете делать. не мешайте моему macbook спать, когда я закрываю крышку.
здесь