Впервые я столкнулся с тем, что в режиме сна Макбук на самом деле не спит, когда летел в самолёте. Ноутбук лежал в рюкзаке на багажной полке, а я собирался послушать подкаст со смартфона. Включил наушники и они сразу подцепились к устройству, однако, iPhone ещё был в авиарежиме и bluetooth выключен.
Тут я догадался, что наушники соединились со спящим Маком и если бы я его не выключил, то он бы на протяжении 6 часов полёта слушал беспроводные соединения, расходуя батарею попусту.
Думаю, вы понимаете, что выключение ноутбука приносит ряд неудобств — все закрытые программы нужно открывать заново. Пусть даже MacOS это сделает за вас, то всё равно состояние приложений измениться и не получится продолжить работу с того же места.
Как заставить Макбук глубоко заснуть?
Гибернация — режим сна, когда состояние памяти сохраняется в файл на диске и питание полностью отключается, заряд батареи не расходуется.
На современных маках с ARM-процессорами M1, M2, M3 исчез пункт меню Гибернация, есть только Сон и Выключение. Как же нам вернуть глубокий сон, «заботливо» отключенный разработчиками из Купертино? Для этого нам понадобится Терминал.
Как запустить Terminal
- Открываем Finder переходим в раздел Программы, в нём находится папка Утилиты. Запустите приложение Терминал.app
- Второй способ через Spotlight. Сочетание клавиш — ⌘+␣ (Command+Пробел). В строке поиска вводим Терминал на русском или английском языке.
Включаем гибернацию на Маке
Для включения глубокого сна мы будем использовать утилиту командной строки pmset. Я уже писал более подробно про неё.
Чтобы узнать какой режим сна включен у вас, выполните в Терминале команду:
pmset -g
Параметр pmset hibernatemode может принимать на Маке несколько значений:
- 0 — обычный сон, все данные хранятся Рекомендуется для компьютеров постоянно работающих от сети, таких как iMac, Mac mini, Mac Studio,
Mac Pro - 3 — безопасный сон. В дополнение к памяти, данные сохраняются на диск и в случае полного разряда батареи они не потеряется. Такая настройка рекомендуется для всех современных MacBook Air и MacBook Pro
- 25 — режим гибернации. Работает на всех Маках выпущенных после 2005 года. В таком режиме данные из памяти сохраняются на диск, а сама память вместе с процессором отключаются от питания, ноутбук выключается.
В терминале вводим команду и включаем гибернацию:
sudo pmset hibernatemode 25
Казалось бы всё, результат достигнут, но… пользоваться неудобно
Включение гибернации на Макбуке по требованию
При использовании Макбука гибернация не так часто нужна. А переключать режимы сна вручную не очень удобно.
Предлагаю вам реализацию удобного формата гибернации при помощи Быстрых команд. Так мы сможем отправлять ноутбук в глубокий сон только когда нам нужно, а при обычном использовании будет работать привычный безопасный сон.
Создаем ярлык гибернации
Открываем приложение Команды (Shortcuts), в разделе «Быстрые действия» нажимаем «+» (плюс). В открывшемся ярлыке задаём название и выбираем цвет и тип ярлыка.
В первую очередь добавляем действия по выключению WiFi и Bluetooth. Затем добавляем элемент «Запустить Shell-скрипт», включаем галочку «Запустить от имени администратора» и вставляем следующие строки:
sudo pmset hibernatemode 25 standbydelaylow 0 standbydelayhigh 0 lidwake 0 womp 0 acwake 0 tcpkeepalive 0
pmset sleepnow
Параметры питания, которые мы изменили:
- standbydelaylow — количество секунд, после которого система входит в режим cна (гибернации) при низком заряде батареи
- standbydelayhigh — количество секунд, после которого система входит в режим cна (гибернации) при высоком заряде батареи
- lidwake 0 — запрет просыпаться при открытии крышки Макбука
- womp 0 — запрет пробуждения компьютера при получении магического пакета через сетевое соединение (в нашем скрипте нет отключения от мобильного и/или проводного интернета).
Магический пакет — это определенный вид сетевого пакета, который может быть отправлен на устройство в сети, чтобы активировать его и пробудить его из состояния сна - acwake 0 — не просыпаться, при подключении кабеля питания. Раз мы отправили Мак в глубокий сон, то не будем будить его при зарядке батареи
- tcpkeepalive 0 — отключать все активные сетевые соединения во время сна. Параметр необходим, чтобы существующее соединение не мешало уйти в режим гибернации
- pmset sleepnow — команда заставляет ноутбук заснуть немедленно
После применения этих настроек ваш Мак вернётся к работе только после нажатия кнопки питания.
Возвращаем всё как было
Нам надо, чтобы после пробуждения Мак работал как и прежде: засыпал и просыпался быстро.
В нашу последовательность команд добавляем действие «Ожидание» длительностью 30 секунд. Этого времени, как правило, достаточно, чтобы Макбук успел уйти в глубокий сон и затем, при пробуждении, не приходилось долго ждать включения сетевых интерфейсов и возобновления настроек.
Далее добавляем действия по включению WiFi и Bluetooth и Shell-скрипт от имени администратора.
sudo pmset hibernatemode 3 standbydelaylow 180 standbydelayhigh 2400 lidwake 1 womp 1 acwake 1 tcpkeepalive 1
Считаю, вы уже сами сможете разобраться, что делает команда. Разве что уточню, что 180 секунд — это 3 минуты.
Последняя часть шел-скрипта не является обязательной, она сбрасывает кэш DNS и очищает кэш служб в памяти. Я их добавил с целью решения редких проблем с интернетом, после выхода из глубокого сна и подключения к новой сети в каком-нибудь аэропорту.
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
sudo purge
На случай, если у вас возникнут сложности с самостоятельным созданием ярлыка для гибернации, можете скачать готовый набор команд, описанный в статье.
Чтобы проверить работу скрипта, нажимаем кнопку ▶️ в заголовке окна.
Важно помнить, что после запуска ярлыка гибернации не следует трогать тачпад, мышь или клавиатуру. Не смотря на то, что команда pmset sleepnow требует от системы, чтобы она немедленно уснула, необходимо несколько секунд, чтобы MacOS подготовился к процессу гибернации
Добавляем ярлык в удобное место
Строка меню
Если в заголовке окна нажать пиктограмму ⓘ, то откроется раздел с настройками отображения. Включив настройку «Закрепить в строке меню», можно вывести нашу Быструю команду на самый верх.
Dock
Для создания ярлыка в панели запуска Dock, нужно закрыть Быструю команду. В списке команд вызвать контекстное меню тапом двумя пальцами на тачпаде или нажать правую кнопку мыши, затем выбрать пункт «Добавить в Dock».
Теперь ярлык команды Hibernate появился в панели запуска.