Вопрос или проблема
Я использую 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 и почему он может сопротивляться всем попыткам сделать его неспособным к пробуждению.
- Почему система перезапускается сразу после выключения?
Возможно, какое-то аппаратное устройство не было корректно выключено и подает системе сигнал немедленного пробуждения?
Попробуйте sudo acpitool -w
, чтобы перечислить все устройства, способные к пробуждению, и используйте sudo acpitool -W <number>
, чтобы отключить те, которые вы не хотите, чтобы вызывали пробуждение системы, но которые сейчас включены.
- Что мешает мне редактировать [файл
/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 немедленно пробуждается после гибернации. Давайте рассмотрим ключевые аспекты и возможные решения данной ситуации.
- Теория (Theory):
При работе с режимом гибернации важно учитывать, что компьютер сохраняет текущее состояние системы на диск, а затем выключает все компоненты. При следующем включении система восстанавливает состояние из ранее сохраненного образа. Если машина пробуждается сразу после перехода в гибернацию, это может быть вызвано различными факторами, такими как неправильно настроенные параметры энергосбережения, активные устройства с поддержкой пробуждения или проблемы с драйверами, особенно для вашего nVidia RTX 3500 ada GPU.
Файл /sys/power/disk
управляет режимами работы гибернации и определяет, какие действия предпринимаются после создания образа гибернации. В вашем случае [platform] является выбранной опцией. Однако стандартные изменения содержания этого файла не всегда возможны через обычные команды ввода-вывода из-за особенностей монтирования в файловой системе /sys
.
- Пример (Example):
Вы хотите изменить /sys/power/disk
для эксперимента, чтобы попытаться удержать систему в режиме "выключения" после гибернации. Хотя вы имеете права на запись в этот файл, команда echo
в сочетании с sudo
не работает должным образом, так как перенаправление происходит до выполнения команды от имени суперпользователя.
Вы также пытаетесь отключить устройства, способные пробудить систему, используя acpitool -w
, однако устройство PXSX не позволяет вам отключить его пробуждающие возможности. Это может быть связано с тем, что данное устройство критично для работы системы или имеет ограничения на управление пробуждением.
- Применение (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 для получения специфичных для оборудования и системы рекомендаций и отладочного процесса.
Эта ситуация подчеркивает сложность взаимодействия аппаратного обеспечения, операционной системы и периферийных устройств для обеспечения правильного режима энергосбережения и пробуждения. Решение требует экспериментирования и гибкого подхода в тестировании различных параметров.