Використовуйте кофеїн, щоб запобігти сну на кришці від акумулятора


41

Родна caffeinateутиліта не працює, щоб запобігти спанню моєї книги, коли я закриваю дисплей. Натомість система спить, а різні мережеві послуги (VPN, скріншоти, VOIP-дзвінки, клієнти для обміну повідомленнями, передача файлів) не спрацьовують, коли я проходжусь від свого робочого столу до своєї зустрічі за <5 хвилин.

Якщо ходити навкруги з навпіл відкритою кришкою ноутбука, це важко безпечно переносити мою каву, і явно не охолоджується.

Вбудована caffeinateутиліта призначена для вирішення цього питання як зручної для користувача заміни pmset, але, здається, створена так, щоб вона не працювала при відключенні від живлення змінного струму.

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

-s Створіть твердження, щоб система не спала. Це твердження справедливе лише тоді, коли система працює від мережі змінного струму .

Шукаєте рідну альтернативу InsomniaX або nosleep .

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


Я боюся, що немає рідної альтернативи, оскільки MacBook повинен спати, коли ви закриєте її. : - /
Асмус

2
Обійдучись із MacBook саме тому, я також хочу рішення щодо запобігання сну, коли кришка закрита.
theonlygusti

Ви спробували варіант -t, як caffeinate -t 3600? За моїм досвідом, він працює, навіть якщо macbook працює від акумулятора.
Цянь Сюй

Дякую за пропозицію, не вдалося виконати початкові спроби. Я щось пропускаю? Перевірено 1) caffeinate -t 36002) Закрити ноутбук 3) Зачекати 5s 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

замінивши "joe" на ваше ім'я користувача. Можливо, ви могли б досягти такого ж результату (тобто, запустивши скрипт без необхідності введення пароля), запустивши скрипт оболонки 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, який використовує цей трюк під кришкою і гарно обертає його значком меню та таймером і т. Д. Я просто спробував це на Mojave (10.14.2), і він відмінно працював для мене. github.com/iccir/Fermata
Алекс Райан

5

Користувач Github iccir зробив дуже зручний маленький безкоштовний додаток для меню "Fermata", який робить саме те, що ви хочете: тримає MacBook прокинувшись із закритою кришкою та дозволяє встановити тривалість очікування.

Я щойно спробував це на Mojave (10.14.2), і він відмінно працював для мене. https://github.com/iccir/Fermata


5

Немає рідного способу це зробити. Ось що я отримав після деяких пошуків та випробувань:

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

Примітка:

  • Не вдалося завантажити розширення ядра Nosleep на High Sierra
  • Приватна SPI НЕ підтримується Apple після High Sierra. Фермата перейшов на pmsetметод після версії 1.1
  • Можливо, вам доведеться відключити функцію Gatekeeper, щоб Insomnia працювала так, як очікувалося.
  • Інші програми, які я спробував, не працюють із закритою кришкою

1

Ви спробували цю програму ? Я вважаю це дуже корисним саме для того, що ти хочеш.

Я впевнений, що він має функцію тайм-аута, яку ви встановите в налаштуваннях програми.


6
Дякуємо @ mitchell-d. Питання конкретно запитує нативне рішення, наприклад, кофеїн. Є інші додатки, які пропонуються в " там-будь-який спосіб-встановити-a-macbook-pro-to not not sleep-when-you-close-the-lid". Тим не менш, я спробував додаток кофеїну , який ви рекомендуєте. не заважайте моїй книзі macbook спати, коли я закриваю кришку.
тут
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.