Как я могу перейти в спящий режим на Ubuntu 16.04?


87

Как мне успешно перейти в спящий режим Ubuntu 16.04?

Я испробовал почти все решения в Интернете, но ни одно из них не помогло. Я обнаружил, что моя проблема почти полностью похожа на эту


2
Возможный дубликат Как включить гибернацию?
DJCrashdummy

Работает ли sudo pm-hibernate?
Pilot6

2
разве ситуация не изменилась с systemd? теперь мы должны использовать это, systemctl hibernateтак что, возможно, не дурак ... или, по крайней мере, обновленный ответ может потребоваться, чтобы сделать старый вопрос действительным для дурака
Zanna

Какую версию ядра вы используете? Введите uname -rв терминале (извините, если вы уже знали это).
WinEunuuchs2Unix

пожалуйста, отредактируйте свой вопрос и добавьте вывод, free чтобы мы могли определить, достаточно ли у вас настроек свопинга для успешного спящего режима.
Старейшина Гик

Ответы:


63

Вы можете использовать

sudo pm-hibernate 

чтобы проверить, работает ли hibernate в вашей системе ( это приведет к гибернации вашего компьютера ).

Если это не работает, убедитесь, что размер вашего подкачки не меньше размера вашей оперативной памяти.

Чтобы добавить опцию в меню настроек, вы можете создать файл конфигурации. Откройте окно терминала и выполните эту команду:

sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Открывается нано с пустым файлом. Скопируйте строки ниже и вставьте их в окно nano.

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes

Затем сохраните изменения и закройте nano и перезагрузите систему, чтобы отобразить доступный Hibernate в «Параметры электропитания».

Ссылка: Как мне перевести компьютер в спящий режим? в официальной документации для Ubuntu 16.04.

Надеюсь, что это работает. Это сработало для меня после попытки всех других вариантов.


Нам нужно перезагрузить компьютер после редактирования файла, чтобы доступный Hibernate появился в разделе «Параметры электропитания».
Jus12

21
sudo pm-hibernate немедленно убил мою систему без предупреждения. Вы должны сказать людям, что это произойдет.
Яир

лучший ответ . Это также работает на 17.4 и 17.10.
Саураб Бхандари

1
Этот ответ в сочетании с ответом на добавление "resume =" в GRUB_CMDLINE_LINUX_DEFAULT решил эту проблему для меня - спасибо!
Кристоф

В моем разделе подкачки 17 ГБ и 16 ГБ ОЗУ, почему он не работает? Кажется, что он находится в спящем режиме, потому что для выключения компьютера требуется вечность, тогда как, если я делаю «выключение», он выключается почти сразу. Но когда я снова включаю свой компьютер, все закрывается, и мне приходится начинать все сначала. Это не спящий вообще. Почему это не может быть так просто, как в Windows? Мне нужна помощь, если у кого-то есть идеи о том, как мне заставить его перейти в спящий режим.
user1271772

63

Использование гибернации systemctlи заставить ее работать в сложных случаях

Для меня pm-hibernateвсегда не получается. После некоторых настроек я смог перейти в спящий режим, используя интерфейс systemd (init system в 16.04 и выше). Мне также удалось заставить его работать 17.04 с файлом подкачки. Это тематическое исследование может быть полезно для других с проблемами.

Первая попытка:

sudo systemctl hibernate

Если это не удается, начните устранение неполадок: в состоянии гибернации (HTD или ACPI S4) состояние машины записывается на диск, поэтому для его сохранения не требуется никакого питания. Состояние записывается либо в раздел подкачки, либо в файл подкачки. Примечание: если вы используете Btrfs, НЕ пытайтесь использовать файл подкачки, так как это может привести к повреждению файловой системы.

Ваш раздел подкачки или файл подкачки может потребоваться иметь тот же размер , как RAM , чтобы позволить спящий режим, но есть хороший шанс , что вы будете в состоянии гибернации , если он , по крайней мере 2/5 размер оперативной памяти, в соответствии с вики - страницу Arch , поэтому попробуйте другие шаги, прежде чем увеличивать размер свопа.

Если ваша проблема заключается в том, что вы получаете чистую загрузку вместо ожидаемого возобновления, как минимум вам, скорее всего, потребуется установить параметр загрузки, чтобы найти образ диска

Найдите свой раздел подкачки:

grep swap /etc/fstab

для меня это возвращает (частичный вывод)

# swap was on /dev/mmcblk0p3 during installation

где /dev/mmcblk0p3указывается раздел

Добавьте параметр загрузки:

sudoedit /etc/default/grub

В начале строки GRUB_CMDLINE_LINUX_DEFAULTдобавьте resume=/dev/YourSwapPartitionраздел в кавычки (замените на раздел, который вы определили ранее). Используя мой пример:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3" 

Каждый раз, когда вы изменяете этот файл, вы должны запускать, sudo update-grubиначе изменения не будут иметь никакого эффекта.

Теперь вам нужно перезагрузиться. Затем вы можете попробовать перейти в спящий режим, введя команду:

sudo systemctl hibernate

Для возобновления нажмите кнопку питания, и система загрузится.

Если у вас все еще есть проблемы, начните отладку.

Ниже я привожу мой пример в качестве примера, но подробную информацию об отладке S-состояний можно найти в этом блоге, а также в этом .

Установите еще несколько параметров загрузки, чтобы получить больше информации. Удалите quietи splashи добавьте, initcall_debugи no_console_suspendэто приведет к тому, что системные вызовы init будут напечатаны на консоли, чтобы вы могли наблюдать, что происходит не так. Я установил это:

GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"

Что помогло мне увидеть, что пошло не так при выходе из спящего режима.

В моем случае после возобновления я потерял WiFi, и ядро ​​явно было расстроено, так как большинство команд (например, чтение чего-либо из /sys, перезагрузка модулей или любая systemctlкоманда) не работали бы - процесс, казалось бы, запускался и просто зависал (все это было бы нормализовался после перезагрузки конечно). Наблюдая за тем, как система очень медленно выключалась и читая все сообщения отладки, я заметил, что с «brcm» было много проблем, поэтому я догадался, что виноват мой модуль беспроводного драйвера Broadcom. Конечно же, я скорректировал процедуру гибернации, чтобы сначала выгрузить модуль:

sudo modprobe -r brcmfmac
sudo systemctl hibernate

на резюме я вставляю модуль

sudo modprobe brcmfmac

И все работало отлично. Я также должен занести в черный список btsdioмодуль, который кажется несовместимым сbrcmfmac


Обновление: гибернация с использованием файла подкачки 17.04.

Еще раз с помощью вики-страницы Arch и некоторыми дополнительными изменениями мне удалось заставить работать спящий режим 17.04 с файлом подкачки. Для этого потребовался дополнительный загрузочный параметр, resume_offset=nгде n - это первое число physical_offsetв выводе sudo filefrag -v /swapfile:

$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   .... 

Поэтому дополнительным параметром загрузки в моем случае является resume_offset=34816. Вам все еще нужно установить загрузочный параметр для возобновления раздела. Это будет корневой раздел (или любой другой раздел, в котором находится ваш файл подкачки). Теперь мои параметры:

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"

Где /dev/mmcblk1p2мой корневой раздел (у вас, скорее всего, будет что-то вроде /dev/sda2).

Во время возобновления я видел загрузку изображения успешно, но в моем случае (просто пример - YMMVAPD) тогда еще несколько драйверов ( i2c_designware) выдавали некоторые ошибки, и я получал полное зависание системы при возобновлении. Гибернация работает, если я выгружаю эти модули в дополнение к brcmfmac, но система быстро становится непригодной для использования без этих модулей. Поэтому я создал своего рода скрипт для выгрузки неисправных модулей и немедленной их вставки при возобновлении:

# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac

Когда я хочу впасть в спячку, я бегу sudo bash script. Это прекрасно работает.


TL; DR

Используйте systemd, установите загрузочный параметр для возобновления свопинга, идентифицируйте ошибочные драйверы и выгрузите их перед началом спящего режима. Если система не может работать долго без этих модулей или вам нужно выгрузить несколько, может быть проще использовать простой скрипт для запуска гибернации.


Откуда эта информация, что 2/5 объема ОЗУ может быть достаточно и при каких обстоятельствах? У меня есть пользовательская опция в Gnome, "Hibernate", и она, похоже, впадает в спящий режим, но при пробуждении она не работает должным образом. У меня есть раздел подкачки 8GB и 32GB RAM. Это не 2/5, но перед созданием файла подкачки (или раздела) объемом 32 ГБ было бы неплохо узнать.
cslotty

@cslotty Я получил эту информацию из Arch Wiki IIRC - дайте мне знать, если вам это удастся,
Zanna

Спасибо, @ Занна. Я обнаружил, что это на самом деле не спящий режим, что я хочу, а приостановить (S3 / STR) - sry.
cslotty

@cslotty не стоит беспокоиться. В этом случае своп не является вашей проблемой, поскольку он не связан.
Занна

1
Спасибо, мне нужен был синтез этого ответа, а также совет по отключению SecureBoot, чтобы он заработал в конце.
oligofren

20

Я думаю, как включить hibernate для 16.04, ответ известен всем, как описано в Ubuntu Wiki (см. Ниже, если вам нужны шаги). Но вещи, которые нуждаются в проверке, не полны, я думаю. По крайней мере, это то, что я нашел.

Вещи, чтобы проверить

Из моих собственных тестов я нашел по крайней мере одну дополнительную проверку, которую вы должны выполнить. Я не нашел об этом нигде в Интернете.

Вот некоторые проверки -

  1. Убедитесь, что вы не используете какие-либо разделы btrfs . Да . Из моего теста я обнаружил, что если у вас есть разделы btrfs , Hibernate не будет работать. Удаление или изменение типа раздела на ext4мне не помогло. Мне нужно было удалить btrfs-toolsпакет.

    sudo apt-get purge btrfs-tools
    

    Возможно, вы захотите проверить другие новые типы разделов, которые не были хорошо протестированы. Без удаления пакета, черный список драйвера также может работать, но я не проверял это.

  2. Также вам необходимо убедиться, что у вас достаточно большой раздел подкачки, чтобы вместить содержимое оперативной памяти. Если объем оперативной памяти составляет 4 ГБ, объем подкачки должен быть не менее 4 ГБ (для обеспечения безопасности следует выделить еще несколько МБ).

Шаги по включению гибернации

Это включает в себя эти шаги

  1. Создайте файл как root в /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla

    sudo -i nano /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
    
  2. Поместите это содержимое в этот файл

    [Re-enable hibernate by default in upower]
    Identity=unix-user:*
    Action=org.freedesktop.upower.hibernate
    ResultActive=yes
    
    [Re-enable hibernate by default in logind]
    Identity=unix-user:*
    Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
    ResultActive=yes
    
  3. Сохраните файл, нажав Ctrl- O. Выход с Ctrl-X

  4. Перезапустите polkitdдемон

    sudo systemctl restart polkitd.service
    

Это должно включить спящий режим.


2
Спасибо, Анвар. Я подал ошибку # 1619846 и передал вам ваш ответ выше. Есть ли шанс, что вы могли бы предложить более точные изменения / дополнения к этой странице в официальной документации?
Гуннар Хьялмарссон,

1
@GunnarHjalmarsson Я бы предложил это предостережение. Но мне нужно больше тестеров, чтобы это проверить. Дадим вам знать позже
Анвар

Хорошо, тогда давайте поговорим подробнее.
Гуннар Хьялмарссон

Я установил на раздел btrfs и удалил в btrfs-toolsсоответствии с вашими инструкциями. Все еще не может впасть в спячку.
Oxwivi

1
На диске есть только vfatдля UEFI, а btrfsи swap. Я на самом деле подозреваю, что это из-за аппаратного обеспечения (ноутбук AMD). Я собираюсь проверить это в другой системе с помощью btrfs и получить ответ.
Oxwivi

7

Безопасная загрузка

(Я задал похожий вопрос, обращая внимание на ответы на основе systemd, поделившись здесь своим решением для людей, которые следят за этим вопросом)

Это решение основано на темах Fedora (они недавно переключились на systemd, так что там больше материала).

В моем случае (свежая установка 16.04.1 на машине, которая всегда поддерживала спящий режим), вызов устаревшего sudo pm-hibernate, похоже, ничего не делал, и современный системный подход systemctl hibernateвернул бы:

Failed to hibernate system via logind: Sleep verb not supported

Оказалось, что виновата была безопасная загрузка: при установке 16.04 вас спросили, что вы хотите с ним делать (насколько я помню, это новость), и я оставил его включенным, не задумываясь об этом.

На моей машине с включенной безопасной загрузкой cat /sys/power/diskответил:

 [disabled]

После перезагрузки и отключения безопасной загрузки в настройках BIOS (это зависит от компьютера, но обычно довольно просто), я попробовал cat /sys/power/diskи получил:

 [platform] shutdown reboot suspend 

который выглядит лучше. И действительно, вызов systemctl hibernateприводит к успешной последовательности гибернации / оттаивания.

Более того, после этого я увидел гибернацию, доступную в качестве опции в различных местах графического интерфейса, без необходимости какого-либо polkitвзлома. Таким образом, кажется, что на systemdсамом деле угадал, /sys/power/diskчто система не была в состоянии гибернации.


Я сделал именно то, что вы объяснили здесь. Но после того, как я выполнил команду «systemctl hibernate», экран стал черным в течение 3 секунд, после чего на рабочем столе снова появились все мои открытые программы, как и перед выполнением команды. Когда я выполнил команду «cat / sys / power / disk» ... она показала мне этот текст: «[платформа] shutdown reboot suspend test_resume», который похож на результат, когда вы выполнили то же самое со своей стороны, но последний текст : "test_resume". У вас есть идея, что я мог бы попытаться решить мою проблему?
Фоксхард

Не слишком уверен, похоже, что гибернация не работает "из коробки" на вашем оборудовании, поэтому она отключена по умолчанию, как отмечали другие. Возможно, вы захотите начать отдельный вопрос о вашей конкретной проблеме.
Марк

Только наполовину работает для меня. Спит, но вместо того, чтобы просыпаться из спящего режима, переходит к нормальной загрузке, а затем застревает навсегда до жесткого физического отключения.
Мэтт

6

Эта инструкция работала для моей установки Ubuntu 18.04.

  1. sudo apt install hibernate Он установит hibernate и другие зависимости, которые необходимы для hibernate
  2. grep swap /etc/fstab (финг UUID)
  3. sudoedit /etc/default/grub В строке GRUB_CMDLINE_LINUX_DEFAULT = "тихий всплеск" добавьте UUID свопа. Строка выглядит следующим образом GRUB_CMDLINE_LINUX_DEFAULT = "тихий всплеск резюме = UUID свопа"
  4. sudo update-grub
  5. Перезагрузка и после перезагрузки sudo systemctl hibernate. Если все работает нормально, добавьте пункт меню.
  6. sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla Теперь вставьте это:
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes

скопировано с https://askubuntu.com/a/819891/712203

  1. Перезагрузите компьютер
  2. Установите https://extensions.gnome.org/extension/755/hibernate-status-button/

1
вместо добавления фиксированного значения /etc/default/grubрассмотрите возможность обновления с помощью initramfs update-initramfs -u -k allи найдите сообщение вроде The initramfs will attempt to resume from /dev/dm-0. Это автоматически установит резюме устройства.
УКОС

Спасибо, отлично работает на Ubuntu 18.04! Обратите внимание, что если вы впервые используете расширение gnome, вам необходимо установить расширение для браузера и разъем. Это объясняется в ссылке на расширение в верхней части.
Карим Сонбол

4

Расширяя свой комментарий к ответу kelvinelove, файл, который он предлагает редактировать, не существовал в моей системе (свежая версия Ubuntu 16.04). Вместо этого я сделал это:

  1. sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

  2. Посмотрите на эти разделы (они правы друг с другом):

    [Отключить спящий режим по умолчанию в upower] Identity = unix-user: * Action = org.freedesktop.upower.hibernate ResultActive = no

    [Отключить спящий режим по умолчанию в logind] Identity = unix-user: * Action = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key; ResultActive = нет

  3. Измените ResultActive = нет на ResultActive = да для них обоих.

  4. Нажмите Ctrl + O, чтобы сохранить файл.
  5. Перезагрузите компьютер
  6. Опция Hibernate теперь доступна в ваших меню питания.

РЕДАКТИРОВАТЬ: Гуннар указал, что этот файл перезаписывается, если обновляется определенный пакет, поэтому, в зависимости от ваших намерений, это, скорее всего, не лучшее решение.

Источник: http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/


Файл в /etcне должен существовать по умолчанию. Это файл конфигурации, который вы создаете. Редактирование файла, принадлежащего пакету, как вы предлагаете выше, - плохой совет, так как он будет перезаписан при следующем обновлении пакета.
Гуннар Хьялмарссон

@GunnarHjalmarsson Если это так, я бы сказал, что следует указать, что он может не существовать. Я ожидаю большего от ответа Ask Ubuntu с самым высоким рейтингом, чем от ответа «скопировать / вставить эту команду» -> «type this», в котором отсутствует какая-либо проверка того, правильно ли вы поступаете (кроме проверки работоспособности) , Что если кто-то найдет этот ответ через пару лет, но боится попробовать его, поскольку файл пуст, а в инструкциях четко указано, что его нужно добавить в файл, подразумевая, что он существует? Тем не менее, я ценю информацию, добавлю ее в ответ для завершения.
fgblomqvist

1
Честная оценка; Я отредактировал ответ NirajW с этим разъяснением. Следует отметить, что оригинальный источник информации на этой странице говорит о создании .
Гуннар Хьялмарссон

Это прекрасно, ты спас меня, брат :)
Азам Алви

4

Для меня это работает, чтобы установить hibernateпакет, перезагрузиться и затем запустить sudo hibernate-disk. Я уверен, что можно добавить его в меню, но это не стоит времени для меня.


3

Во-первых, я рекомендую вам проверить, поддерживает ли ваша машина режим гибернации, потому что причина, по которой гибернация отключена по умолчанию, заключается в том, что на некоторых машинах она иногда приводит к неприятным результатам. Проверьте свою машину, открыв терминал ( Ctrl+ Alt+ T) и набравsudo pm-hibernate

Ваша машина должна быть в спящем режиме. Разбудите свой компьютер после спящего режима и наблюдайте, ведет ли он себя плохо или работает ли он нормально. Если после спящего режима у вас возникнут какие-либо нарушения, я советую вам не продолжать следующую процедуру. Однако, если он работает просто отлично, продолжайте активировать спящий режим, выполнив это:

sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Отредактируйте открытый файл и добавьте следующие строки:

[Re-enable hibernation]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

После этого перезагрузите компьютер, и после входа вы увидите опцию гибернации, добавленную в меню питания, в правом верхнем углу настроек.


У меня есть ThinkPad -E550, и у него нет проблем с гибернацией, когда у меня установлена ​​ОС Ubuntu 15.1 или Windows8.1. но при использовании Ubuntu 16.04, когда я использую команду "sudo pm-hibernate", он не полностью впадает в спящий режим, и только экран становится черным, а машина все еще включена.
Mahyar

В моем случае команда вообще ничего не делает. Терминал переходит на новую строку и ожидает следующую команду, т.е. предыдущая команда была выполнена. Но это ничего не делаетat all
Aalok

Это не работает для меня. Ubuntu 16.04. Опция Hibernate не появляется и остается отключенной в Настройках -> Питание, что-нибудь еще?
Даниэле Сегато

Редактировать уже существующую политику лучше: zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04
fgblomqvist

Неполное содержание в com.ubuntu.enable-hibernate.pkla. Смотрите ответ, опубликованный NirajW.
Гуннар Хьялмарссон

3

Здесь есть несколько очень полезных ресурсов, которые помогут вам разобраться с некоторыми из наиболее распространенных проблем гибернации в Ubuntu.

В моем случае, при запуске Ubuntu 16.10 на Lenovo u300s, для корректной работы hibernate мне пришлось сделать следующее:

  • Создайте файл подкачки подходящего размера (я обычно устанавливаю размер ~ 1х, но слышал до 1,6х и 2х)
  • Изменить, /etc/default/grubчтобы включить следующую строку:

    GRUB_CMDLINE_LINUX_DEFAULT="splash quiet pci=nomsi RESUME=UUID=92781adb-f2a6-4f15-88fc-e1ce801291dd"
    

RESUME относится к вашему конкретному UUID файла подкачки. В частности, на моей машине pci=nomsiбыла настройка ключа.

Удачи!


Является ли регистр нечувствительным к регистру? Зачем использовать RESUME?
НельсонГон

1

Вы должны вручную включить его без особых усилий. Это было отключено по умолчанию.

http://ubuntuhandbook.org/index.php/2014/04/enable-hibernate-ubuntu-14-04/

Затем, если это не сработает, возможно, это проблема ядра 4.4.0, и вам, возможно, придется обновить ядро.


2
Ответ относится к 14.04, а вопрос к 16.04.
Гуннар Хьялмарссон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.