Solved
Ubuntu 26.04 NVIDIA black screens after suspend: fbcon=nodefer workaround
Black screens after deep suspend on a Dell XPS 8940 with Ubuntu 26.04 and NVIDIA 595.99.02. The fbcon=nodefer workaround, matching logs, verification, and rollback.

I was having a recurring problem where the desktop would go to sleep, but the screens would remain black when I tried to wake it with the keyboard or mouse. I ended up having to hold down the power button to turn the machine off and boot it again.
After checking the logs, the strongest lead was a hang during resume involving the NVIDIA display driver and the Linux framebuffer console (fbcon). Adding the kernel boot parameter fbcon=nodefer appears to have worked around it on this system. I’ve now had two successful suspend/resume cycles, including one overnight, but I’m continuing to watch it.
Short version
- Symptom: the Dell XPS 8940 resumed from deep sleep, but the displays stayed black and the desktop was unusable.
- Matching evidence:
fbcon: Taking over consoleduring resume, followed by blocked tasks innvidia_modeset,fbcon_register_existing_fbs, andpm_restore_console. - Workaround used: append
fbcon=nodeferthrough/etc/default/grub.d/99-codex-fbcon-nodefer.cfg, runsudo update-grub, then restart. The exact file contents and rollback are below. - Check: confirm the parameter in
/proc/cmdline, then verify that suspend exits and the NVIDIA resume service completes. - Status as of November 1, 2026: two successful sleep/wake cycles, including overnight. This is an apparently successful workaround on this configuration.
The system
- Computer: Dell XPS 8940, hardware version A00
- Firmware/BIOS: Dell 2.27.1, dated April 3, 2025
- OS: Ubuntu 26.04.1 LTS, x86-64
- Kernel:
7.0.0-42-generic, Ubuntu package version7.0.0-42.42 - Desktop: GNOME Shell
50.1-0ubuntu1.4, Wayland session - systemd:
259.9-0ubuntu0.1 - NVIDIA GPU: GeForce RTX 3060 Ti
- NVIDIA driver:
595.99.02 - NVIDIA package:
nvidia-driver-595-openversion595.99.02-0ubuntu0.26.04.1 - Integrated graphics: Intel UHD Graphics 750, using the
i915driver; the displays were connected to the NVIDIA card. - Sleep mode:
deep, meaning suspend-to-RAM / ACPI S3. The machine also listss2idleas available. - Automatic suspend: enabled after two hours of inactivity.
The NVIDIA suspend, resume, and hibernate services were already enabled. The NVIDIA driver was configured with PreserveVideoMemoryAllocations: 1 and TemporaryFilePath: "/var".
Symptoms and first checks
When I returned after the PC had been idle, the screens were black. Keyboard and mouse input didn’t bring the desktop back, and I had been holding the power button to force a restart.
The earlier logs showed the system starting deep suspend, followed by a new boot later, without a completed resume recorded in between. At that point, it wasn’t clear whether the PC was failing to wake at all, or waking and getting stuck before the display returned.
One initial lead was USB wake-up:
- The keyboard was already enabled as a wake device.
- The mouse was disabled as a wake device.
- Both were connected through two USB hubs whose wake settings were disabled.
- Wake-up was temporarily enabled for the mouse, hubs, and USB root hub.
The next sleep attempt still resulted in a black screen and an unusable desktop. Those temporary USB changes also reset after a restart. The keyboard subsequently woke the machine successfully with its original wake setting, so the USB changes do not appear to be the fix in this case.
Automatic suspend was also briefly turned off as a diagnostic workaround, then restored to its original two-hour setting. I wanted to keep suspend working for power saving.
What the failed-resume logs showed
A later failure produced more useful kernel logs. On October 31, the machine entered deep suspend, and the low-level ACPI resume completed:
PM: suspend entry (deep)ACPI: PM: Low-level resume completeACPI: PM: Waking up from system sleep state S3fbcon: Taking over consoleAfterward, the kernel reported blocked tasks involving the NVIDIA modesetting driver, a framebuffer-console worker, and the system sleep process. Selected lines:
INFO: task nvidia-modeset/... blocked for more than 122 seconds.
Workqueue: events fbcon_register_existing_fbsnvkms_ioctl_from_kapi ... [nvidia_modeset]
INFO: task systemd-sleep ... blocked for more than 122 seconds.pm_restore_console ...
INFO: task systemd-sleep ... blocked on a semaphore likely last held by task kworker/...The full traces indicated that the framebuffer-console worker was waiting inside NVIDIA modesetting code, while systemd-sleep was waiting for the console lock. That is a much closer match to a console/display-driver resume hang than a simple keyboard wake configuration problem.
The same resume also logged an ACPI firmware error:
ACPI BIOS Error (bug): Could not resolve symbol [\_SB.ITBP], AE_NOT_FOUNDACPI Error: Aborting method \RWAK due to previous error (AE_NOT_FOUND)ACPI Error: Aborting method \_WAK due to previous error (AE_NOT_FOUND)I’m including it for completeness. I don’t know whether that firmware error contributed to the problem; the blocked-task traces were the more direct evidence for the workaround I tried.
Workaround: fbcon=nodefer
The workaround was to add this kernel boot parameter:
fbcon=nodeferThe Linux kernel documentation says this makes the framebuffer console bind immediately, rather than deferring its takeover. The idea here is to get that console initialization out of the way during startup, instead of having it occur during the suspend/resume sequence where the hang was observed.
An Ubuntu bug discussion describes a similar NVIDIA/fbcon deadlock and reports fbcon=nodefer as a workaround. The logs have a closely matching blocked-task pattern, although that does not establish that every underlying cause is identical.
How it was configured on the machine
Instead of editing the main /etc/default/grub file, a dedicated GRUB configuration file was added at:
/etc/default/grub.d/99-codex-fbcon-nodefer.cfgIts contents are:
# Initialize the framebuffer console at boot to avoid a resume deadlock.GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} fbcon=nodefer"Then the GRUB configuration was regenerated:
sudo update-grubAfter restarting, I checked that the running kernel had received the parameter:
cat /proc/cmdlineThe output included:
quiet splash fbcon=nodeferFor anyone trying this: preserve your existing GRUB options and use the procedure appropriate to your distribution and bootloader. The file above is what was used on this Ubuntu/GRUB installation; don’t replace an existing configuration file without checking its contents. Changing boot options can affect startup behavior, so make sure you know how to undo the change.
To remove this particular dedicated file on this installation, the reversal would be:
sudo rm /etc/default/grub.d/99-codex-fbcon-nodefer.cfgsudo update-grubA restart would then be needed. That removal command applies only if this is the dedicated file containing the workaround.
Results so far
After restarting with fbcon=nodefer, the logs showed the NVIDIA framebuffer console being initialized at boot:
fbcon: nvidia-drmdrmfb (fb0) is primary deviceTwo subsequent suspend/resume cycles completed:
- A short cycle on October 31 around 11:37 p.m.
- An overnight cycle beginning around 11:58 p.m. and ending around 8:56 a.m. on November 1.
For both cycles, the logs recorded PM: suspend exit, completion of systemd-suspend.service, and completion of nvidia-resume.service. After the overnight sleep, tapping the keyboard brought the machine back.
So far, this is an apparently successful workaround, not proof of a permanent upstream fix. The issue may depend on timing and could be intermittent. I’ll keep testing normal sleep and wake behavior.
If the problem comes back
First check cat /proc/cmdline. If fbcon=nodefer is missing, inspect the dedicated GRUB file shown above and confirm that its contents are still present. After restoring a missing configuration on this Ubuntu/GRUB installation, run sudo update-grub, restart, and check /proc/cmdline again.
If the parameter is already present, compare the current kernel and NVIDIA driver versions with the versions recorded here, and inspect the failed boot for the same blocked-task pattern using the commands below. A black screen by itself does not establish that this is the same hang.
Useful diagnostic commands
Check the running kernel and boot parameters:
uname -rcat /proc/cmdlineCheck available and selected suspend modes. The mode in square brackets is selected:
cat /sys/power/mem_sleepCheck NVIDIA driver and GPU details:
nvidia-smiCheck the current boot’s sleep and NVIDIA resume services:
journalctl -b -u systemd-suspend.service \ -u nvidia-suspend.service \ -u nvidia-resume.serviceAfter a forced restart, inspect the previous boot’s kernel log:
journalctl -b -1 -kSearch that log for relevant suspend, console, and blocked-task messages:
journalctl -b -1 -k | grep -Ei \ 'suspend|resume|fbcon|nvidia|blocked for more|pm_restore_console'If a system stays black after a failed wake and can safely be left alone briefly, the kernel’s blocked-task messages may take a couple of minutes to appear. In this case they were what made the problem much easier to diagnose.
Sources and related reports
- Linux kernel documentation: framebuffer console and
fbcon=nodefer - Linux kernel documentation: system sleep states
- Ubuntu bug 2158993: NVIDIA modesetting / console deadlock
- Comment on bug 2158993 describing the
fbcon=nodeferworkaround - Related Ubuntu bug 2171636: NVIDIA S3 resume deadlock involving
fbcon