Чёрный экран после закрытия крышки в Ubuntu 24.04

Ноутбук обновили с Ubuntu 22.04 до 24.04. Если закрыть крышку на несколько секунд, открыть и войти, всё в порядке. Если закрыть на минуту или дольше, после открытия экран остаётся чёрным. Ctrl+Alt+Del на секунду показывает окно входа, потом оно пропадает, и клавиатура ни на что не реагирует. Помогает только удержание кнопки питания.

На этой странице причина найдена в системном журнале и исправлена. Проверено на Ubuntu 24.04.5 LTS с ядром 6.8 и GNOME на X11, на ноутбуке Lenovo V510-14IKB с Intel HD Graphics 520 без видеокарты NVIDIA. Вывод сокращён, названия месяцев показаны по-английски. Используются: systemctl, grep, find, sudo.

Коротко. Если в журнале зависшего сеанса есть Unit nvidia-suspend.service not found, а видеокарты NVIDIA в ноутбуке нет, переходите к исправлению.

1. Засыпал ли ноутбук вообще

После кнопки питания зависший сеанс становится предыдущей загрузкой. Список загрузок:

journalctl --list-boots | tail -3

-2 95efaaf2c3ec493aa99312f5373622af Sun 2026-11-01 22:08:03 EET Mon 2026-11-02 11:03:59 EET -1 cd7998fec561457eaeeca9427dab6f1d Mon 2026-11-02 11:04:25 EET Mon 2026-11-02 12:40:28 EET 0 60c971f5c9c34354a734c8f565b4e1a3 Mon 2026-11-02 12:41:31 EET Mon 2026-11-02 13:35:01 EET

Загрузка 0 текущая. Загрузка -1 закончилась в 12:40:28, когда удерживали кнопку питания. Каждый раз, когда ноутбук действительно засыпает, ядро пишет PM: suspend entry, а при пробуждении PM: suspend exit. Ищем их в загрузке -1:

journalctl -b -1 -k -g 'PM: suspend'

-- No entries --

-b -1 означает предыдущую загрузку, -k только сообщения ядра, -g строки, совпадающие с шаблоном. Записей нет: за весь сеанс ноутбук ни разу не уснул, хотя крышку закрывали дважды. Он оставался включённым с погасшим экраном, тратил батарею и грелся в сумке.

2. Почему не получается уснуть

За крышкой следит systemd-logind, и именно эта служба усыпляет ноутбук. Её строки о крышке и сне в загрузке -1; шаблон uspend совпадает и с Suspending, и с suspend:

journalctl -b -1 --no-hostname -u systemd-logind -g 'Lid|uspend' | head -9

Nov 02 11:04:55 systemd-logind[1078]: Watching system buttons on /dev/input/event1 (Lid Switch) Nov 02 12:38:57 systemd-logind[1078]: Lid closed. Nov 02 12:38:57 systemd-logind[1078]: Suspending... Nov 02 12:39:01 systemd-logind[1078]: Error during inhibitor-delayed operation (already returned success to client): Unit nvidia-suspend.service not found. Nov 02 12:39:04 systemd-logind[1078]: Lid opened. Nov 02 12:39:08 systemd-logind[1078]: Lid closed. Nov 02 12:39:16 systemd-logind[1078]: Suspending... Nov 02 12:39:16 systemd-logind[1078]: Error during inhibitor-delayed operation (already returned success to client): Unit nvidia-suspend.service not found. Nov 02 12:39:16 systemd-logind[1078]: Suspending...

Каждая попытка сразу заканчивается ошибкой. Чтобы уснуть, logind запускает systemd-suspend.service, а systemd отказывается его запускать: ему нужен юнит, которого не существует:

systemctl status nvidia-suspend.service

Unit nvidia-suspend.service could not be found.

В том же журнале много строк Lockdown: systemd-logind: hibernation is restricted. Это Secure Boot запрещает гибернацию, не сон, и к этой проблеме отношения не имеет.

3. Почему экран остаётся чёрным

Первый раз крышка была закрыта 7 секунд: одна неудачная попытка, крышку открыли, рабочий стол вернулся. После второго закрытия logind повторял попытки всё время, пока крышка оставалась закрытой:

journalctl -b -1 -u systemd-logind | grep -c 'Suspending'

221

221 попытка, с 12:39:16 до 12:40:18. Каждая попытка сообщает всем программам, что система сейчас уснёт, а потом что она проснулась. И каждый раз gsd-power, служба GNOME, которая включает и выключает экран, просит GNOME Shell снова включить экран. Примерно через минуту GNOME Shell перестал отвечать:

journalctl -b -1 --no-hostname _COMM=gsd-power | tail -2

Nov 02 12:40:27 gsd-power[2532]: Error setting property 'PowerSaveMode' on interface org.gnome.Mutter.DisplayConfig: Timeout was reached (g-io-error-quark, 24) Nov 02 12:40:28 gsd-power[2532]: Error setting property 'PowerSaveMode' on interface org.gnome.Mutter.DisplayConfig: Timeout was reached (g-io-error-quark, 24)

Mutter — часть GNOME Shell, которая управляет экраном. Пока он не отвечает, экран не включается, окно входа после Ctrl+Alt+Del мелькает и пропадает, а клавиатура ничего не делает. Поэтому короткое закрытие проходит, а длинное заканчивается кнопкой питания.

4. Откуда зависимость от NVIDIA

Что требует systemd-suspend.service:

systemctl show systemd-suspend.service -p Requires

Requires=nvidia-suspend.service sleep.target system.slice nvidia-resume.service

Requires — жёсткая зависимость: если нужного юнита нет, systemd не запускает юнит, который от него зависит. Кроме файла юнита, такие требования берутся из ссылок в папке с именем юнита и окончанием .requires:

ls -l /etc/systemd/system/systemd-suspend.service.requires/

lrwxrwxrwx 1 root root 41 May 31 2022 nvidia-resume.service -> /lib/systemd/system/nvidia-resume.service lrwxrwxrwx 1 root root 42 May 31 2022 nvidia-suspend.service -> /lib/systemd/system/nvidia-suspend.service

В соседней папке systemd-hibernate.service.requires такие же ссылки, на nvidia-hibernate.service и nvidia-resume.service. Их создал пакет драйвера NVIDIA 31 мая 2022 года. Файлов, на которые они указывают, больше нет:

ls -l /lib/systemd/system/nvidia-suspend.service

ls: cannot access '/lib/systemd/system/nvidia-suspend.service': No such file or directory

А видеокарты NVIDIA в ноутбуке нет вообще, только графика Intel с драйвером i915:

lspci -k | grep -A3 -E 'VGA|3D'

00:02.0 VGA compatible controller: Intel Corporation HD Graphics 520 (rev 0a) Subsystem: Lenovo HD Graphics 520 Kernel driver in use: i915 Kernel modules: i915

5. Почему это началось после обновления

Пакеты NVIDIA в dpkg:

dpkg -l | grep -i nvidia

ii linux-firmware-nvidia-graphics 20240318.git3b128b60-0ubuntu3.1 all ii nvidia-firmware-580-server-580.178.04 580.178.04-0ubuntu0.24.04.1 amd64 rc nvidia-kernel-common-580-server 580.178.04-0ubuntu0.24.04.1 amd64

rc значит, что пакет удалён, а файлы настроек остались. nvidia-suspend.service поставляет как раз пакет nvidia-kernel-common. Когда его удалили, видно в истории apt:

zgrep -h -B4 'Remove:.*nvidia-kernel-common' /var/log/apt/history.log* | grep -E 'Start-Date|Commandline|Remove'

Start-Date: 2025-05-03 11:35:33 Commandline: /usr/bin/unattended-upgrade Remove: nvidia-kernel-common-525-server:amd64 (525.147.05-0ubuntu2.22.04.1) Start-Date: 2026-10-21 08:52:17 Commandline: aptdaemon role='role-commit-packages' sender=':1.133' Remove: nvidia-kernel-common-515-server:amd64 (525.147.05-0ubuntu2.22.04.1), nvidia-kernel-common-535-server:amd64 (535.309.01-0ubuntu0.24.04.2), nvidia-kernel-common-580-server:amd64 (580.178.04-0ubuntu0.24.04.1)

После удаления в мае 2025 года другие версии остались. 21 октября 2026 года, сразу после обновления до 24.04, aptdaemon, служба за графическим менеджером обновлений, удалил последние три. Обычное удаление стирает файлы юнитов, но не ссылки, которые их включают: скрипт удаления пакета стирает их только при purge:

grep -B3 'deb-systemd-helper purge' /var/lib/dpkg/info/nvidia-kernel-common-*.postrm | head -4

# Automatically added by dh_installsystemd/13.14.1ubuntu5 if [ "$1" = "purge" ]; then if [ -x "/usr/bin/deb-systemd-helper" ]; then deb-systemd-helper purge 'nvidia-suspend.service' >/dev/null || true

При обновлении было удаление, а не purge, поэтому systemd-suspend.service по-прежнему требует юнит, которого больше нет на диске. В Ubuntu 22.04 юниты были на месте, и сон работал.

6. Исправление: удалить мёртвые ссылки

Только для ноутбука без видеокарты NVIDIA, как показал lspci в шаге 4; с видеокартой NVIDIA смотрите ниже. Удалите четыре ссылки и две папки, в которых они лежали, и заставьте systemd заново прочитать юниты:

sudo rm /etc/systemd/system/systemd-suspend.service.requires/nvidia-{suspend,resume}.service /etc/systemd/system/systemd-hibernate.service.requires/nvidia-{hibernate,resume}.service

sudo rmdir /etc/systemd/system/systemd-{suspend,hibernate}.service.requires

sudo systemctl daemon-reload

Без daemon-reload systemd держит старую зависимость в памяти до следующей загрузки, даже когда ссылок уже нет. Проверка:

systemctl show systemd-suspend.service -p Requires

Requires=system.slice sleep.target

Поищите другие мёртвые ссылки среди юнитов:

find /etc/systemd/system -xtype l

/etc/systemd/system/multi-user.target.wants/snapd.aa-prompt-listener.service

-xtype l показывает ссылки, цель которых пропала. Оставшаяся лежит в папке .wants. Wants — мягкая зависимость: отсутствующий юнит пропускается, и ничего не ломается. Юнит останавливают только мёртвые ссылки в папке .requires.

Остатки пакета можно потом удалить через purge; его скрипт заодно очистит то, что deb-systemd-helper помнит об этих ссылках:

sudo apt purge nvidia-kernel-common-580-server

7. Проверить сон

Закройте крышку на несколько минут, а не секунд, откройте и найдите строки ядра в текущей загрузке:

journalctl -b -k --no-hostname -g 'PM: suspend'

Nov 02 13:29:57 kernel: PM: suspend entry (deep) Nov 02 13:32:52 kernel: PM: suspend exit

Ноутбук спал с 13:29:57 до 13:32:52 и нормально проснулся. deep — это сон с сохранением в оперативной памяти. Какие режимы предлагает ядро, записано в /sys/power/mem_sleep, активный — в квадратных скобках:

cat /sys/power/mem_sleep

s2idle [deep]

Ноутбуки с видеокартой NVIDIA

Здесь не проверялось: в этом ноутбуке нет видеокарты NVIDIA. С видеокартой NVIDIA и проприетарным драйвером эти юниты нужны: перед сном они дают драйверу сохранить видеопамять карты. Ссылки не удаляйте. Вместо этого установите драйвер заново, чтобы его пакет nvidia-kernel-common вернул юниты; рекомендуемый драйвер покажет ubuntu-drivers devices. После этого systemctl status nvidia-suspend.service должен находить юнит.

Чеклист

Автор статьи: Клавдия Кондакова