Как успешно спящий режим Ubuntu 16.04?
Я пробовал почти каждое решение в Интернете, но не было действительно полезно. Я нашел свою проблему почти полностью похожей на эту р>
Как успешно спящий режим Ubuntu 16.04?
Я пробовал почти каждое решение в Интернете, но не было действительно полезно. Я нашел свою проблему почти полностью похожей на эту р>
Вы можете использовать
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. р>
Надеюсь, что это сработает. Это работало для меня после того, как вы пробовали все другие варианты.
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
Снова с помощью страницы вики 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
. Это отлично работает.
Используйте systemd, установите параметр загрузки для возобновления смены, определите багги-драйверы и выгрузите их перед началом спящего режима. Если система не может работать долго без этих модулей или вам нужно выгрузить несколько, может быть проще использовать простой скрипт для запуска спящего режима.
Я думаю, как включить спящий режим для ответа 16.04, всем известно, как описано в Ubuntu Wiki (см. Ниже, если вам нужны этапы). Но вещи, которые нуждаются в проверке, не являются тщательными, я думаю. По крайней мере, это то, что я нашел.
Из моих собственных тестов я, по крайней мере, нашел один дополнительный чек, который вы должны выполнить. Я не нашел об этом нигде в Интернете. Р>
Вот некоторые проверки -
Убедитесь, что вы не используете разделы btrfs . Да . Из моего теста я обнаружил, что если у вас есть разделы btrfs , спящий режим не будет работать. Удаление или изменение типа раздела на ext4
не помогло мне. Мне нужно было удалить пакет btrfs-tools
.
sudo apt-get purge btrfs-tools
Возможно, вы захотите проверить другие типы разделов, которые не прошли проверку. Без удаления пакета черный список драйверов также может работать, но я не тестировал это.
Также вам нужно проверить, что у вас есть раздел подкачки, достаточно большой для хранения содержимого ОЗУ. Если ваша оперативная память составляет 4 ГБ, своп должен быть не менее 4 ГБ (вы должны выделить несколько МБ для обеспечения безопасности). Р>
Он включает следующие этапы
Создайте файл с правами root в /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
sudo -i nano /etc/polkit-1/localauthority/50-local.d/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
Сохраните файл, нажав Ctrl - O . Выход с помощью Ctrl - X
Перезапустите демон polkitd
sudo systemctl restart polkitd.service
Он должен включить спящий режим. Р>
(Я спросил аналогичный вопрос с просьбой для того, чтобы сосредоточиться на ответах на основе 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
, что система не могла спячки.
Во-первых, я рекомендую вам проверить, поддерживает ли ваша машина спящий режим, потому что причина, по которой гибернация отключена по умолчанию, связана с тем, что она иногда имеет неприятные результаты на некоторых машинах. Проверьте свою машину, открыв терминал ( 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, файл, который он предлагает, редактировался в моей системе (свежий Ubuntu 16.04). Вместо этого я сделал это:
sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
р> Ищите эти разделы (они правы друг с другом):
[Отключить спящий режим по умолчанию в upower] Identity = unix-user: * Action = org.freedesktop.upower.hibernate ResultActive = no
[Отключить спящий режим по умолчанию в режиме логина] Identity = unix-user: * Действие = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-зимуют ключ; не ResultActive = нет р>
Измените ResultActive = no на ResultActive = yes для обоих из них.
EDIT: Gunnar отметил, что этот файл перезаписывается, если определенный пакет обновляется, поэтому в зависимости от ваших намерений это скорее всего не лучшее решение.
Источник: Ссылка р>
Здесь есть несколько очень хороших ресурсов, которые помогут вам разобраться с некоторыми более распространенными проблемами спящего режима в Ubuntu.
В моем случае, запуская Ubuntu 16.10 на Lenovo u300s, чтобы спящий режим работал правильно, мне нужно было сделать следующее:
Измените /etc/default/grub
, чтобы включить следующую строку:
GRUB_CMDLINE_LINUX_DEFAULT="splash quiet pci = nomsi RESUME = UUID = 92781adb-f2a6-4f15-88fc-e1ce801291dd"
RESUME относится к вашему UUID файла подкачки. В частности, на моей машине настройка pci=nomsi
была ключом.
Удачи!
Для меня он работает, чтобы установить пакет hibernate
, перезагрузиться и затем запустить sudo hibernate-disk
. Я уверен, что можно добавить его в меню, но не стоит времени для меня.
Вам нужно вручную включить его с небольшими усилиями. По умолчанию он отключен.
Тогда, если это не сработает, это может быть проблема ядра 4.4.0, и вам, возможно, придется обновить ядро.