Ubuntu 22 и 24 LTS не будут переходить в режим сна, за исключением необычных обстоятельств.

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

У меня есть странная проблема: Ubuntu не уходит в спящий режим, за исключением необычных обстоятельств.

Под «не уходит в спящий режим» я имею в виду, что выбор «Спящий режим» в меню питания в правом верхнем углу приводит к тому, что экран на короткое время становится черным, после чего немедленно появляется экран входа в систему.

Это Dell Precision 3590, который изначально поставлялся с Ubuntu 22 LTS с завода в конце октября 2024 года. Dell предоставляет образ восстановления для этой модели здесь.

Все, что описано ниже, воспроизводится 100% времени.

  • Стирание машины и установка заводского образа приводит к тому, что спящий режим всегда работает.
  • После этого переход в обновление программного обеспечения и скачивание всех обновлений приводит к тому, что спящий режим перестает работать.
  • Если я загружаю только обновления безопасности, спящий режим также перестает работать.
  • Стирание машины и установка Ubuntu 22 LTS (с официального сайта) приводит к тому, что спящий режим никогда не работает.
  • Чистая установка Ubuntu 24 LTS также приводит к тому, что спящий режим никогда не работает.
  • Чистая установка Ubuntu 24.10 (не LTS) также приводит к тому, что спящий режим никогда не работает.
  • Начиная с Ubuntu 24 LTS, ядро на 6.8.0. Если я вручную обновляю до любого ядра основной линии, включая 6.11, спящий режим никогда не работает.
  • Если я вручную понижаю версию до ядра основной линии 6.7.10 (последняя версия 6.7), спящий режим всегда работает.
  • Если я вручную понижаю версию до ядра основной линии 6.6.51 (последняя версия 6.6), спящий режим работает, но кнопки яркости на ноутбуке перестают работать. То же самое касается более ранних версий 6.x.
  • Ubuntu не загружается дальше GRUB, если я пытаюсь понизить версию до последней версии 5.x.

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

Редактировать: Вывод journalctl за последние 5 минут сразу после неудачной попытки перейти в спящий режим, с тегами -k и -p:

Nov 22 00:49:09 zowayix-Precision-3590 kernel: e1000e 0000:00:1f.6: PM: pci_pm_suspend(): e1000e_pm_suspend+0x0/0xa0 [e1000e] возвращает -2
Nov 22 00:49:09 zowayix-Precision-3590 kernel: e1000e 0000:00:1f.6: PM: dpm_run_callback(): pci_pm_suspend+0x0/0x1b0 возвращает -2
Nov 22 00:49:09 zowayix-Precision-3590 kernel: e1000e 0000:00:1f.6: PM: не удалось приостановить асинхронно: ошибка -2
Nov 22 00:49:09 zowayix-Precision-3590 kernel: PM: Некоторые устройства не смогли уйти в спящий режим, или было обнаружено раннее событие пробуждения
Nov 22 00:49:10 zowayix-Precision-3590 kernel: e1000e 0000:00:1f.6: PM: pci_pm_suspend(): e1000e_pm_suspend+0x0/0xa0 [e1000e] возвращает -2
Nov 22 00:49:10 zowayix-Precision-3590 kernel: e1000e 0000:00:1f.6: PM: dpm_run_callback(): pci_pm_suspend+0x0/0x1b0 возвращает -2
Nov 22 00:49:10 zowayix-Precision-3590 kernel: e1000e 0000:00:1f.6: PM: не удалось приостановить асинхронно: ошибка -2
Nov 22 00:49:10 zowayix-Precision-3590 kernel: PM: Некоторые устройства не смогли уйти в спящий режим, или было обнаружено раннее событие пробуждения
Nov 22 00:49:12 zowayix-Precision-3590 kernel: e1000e 0000:00:1f.6 enp0s31f6: Аппаратная ошибка
Nov 22 00:49:15 zowayix-Precision-3590 kernel: e1000e 0000:00:1f.6 enp0s31f6: Аппаратная ошибка
Nov 22 00:49:18 zowayix-Precision-3590 kernel: iwlwifi 0000:00:14.3: WRT: Неверное место назначения буфера
Nov 22 00:49:18 zowayix-Precision-3590 kernel: iwlwifi 0000:00:14.3: Неверный указатель на журнал ошибок 0x0027B0C0 для RT uCode

Вывод lshw слишком велик, чтобы уместиться здесь, поэтому я сохранил его в pastebin: https://pastebin.com/Yq3JfhrB

Проблема решена с помощью обходного пути; спасибо @david за указание правильного направления. Я искал pci_pm_suspend "-2" и нашел следующую похожую ошибку от июня 2024 года: https://bugzilla.kernel.org/show_bug.cgi?id=218936

Хотя детали не совсем одинаковые, я протестировал некоторые вещи, о которых упоминал вышеуказанный отчетчик, включая то, что спящий режим внезапно снова работает с подключенным Ethernet-кабелем (и ломается снова, если вы отключите кабель и попробуете снова уйти в спящий режим).

Полный обходной путь (основанный на обходном пути вышеуказанного отчетчика), который я использовал, заключался в следующем:

  • Запустите sudo rmmod e1000e, чтобы отключить Ethernet.
    • Если вам не трудно делать это вручную один раз при каждой загрузке, вы можете остановиться здесь.
    • Если вам нужен Ethernet, запустите sudo modprobe e1000e, чтобы включить его обратно. Это снова ломает спящий режим, но это нормально, потому что подключение Ethernet-кабеля устраняет ошибку. Затем, когда вы позже отключите Ethernet-кабель, вам придется снова запустить sudo rmmod e1000e, чтобы снова отключить Ethernet и заставить спящий режим снова работать.
  • Я использовал следующий неуклюжий хак, чтобы автоматически запускать rmmod при загрузке:
    • sudo visudo, добавьте zowayix ALL=(ALL) NOPASSWD: /usr/sbin/rmmod ниже строки %sudo.
    • crontab -e, добавьте @reboot /usr/bin/sudo /usr/sbin/rmmod e1000e.

(Наверняка есть более удобный способ автоматически запускать rmmod, но вышеописанный был самым быстрым в добавлении (и удалении позже, если это потребуется). Если вы знаете о более приятном и быстром способе, пожалуйста, дайте мне знать.)

Теперь у меня стабильное ядро Ubuntu (не основное ядро) 6.8.0, с работающим спящим режимом в приемлемом состоянии.

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

Проблема с переходом в спящий режим в Ubuntu 22 и 24 LTS

Пользователи Ubuntu 22 и 24 LTS столкнулись с неожиданной проблемой, связанной с функцией перехода в спящий режим. Ваша ситуация на Dell Precision 3590 демонстрирует, что возможность корректного завершения работы в режиме сна зависит от множества факторов, особенно после обновлений системы. Давайте рассмотрим подробнее, как можно решить эту проблему, а также выявить причины её возникновения.

Исходные факты

Вы описали, что:

  1. Переход в спящий режим работает корректно на заводском имидже Ubuntu 22 LTS, но перестает функционировать после установки обновлений.
  2. Переход в спящий режим не работает на чистой установке Ubuntu 22, 24 и даже на не-LTS версии 24.10.
  3. Обновление ядра до версии 6.11 и выше также приводит к сбоям.
  4. Понижение версии ядра до 6.7.10 восстанавливает функциональность.

Анализ журналов системы

Согласно выводу вашей команды journalctl, ошибка при попытке перейти в спящий режим происходит из-за несоответствий в работе сетевых драйверов, связанных с ethernet-картой (e1000e). Конкретные записи указывают на сбой в процессе приостановки, где драйвер возвращает ошибку -2.

Временное решение

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

Вот улучшенная версия вашего языкового решения:

  1. Выполняйте команду sudo rmmod e1000e при старте системы, чтобы отключить ethernet.
  2. Если вы хотите использовать ethernet, сразу после модуля, можете снова включить его с помощью sudo modprobe e1000e. Это будет запускать драйвер, но вам нужно будет отключать его снова, чтобы спящий режим работал.

Оптимизация процесса отключения модуля

Хотя предлагаемый вами метод отключения модуля на старте системы с использованием cron является рабочим, для более чистого и управляемого подхода, можно рассмотреть использование systemd:

  1. Создайте systemd-сервис, который будет отключать модуль при загрузке:
    sudo nano /etc/systemd/system/rmmod-e1000e.service
  2. Заполните файл следующим содержимым:
    
    [Unit]
    Description=Unload e1000e module

[Service]
Type=oneshot
ExecStart=/sbin/rmmod e1000e
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

3. Активируйте сервис:
```bash
sudo systemctl enable rmmod-e1000e.service

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

Заключение

Ваша опытность в диагностике проблемы и поиск временного решения очень важны в области IT. Улучшенный метод управления модулями через systemd делает процесс более чистым и управляемым. Проблема с переходом в спящий режим в Ubuntu на вашем оборудовании, безусловно, сложна, но ваши усилия по её разрешению демонстрируют силу системного администрирования.

Если возникнут дополнительные вопросы или вам потребуется помощь в будущем, не стесняйтесь обращаться за поддержкой.

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

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