Настроил systemctl hibernate для выключения машины, но она сразу же пробуждается.

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

Я использую Ubuntu 22.04 LTS на моем ноутбуке Lenovo Thinkpad P16 gen2. Я хочу включить режим гибернации, потому что процесс возобновления работы слишком ненадежен на этом устройстве, которое также оснащено графическим процессором nVidia RTX 3500 ada. Возможно, если мне повезет, устройство успешно просыпается в 90% случаев. Поскольку мое устройство основано на nvram, я считаю, что пробуждение не займет слишком много времени, и, в любом случае, я готов пожертвовать скоростью ради надежности.

Я создал раздел для подкачки и указал swapon использовать этот раздел. Я отключил Secure Boot.

Может ли кто-то описать, что это за процесс PXSX и почему его возможности пробуждения невозможно отключить?

После выполнения шагов, указанных в этом руководстве, я наконец смог разрешить выполнение команды sudo systemctl hibernate. Это позволило успешно отключить компьютер, но он сразу же снова включился.

Исследуя этот вопрос, я нашел, казалось бы, авторитетную и отличную документацию Системные состояния сна. Из нее я узнал, что файл, управляющий процессом гибернации, — это /sys/power/disk. Он описывается следующим образом:

Этот файл управляет операционным режимом гибернации (Suspend-to-Disk). В частности, он указывает ядру, что делать после создания изображения гибернации.

При чтении из него возвращается список поддерживаемых опций…

Текущая выбранная опция отображается в квадратных скобках, что означает, что операция, представленная ею, будет выполнена после создания и сохранения изображения, когда гибернация будет вызвана записью disk в /sys/power/state.

На моей системе это выглядит так:

/sys/power$ cat disk
[platform] shutdown reboot suspend test_resume

Я хотел бы изменить это на

platform [shutdown] reboot suspend test_resume

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

$ ls -al /sys/power
total 0
drwxr-xr-x  3 root root    0 Mar  7 11:45 .
dr-xr-xr-x 13 root root    0 Mar  7 11:45 ..
-rw-r--r--  1 root root 4096 Mar  7 13:32 disk
...

Файл ‘disk’ доступен для записи, директория /sys/power доступна для записи, хотя ее родительская директория (/sys) нет.

Таким образом, в итоге, две загадки:

1. Почему система сразу же перезапускается после выключения?

2. Что мешает мне редактировать этот файл (либо через sudo, либо при входе в систему как root)?

ОБНОВЛЕНИЕ:

Следуя предложениям @telcoM ниже, я решил отключить возможности пробуждения у тех процессов, которые acpitool определил как способные к пробуждению. Это были следующие процессы:

$ acpitool -w | grep enabled
  3. PEG1     S4    *enabled   pci:0000:00:01.0
  7. XHCI     S3    *enabled   pci:0000:00:14.0
  19. RP05    S4    *enabled   pci:0000:00:1c.4
  27. RP09    S4    *enabled   pci:0000:00:1d.0
  28. PXSX    S4    *enabled   pci:0000:20:00.0
  35. RP13    S4    *enabled   pci:0000:00:1d.4
  67. AWAC    S4    *enabled   platform:ACPI000E:00
  68. SLPB    S3    *enabled   platform:PNP0C0E:00
  69. LID     S4    *enabled   platform:PNP0C0D:00

Изначально мой план заключался в том, чтобы отключить все, кроме #69, процесса закрытия крышки ноутбука. Это не удалось. Я смог отключить все, кроме #28, процесс PXSX нельзя было отключить. Я даже решил отключить #69, крышку, что не входило в мой первоначальный план. Ни один из наборов процессов, которые я мог бы отключить, не позволили добиться того, чтобы sudo systemctl hibernate приводило к выключению системы, которая оставалась бы выключенной. Во всех случаях она выключалась и включалась снова через несколько секунд.

Таким образом, я все еще ищу способ заставить это устройство переходить в состояние гибернации.

Может кто-то объяснить, что за процесс PXSX и почему он может сопротивляться всем попыткам сделать его неспособным к пробуждению.

  1. Почему система перезапускается сразу после выключения?

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

Попробуйте sudo acpitool -w, чтобы перечислить все устройства, способные к пробуждению, и используйте sudo acpitool -W <number>, чтобы отключить те, которые вы не хотите, чтобы вызывали пробуждение системы, но которые сейчас включены.


  1. Что мешает мне редактировать [файл /sys/power/disk]?

Вы, вероятно, делаете это неверно.

Для таких виртуальных файлов, как /sys, вы должны писать только ключевое слово, соответствующее нужной опции. Когда вы входите в систему как root, вы можете сделать это так:

# echo shutdown > /sys/power/disk
# cat /sys/power/disk
platform [shutdown] reboot suspend test_resume

Но если вы делаете это через sudo, это не сработает:

sudo echo shutdown > /sys/power/disk   # Не сработает!

… потому что оболочка, которая настраивает перенаправление до выполнения реальной команды, работает как обычный пользователь, у которого нет разрешений на запись в /sys/power/disk. То, что вы очень авторитетно выводите слово “shutdown” в стандартный вывод, не имеет значения: на этом этапе попытка перенаправления уже провалилась.

Вместо этого вы можете сделать это следующим образом:

echo shutdown | sudo tee /sys/power/disk >/dev/null

Ну, после того, как я искал ответы на этот вопрос здесь и на другом Unix & Linux Stack Exchange, я, похоже, случайно нашел ответ, который решает мою текущую проблему, но поднимает еще один вопрос.

Я переключился на чтение страницы руководства по acpitool, где я наткнулся на этот ключик:

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

И вот, вызов команды:

sudo acpitool -S

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

Это то, чего я надеялся достигнуть с командой

sudo systemctl hibernate

но должно быть есть какая-то разница, потому что с этой командой компьютер не остается выключенным, а немедленно включается снова. Я считаю это половинчатым решением, потому что решение с sudo systemctl hibernate позволило бы включить этот вариант в меню питания Gnome (где ему место), тогда как это решение требует использования команды в терминале.

.

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

Проблема, с которой вы столкнулись, связана с поведением системы при использовании команды systemctl hibernate, в результате которого ваш Lenovo Thinkpad P16 gen2 под управлением Ubuntu 22.04 LTS немедленно пробуждается после гибернации. Давайте рассмотрим ключевые аспекты и возможные решения данной ситуации.

  1. Теория (Theory):

При работе с режимом гибернации важно учитывать, что компьютер сохраняет текущее состояние системы на диск, а затем выключает все компоненты. При следующем включении система восстанавливает состояние из ранее сохраненного образа. Если машина пробуждается сразу после перехода в гибернацию, это может быть вызвано различными факторами, такими как неправильно настроенные параметры энергосбережения, активные устройства с поддержкой пробуждения или проблемы с драйверами, особенно для вашего nVidia RTX 3500 ada GPU.

Файл /sys/power/disk управляет режимами работы гибернации и определяет, какие действия предпринимаются после создания образа гибернации. В вашем случае [platform] является выбранной опцией. Однако стандартные изменения содержания этого файла не всегда возможны через обычные команды ввода-вывода из-за особенностей монтирования в файловой системе /sys.

  1. Пример (Example):

Вы хотите изменить /sys/power/disk для эксперимента, чтобы попытаться удержать систему в режиме "выключения" после гибернации. Хотя вы имеете права на запись в этот файл, команда echo в сочетании с sudo не работает должным образом, так как перенаправление происходит до выполнения команды от имени суперпользователя.

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

  1. Применение (Application):
  • Управление /sys/power/disk: Для изменения влиятельных системных файлов, таких как /sys/power/disk, лучше использовать конструкцию с tee: echo shutdown | sudo tee /sys/power/disk >/dev/null. Это гарантирует, что запись выполняется от имени суперпользователя.

  • Отладка пробуждения: Изучите пробуждающие устройства дальше, используя не только acpitool, но также проверяя cat /proc/acpi/wakeup для идентификации и отключения ненужных прерываний. Некоторые периферийные устройства или сетевые интерфейсы могут оставаться активными и поддерживать пробуждение.

  • Работа с драйверами nVidia: Обновление или замена драйверов nVidia могут улучшить стабильность работы при переходе в гибернацию или пробуждении. Неправильная работа драйверов может вызывать ложные пробуждения.

  • Использование альтернативных команд: Как вы уже обнаружили, sudo acpitool -S может быть успешным обходным решением, однако интеграция этой команды в системное меню более сложна. Вы можете создать пользовательский скрипт, который будет вызываться при попытке использования системной гибернации.

  • Тестирование приоритетов: Если проблема с пробуждением сохраняется, попробуйте действовать с вашей системой в минимально работающем состоянии, отключив все ненужные устройства и периферийные устройства, чтобы сфокусироваться на основном оборудовании.

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

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

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

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