Как спящий режим на Ubuntu 16.04?

44

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

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

задан Mahyar 05.05.2016 в 21:01
источник

9 ответов

39

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

sudo pm-hibernate 

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

Если это не работает, проверьте, не превышает ли ваш размер свопа, как ваша оперативная память.

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

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

Он открывает nano с пустым файлом. Скопируйте строки ниже и вставьте их в окно 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.

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

    
ответ дан NirajW 02.09.2016 в 08:01
24

Спящий режим с использованием systemctl и его работа в жестких случаях

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

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

sudo systemctl hibernate

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

Ваш раздел подкачки или файл подкачки, возможно, должен быть того же размера, что и RAM, чтобы разрешить спящий режим, но есть хорошая вероятность, что вы сможете спящий режим, если он равен по меньшей мере 2/5 размерам ОЗУ, согласно < a href="https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate#About_swap_partition.2Ffile_size"> страница Arch wiki , поэтому сначала попробуйте выполнить другие шаги, прежде чем увеличивать своп размер.

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

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

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"

Это помогло мне понять, что происходит с ошибкой в ​​возобновлении спячки.

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

sudo modprobe -r brcmfmac
sudo systemctl hibernate

в возобновлении I снова вставьте модуль

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

    
ответ дан Zanna 05.09.2016 в 09:36
16

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

Что нужно проверить

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

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

  1. Убедитесь, что вы не используете разделы btrfs . Да . Из моего теста я обнаружил, что если у вас есть разделы btrfs , спящий режим не будет работать. Удаление или изменение типа раздела на 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
    

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

ответ дан Anwar 03.09.2016 в 05:12
3

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

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

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

В моем случае (новая установка 16.04.1 на машине, которая всегда поддерживала спящий режим), вызов устаревшего sudo pm-hibernate , похоже, ничего не сделал, и обновленный метод systemd, 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 hack. Похоже, что systemd фактически угадывает /sys/power/disk , что система не могла спячки.

    
ответ дан Marc 11.01.2017 в 07:50
2

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

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

    
ответ дан kelvinelove 06.05.2016 в 09:53
2

Развернувшись на мой собственный комментарий к ответу 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

         

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

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

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

EDIT: Gunnar отметил, что этот файл перезаписывается, если определенный пакет обновляется, поэтому в зависимости от ваших намерений это скорее всего не лучшее решение.

Источник: Ссылка     

ответ дан fgblomqvist 24.08.2016 в 03:47
2

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

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

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

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

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

Удачи!

    
ответ дан richbl 14.11.2016 в 01:34
1

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

    
ответ дан Aiphee 18.11.2016 в 08:54
0

Вам нужно вручную включить его с небольшими усилиями. По умолчанию он отключен.

Ссылка

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

    
ответ дан Mookey 05.05.2016 в 21:39