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

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

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

10 ответов

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

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

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

sudo systemctl hibernate

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

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

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

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 для 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
    

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

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

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

При попытке перевести систему в спящий режим (глубокий сон, когда ОЗУ записывается на диск) возникла следующая ошибка

$ sudo systemctl hibernate
Failed to hibernate system via logind: Sleep verb not supported

Следующие шаги решают проблему (протестировано на Thinkpad X1 Carbon 7th Gen, Ubuntu 19.10). Большинство из них заимствованы отсюда.

  1. Отключите безопасную загрузку в BIOS.
  2. Установите "Состояние сна" на Linux в BIOS. Первоначально эта опция была названа "Modern Standby" в моем BIOS, и мне пришлось выключить ее, если она была отключена, но после имени BIOS имя было изменено на "Sleep State".
  3. Создайте файл подкачки размером с RAM или больше. Здесь задействовано несколько шагов, которые заключаются в следующем.

    а. Отключить своп.

    $  sudo swapoff -a
    

    б. Создайте файл размером больше или равным ОЗУ. У меня 16 ГБ, поэтому:

    $ sudo dd if=/dev/zero of=/swapfile bs=1G count=16
    
    16+0 records in
    16+0 records out
    17179869184 bytes (17 GB, 16 GiB) copied, 19.3685 s, 887 MB/s
    

    c. Установите правильные разрешения для файла:

    $ sudo chmod 600 /swapfile
    

    d. Сделайте файл подкачки:

    $ sudo mkswap /swapfile
    
    Setting up swapspace version 1, size = 16 GiB (17179865088 bytes)
    no label, UUID=3b2e6f0c-ce12-4a84-9044-d99bfba059ea
    

    е. Включите своп и проверьте, правильно ли он настроен:

    $ sudo swapon /swapfile
    $ cat /proc/swaps
    
    Filename                Type        Size    Used    Priority
    /swapfile                               file        16777212    0   -2
    

    f. Чтобы своп загружался после перезагрузки, мы должны добавить его в/etc/fstab. Таким образом, выполните следующую команду, чтобы открыть файл:

    $ sudo gedit /etc/fstab
    

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

    /dev/mapper/vgubuntu-root /               ext4    errors=remount-ro 0       1
    # /boot was on /dev/nvme0n1p2 during installation
    UUID=d265e7c4-1a4f-49c4-af29-fea2543490d7 /boot           ext4    defaults        0       2
    # /boot/efi was on /dev/nvme0n1p1 during installation
    UUID=0004-FB5F  /boot/efi       vfat    umask=0077      0       1
    #/dev/mapper/vgubuntu-swap_1 none            swap    sw              0       0
    /swapfile       none    swap    sw      0       0
    

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

    cat /proc/swaps
    
    Filename                Type        Size    Used    Priority
    /swapfile                               file        16777212    0   -2
    
  4. Теперь пора обновить личинку. а. Запустите эту команду, чтобы открыть grub:

    $ sudoedit /etc/default/grub
    

    б. Найдите, где смонтирован root, выполнив следующую команду.

    $ mount | grep " / "
    
    /dev/mapper/vgubuntu-root on / type ext4 (rw,relatime,errors=remount-ro)
    

    c. Итак, ум установлен/dev/mapper/vgubuntu-root. Найдите UUID этого места, запустив:

    $ sudo blkid
    /dev/mapper/nvme0n1p3_crypt: UUID="AZrE57-dlNc-BiUr-RrTF-SdT2-luVK-vrliNq" TYPE="LVM2_member"
    /dev/mapper/vgubuntu-root: UUID="2331fe68-3e7a-4937-9cfa-74fc7a4b79f6" TYPE="ext4"
    /dev/nvme0n1p1: UUID="0004-FB5F" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="09813156-6b7a-4fc2-b644-a8c6b7d40abf"
    /dev/nvme0n1p2: UUID="d265e7c4-1a4f-49c4-af29-fea2543490d7" TYPE="ext4" PARTUUID="64f5da2f-71d3-4f02-9b1e-3e12d7f6c445"
    /dev/nvme0n1p3: UUID="201acba5-ff20-46ee-9000-34efefef3fbe" TYPE="crypto_LUKS" PARTUUID="16858e70-eb08-4de8-b944-50689cad9d9f"
    /dev/sda1: LABEL="ST64GB" UUID="624AB7B308FE9F38" TYPE="ntfs" PTTYPE="dos"
    /dev/mapper/vgubuntu-swap_1: UUID="af3b29a2-ba6b-44de-89dd-072f4233aaf9" TYPE="swap"
    
    

    UUID в этом случае 2331fe68-3e7a-4937-9cfa-74fc7a4b79f6. Сохраните этот UUID. d. Далее нам нужно найти смещение файла подкачки. Выполните эту команду:

    $ sudo filefrag -v /swapfile
    
    Filesystem type is: ef53
    File size of /swapfile is 17179869184 (4194304 blocks of 4096 bytes)
    ext:     logical_offset:        physical_offset: length:   expected: flags:
      0:        0..   32767:     835584..    868351:  32768:            
      1:    32768..   49151:     868352..    884735:  16384:            
      2:    49152..   81919:     886784..    919551:  32768:  
      ...
    

    Ищем pysical_offset первого блока. В приведенном выше случае это будет835584. Сохраните и этот номер. е. Теперь нам нужно обновить личинку. Выполните следующую команду:

    $ sudoedit /etc/default/grub
    

    Обновите следующий контент. Мы обновляемGRUB_CMDLINE_LINUX_DEFAULT и добавить GRUB_RECORDFAIL_TIMEOUT=0.

    # If you change this file, run 'update-grub' afterwards to update
    # /boot/grub/grub.cfg.
    # For full documentation of the options in this file, see:
    #   info -f grub -n 'Simple configuration'
    
    GRUB_DEFAULT=0
    GRUB_TIMEOUT_STYLE=hidden
    GRUB_TIMEOUT=0
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=2331fe68-3e7a-4937-9cfa-74fc7a4b79f6 resume_offset=835584"
    GRUB_CMDLINE_LINUX=""
    
    # Avoiding grub to show up in boot when resuming from hibernation
    GRUB_RECORDFAIL_TIMEOUT=0
    

    f. После обновления файла grub выполните эту команду:

    $ sudo update-grub
    

Так и должно быть. Теперь вы можете перевести систему в режим гибернации, запустив

$ sudo systemctl hibernate

Эта инструкция работала для моей установки 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

скопировано с /questions/38648/kak-ya-mogu-perejti-v-spyaschij-rezhim-na-ubuntu-1604/38661#38661

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

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

Расширяя свой комментарий к ответу 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/

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

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

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

    GRUB_CMDLINE_LINUX_DEFAULT = "тихий всплеск pci=nomsi RESUME=UUID=92781adb-f2a6-4f15-88fc-e1ce801291dd"

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

Удачи!

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

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

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

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

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

Другие вопросы по тегам