acpitool -S: решение проблемы с ноутбуком, который не правильно переходит в режим гибернации?

Вопрос или проблема

Я уже более месяца испытываю трудности с новым ноутбуком Lenovo Thinkpad P16 Gen2 на Ubuntu 22.04 LTS, который не мог успешно перейти в спящий режим. Может быть, 90% времени он работал нормально, но в остальных 10% требовалась перезагрузка. Для меня это было неприемлемо.

В конце концов, я решил, что будет целесообразно перевести компьютер в режим гибернации вместо перехода в спящий режим. Для этого мне пришлось отключить Secure Boot. Поскольку это домашний компьютер, я счел, что риск невелик.

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

Тем не менее, команда sudo systemctl hibernate не работала. Компьютер сохранял свое состояние и сразу же просыпался. Не то, чего я хотел. Было предложено отключить пробуждение на устройствах, указанных в выводе команды acpitool -w |grep enabled как “включено”. Но одно из этих устройств не отключало пробуждение с помощью команды acpitool -W.

Так что все еще не было приемлемой гибернации.

Затем случайно я посмотрел на страницу man для acpitool, где наткнулся на

-S, –suspend to disk ?
Перевести машину в состояние сна S4, если возможно. Требуется доступ на запись в /proc/acpi/sleep (ядро 2.4.x) или /sys/power/state (ядро 2.6.x)

Это оказалось решением моей проблемы. В отличие от sudo systemctl hibernate, sudo acpitool -S достигает гибернации и успешно возвращается из нее при включении питания. Единственная проблема здесь в том, что я не уверен, как включить это в графическом интерфейсе Ubuntu Gnome.

Но я не могу найти что-либо об этом в интернете, кроме страницы man. У меня все еще есть такие вопросы:

Я не уверен, в чем разница между этими двумя командами на внутреннем уровне и хотел бы узнать.

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

ОБНОВЛЕНИЕ: В ответ на запрос @waltinator у меня есть следующие данные:

  1. журнал после sudo acpitool -S:

    $ sudo journalctl –since=”-5 minutes” | pastebinit

    https://paste.ubuntu.com/p/CJq9YFKmbB/

  2. журнал после sudo systemctl hibernate:

    $ sudo journalctl –since=”-5 minutes” | pastebinit
    https://paste.ubuntu.com/p/432vmz2xqJ/

  3. вот pastebin недельной давности, когда я еще пытался использовать спящий режим:

    $ journalctl –boot=-1 | tail -n 2000 | pastebinit

https://paste.ubuntu.com/p/QdDYcKGNGw/

ОБНОВЛЕНИЕ 2: Теперь, изучив первый и второй pastebin, я вижу, что acpitool использует более простой и прямолинейный (близкий к железу) подход, чем systemctl hibernate. Он сразу приступает к делу и к строке 21 пытается перевести систему в состояние сна S4, что ему удается. systemctl hibernate, с другой стороны, много возится с сетевым интерфейсом, в конце концов решив проснуться обратно на строке 101. Я не уверен, почему это происходит, поскольку цель гибернации описывается как выключение машины после сохранения состояния. Мне кажется, что systemctl разделяет код между suspend и hibernate.

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

.

Ответ или решение

Теория

Прежде чем углубляться в технические детали, важно понять основные концепции, связанные с режимами энергосбережения, такими как "suspend" (ждущий режим) и "hibernate" (гибернация). В операционных системах на базе Linux, команда suspend обычно переводит систему в режим с минимальным энергопотреблением, сохраняя текущее состояние в оперативной памяти. В то же время, "hibernate" полностью сохраняет содержимое оперативной памяти на жесткий диск, что позволяет отключить питание компьютера. В некоторых случаях может потребоваться дополнительная настройка, чтобы обеспечить корректную работу этих режимов.

Ваша проблема связана с тем, что стандартная команда systemctl hibernate не работает должным образом, тогда как команда acpitool -S успешно выполняет гибернацию. Это может быть связано с различиями в реализации и управлении энергоэффективными режимами между двумя командами.

Пример

На вашем ноутбуке Lenovo Thinkpad P16 Gen2 с Ubuntu 22.04 LTS вы столкнулись с проблемой, когда стандартная команда для гибернации systemctl hibernate не выполняет ожидаемого результата: после сохранения состояния система сразу же просыпается. Решение, которое вы нашли, заключается в использовании команды sudo acpitool -S, которая корректно переводит компьютер в состояние S4 (спящий режим на диск) и возвращает его из этого состояния при включении.

Первое, что стоит отметить, это то, что acpitool — это утилита, которая взаимодействует непосредственно с компонентами ACPI (Advanced Configuration and Power Interface) вашего компьютера. Это позволяет ей обрабатывать низкоуровневые команды, такие как перевод в спящий режим и пробуждение, более прямым и, вероятно, более эффективным образом. В отличие от этого, systemctl — это часть системы управления службами и может иметь более сложные внутренние зависимости и конфигурации, которые могут повлиять на её поведение.

Применение

Для достижения оптимального результата вам следует применить несколько шагов:

  1. Диагностика проблемы с systemctl hibernate: Исследуйте журналы и логи, чтобы понять, какие устройства или службы могут вызывать пробуждение системы сразу после гибернации. Журналы, предоставленные вами, указывают на то, что systemctl hibernate взаимодействует с сетевыми интерфейсами. Возможно, причиной является некорректная конфигурация диспетчера сетевых подключений, который "будит" систему сразу после попытки гибернации.

  2. Улучшение работы acpitool: Несмотря на успешное выполнение команды acpitool -S, с осторожностью продолжайте её использование, так как она может не обрабатывать все возможные сценарии, такие как автоматическая настройка последующего пробуждения устройств через ACPI. Подумайте о возможности создания скриптов, которые вызовут acpitool -S перед завершением вашей рабочей сессии и протестируют её на предмет нежелательных побочных эффектов во время разного использования.

  3. Интеграция с GUI: Для интеграции этой команды с графическим пользовательским интерфейсом Ubuntu могут потребоваться дополнительные настройки или ваши собственные скрипты, закреплённые в системе (например, в /etc/acpi/).

  4. Обратная связь и текущее состояние: Учитывая ваш опыт и выводы, полезно было бы уведомить разработчиков Ubuntu о возможной ошибке или неэффективном поведении systemctl hibernate, чтобы совместные усилия привели к улучшению программного обеспечения.

Потенциальные побочные эффекты

Использование acpitool -S может иметь некоторые побочные эффекты, поскольку оно непосредственно взаимодействует с ACPI системами. В то время как вы остаётесь уверены, что команда проходит успешно, возможны случаи, когда устройства могут остаться в некорректном состоянии после возвращения из гибернации из-за ограниченного охвата этой команды. Это может вызвать проблемы, например, с переферийными устройствами, подключёнными через USB, которые должны будут быть повторно обнаружены после пробуждения.

В общем, несмотря на то, что вы нашли работающий способ решения вашей задачи с использованием acpitool -S, всегда полезно провести тестирование и мониторинг для точного выявления и предотвращения возможных последствий в будущем.

Оцените материал
Добавить комментарий

Капча загружается...