Можно ли перевести Ubuntu в состояние гибернации из Suspend, также называемого «Suspend Sedation»?
Я ищу следующее:
когда я закрываю крышку, ноутбук переводится в режим ожидания. Затем, по прошествии заданного времени (даже если аккумулятор разряжается), если я все еще не использую его, он должен перейти в режим гибернации для экономии заряда аккумулятора.
Например, мой ноутбук настроен на переход в режим ожидания, когда я закрываю крышку. Если я не использую его в течение всего дня, батарея разряжается, потому что даже в режиме ожидания оборудование все еще потребляет небольшое количество энергии, и батарея в конечном итоге разряжается. Я хочу сказать Ubuntu, что даже если он приостановлен, он все равно должен войти в Hibernate после нескольких часов бездействия.
Windows может сделать это. Ubuntu может быть запрограммирован на переход в режим ожидания или спящий режим по таймеру, но не в обоих случаях.
источник
Ответы:
В Ubuntu 18.04 это намного проще. В systemd доступен новый режим suspend-then-hibernate . Чтобы начать использовать эту функцию, вам нужно создать файл /etc/systemd/sleep.conf со следующим содержимым:
Затем вы можете проверить это командой:
Вы можете редактировать,
HibernateDelaySec
чтобы уменьшить задержку в спящем режиме.Если все работает нормально, вы можете изменить Lid Close Action, для этого вам нужно отредактировать файл /etc/systemd/logind.conf
Вам нужно найти опцию
HandleLidSwitch=
, раскомментировать ее и изменить наHandleLidSwitch=suspend-then-hibernate
. Затем вам нужно перезапустить службу systemd-logind (предупреждение! Ваш пользовательский сеанс будет перезапущен) следующей командой:Вот и все! Теперь вы можете использовать эту красивую функцию.
источник
Решение этого простое. Во-первых, после приостановки и возобновления программа pm-suspend выполняет ряд сценариев в
/etc/pm/sleep.d
и/usr/lib/pm-utils/sleep.d
. Поэтому мое решение состоит в том, чтобы добавить скрипт, который выполняет следующее:Вот скрипт, который делает это. Назовите его
0000rtchibernate
и поместите в/etc/pm/sleep.d
каталог (значение 0000 важно, чтобы скрипт выполнялся сначала при приостановке, а затем при возобновлении).Надеюсь, этот код появится на этой доске объявлений (это мой первый пост здесь).
Измените значение тайм-аута
autohibernate=7200
вверху, чтобы вы могли поспать сколько угодно секунд, прежде чем перейти в спящий режим. Текущее значение выше - 2 часа. Обратите внимание, что ваш ноутбук БУДЕТ просыпаться в это время на несколько секунд, пока он выполняет функцию гибернации.Так что, если вы планируете положить свой ноутбук в чехол, не приостанавливайте, а вместо этого переходите в спящий режим. В противном случае ваш ноутбук может перегреться в ESP. если он находится в плотно прилегающем футляре (хотя он будет включен только от нескольких секунд до минуты).
Я использовал этот метод в течение последних нескольких дней, пока он был успешным (и спас меня от разряженной батареи сегодня днем). Наслаждаться.
Для других дистрибутивов Linux , что использование
systemd
и более новые версии Ubuntu это должно работать , если вы поместите скрипт в/usr/lib/systemd/system-sleep
вместо/etc/pm/sleep.d
. Также замените/usr/sbin/pm-hibernate
команду наsystemctl hibernate
.источник
Чтобы объяснить, как это работает (это похоже на Windows) простыми словами: машина не выходит из режима ожидания, когда батарея разряжается, чтобы иметь возможность сохранить состояние машины в раздел подкачки, она сразу сохраняет все в раздел подкачки в режиме ожидания, и когда батарея разрядится, она восстановится после загрузки состояния из раздела подкачки (как это было бы в случае перехода в спящий режим).
AFAIK linux будет / должен использовать гибридный режим ожидания / спящий режим вместо «нормального» режима ожидания, если он знает, что он работает на вашем оборудовании. Также возможно, что это отключено в настоящее время из-за слишком большого количества ошибок или чего-то ...;)
Если вам нравится экспериментировать, возможно, вы сможете увидеть, можете ли вы получить какие-либо хорошие результаты с pm-suspend-hybrid .
Если следующее говорит, что вам повезло, то теоретически в вашей системе поддерживается гибридная приостановка:
источник
Вы можете быть заинтересованы в s2both . Это предусмотрено пакетом
uswsusp
в Ubuntu 10.10. Он приостанавливается на диск, но вместо выключения системы вместо этого переводит его в режим S3, который является режимом питания, обычно связанным с опцией «Suspend» в Ubuntu. pm-suspend-hybrid - еще один инструмент, который делает то же самое.Чтобы сделать это автоматизированным при закрытии крышки, взгляните на следующее руководство, которое позволяет запускать произвольный скрипт при обнаружении события крышки:
http://ubuntuforums.org/showthread.php?t=1076486
Если у вас есть ThinkPad,
tpctl
справочная страница для ссылки ссылается на аргумент--pm-sedation-hibernate-from-suspend-timer
, который, кажется, обеспечивает функцию, которую вы ищете. Я бы предостерег вас от попыток сделать это на оборудовании, отличном от ThinkPad.Для справки я просмотрел man-страницу hibernate.conf ; у этого, казалось, не было никаких соответствующих вариантов, но могло бы стоить второго чтения.
источник
Ubuntu 16.04 - из режима ожидания / сна в спящий режим через заданное время
Кажется, что в Ubuntu 16.04 все немного по-другому, поэтому я предпринял следующие шаги:
Убедитесь, что Hibernate работает должным образом при запуске
Скопируйте оригинальный
suspend.target
файл:Затем отредактируйте файл
/etc/systemd/system/suspend.target
и добавьте строку:в
[Unit]
разделе этого файла.Создайте файл
/etc/systemd/system/delayed-hibernation.service
со следующим содержимым:/etc/delayed-hibernation.conf
для скрипта со следующим содержимым:Создайте сценарий, который на самом деле выполняет тяжелую работу.
Создать файл
/usr/local/bin/delayed-hibernation.sh
с содержанием:Это заняло у меня довольно много времени, пока я не написал этот сценарий, основанный на других ответах в этой теме, таких вещах, которые я нашел в Интернете, таких как https://bbs.archlinux.org/viewtopic.php?pid=1554259.
Моя версия скрипта пытается справиться со многими проблемами, такими как снова перейти в режим ожидания, если гибернация не была успешной, но не просыпаться снова по истечении заданного времени снова и снова.
Последний шаг, который я предполагаю, будет просто выполнить
чтобы убедиться, что новый сервис / конфигурации используются.
Чтобы проверить сервисный журнал, вы можете использовать:
или для полного журнала использования сервиса:
Обычный журнал, который я получаю от работающей службы:
Так что это будет, я надеюсь, что это действительно кому-то поможет, поскольку я потратил несколько дней, пытаясь найти правильную комбинацию конфигураций и версий скриптов, чтобы эта удобная функция работала.
источник
/bin/systemctl hibernate
всегда возвращало бы 1 при запуске в сценарии systemd, даже если оно отлично работает в командной строке.На всякий случай, если что-то пойдет не так во время,
pm-hibernate
я бы предпочел приостановить работу компьютера, а не запускать его. Таким образом, вы можете использовать:источник
Вот обновленная версия ответа Дерека Прессналла, который работает с systemd и включает предложение Элии Кагана , просто поместите его в /usr/lib/systemd/system-sleep/delayed_hibernation.sh и сделайте его исполняемым:
источник
Вот мой рецепт (проверял его на двух ноутбуках Ubuntu 16.04):
Поместите этот скрипт туда, куда вам нравится (я поставил его в root
/syspend.sh
) и сделайте его исполняемым (chmod +x /suspend.sh
)Затем создайте цель systemd:
# touch /etc/systemd/system/suspend-to-sleep.target
вставьте этот контент:Затем включите его
# systemctl enable suspend-to-sleep.target
.Я столкнулся с проблемой на одном из ноутбуков: закрытие крышки не сработало. Это было связано с xfce4-power-manager. Есть два способа обойти эту проблему. Первый - отредактировать
/etc/systemd/logind.conf
файл и заменитьHandleLidSwitch=ignore
наHandleLidSwitch=suspend
. Но это будет общесистемно, поэтому я просто добавил символическую ссылку в свой скрипт# ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate
источник
Еще один более распространенный обходной путь, который вы можете использовать
hybrid-sleep
(как это делает Mac OS). Если ваш компьютер поддерживает спящий режим, вы можете использовать эту функцию:Эта команда должна приостановить и отправить на диск (в спящий режим) компьютер. Через некоторое время компьютер выключится (при включении он будет использовать файлы гибернации для пробуждения).
PS: я знаю, что это не совсем то, что опубликовал ОП, но это довольно близко
источник
Не забудьте chmod + x этот файл, сделайте его исполняемым.
Есть другое решение без rtcwake, использующее wakealarm в / sys / class / rtc / rtc0. Используйте устаревший код в pm-functions (/ usr / lib / pm-utils) после комментариев #, поскольку ядро не поддерживает напрямую ..., (потому что текущее ядро (после 3.6 что-то) поддерживает напрямую). Верните этот код и вставьте часть do_suspend () вместо do_suspend_hybrid ().
Устаревший код (приостановить, а затем перейти в спящий режим при вызове suspend_hybrid):
Рекомендуемые. Еще проще использовать uswsusp, в то же время максимизируя преимущества s2both, т.е. s2both при приостановке. Поместите возвращенный код в do_suspend () часть модуля uswsusp (/usr/lib/pm-utils/module.d).
Возвращенный код (suspend_hybrid, когда вызывается suspend):
С помощью uswsusp мы можем видеть ход приостановки / гибернации и обратный процесс, отображаемый в тексте, даже мы можем прервать его, нажав клавишу backspace. Без uswsusp suspend / hibernate просто раздражающе появляется-исчезает, особенно когда срабатывает wakealarm и выполняется hibernate (s2disk в uswsusp). Установите период сна до гибернации в обычном месте в файле pm-functions.
Вот мод uswsusp: (помните, этот модуль вызывается из pm-функций, поэтому вставленные переменные одинаковы)
источник