Вопрос или проблема
У меня есть странная проблема: 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 демонстрирует, что возможность корректного завершения работы в режиме сна зависит от множества факторов, особенно после обновлений системы. Давайте рассмотрим подробнее, как можно решить эту проблему, а также выявить причины её возникновения.
Исходные факты
Вы описали, что:
- Переход в спящий режим работает корректно на заводском имидже Ubuntu 22 LTS, но перестает функционировать после установки обновлений.
- Переход в спящий режим не работает на чистой установке Ubuntu 22, 24 и даже на не-LTS версии 24.10.
- Обновление ядра до версии 6.11 и выше также приводит к сбоям.
- Понижение версии ядра до 6.7.10 восстанавливает функциональность.
Анализ журналов системы
Согласно выводу вашей команды journalctl
, ошибка при попытке перейти в спящий режим происходит из-за несоответствий в работе сетевых драйверов, связанных с ethernet-картой (e1000e). Конкретные записи указывают на сбой в процессе приостановки, где драйвер возвращает ошибку -2.
Временное решение
Вы сделали правильные шаги, исследуя возможные решения, основанные на первом сообщении об ошибке. Ваше временное решение, с отключением драйвера e1000e для ethernet, демонстрирует креативный подход к проблеме.
Вот улучшенная версия вашего языкового решения:
- Выполняйте команду
sudo rmmod e1000e
при старте системы, чтобы отключить ethernet. - Если вы хотите использовать ethernet, сразу после модуля, можете снова включить его с помощью
sudo modprobe e1000e
. Это будет запускать драйвер, но вам нужно будет отключать его снова, чтобы спящий режим работал.
Оптимизация процесса отключения модуля
Хотя предлагаемый вами метод отключения модуля на старте системы с использованием cron является рабочим, для более чистого и управляемого подхода, можно рассмотреть использование systemd:
- Создайте systemd-сервис, который будет отключать модуль при загрузке:
sudo nano /etc/systemd/system/rmmod-e1000e.service
- Заполните файл следующим содержимым:
[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 на вашем оборудовании, безусловно, сложна, но ваши усилия по её разрешению демонстрируют силу системного администрирования.
Если возникнут дополнительные вопросы или вам потребуется помощь в будущем, не стесняйтесь обращаться за поддержкой.