Suspend/resume issues are among the most frustrating problems on Linux laptops, especially those with hybrid graphics (Intel + NVIDIA). A common symptom is a black console after resume or a frozen graphical session. This guide walks you through a proven step-by-step method to achieve reliable suspend/resume on the Dell XPS 15 9550 — but the same principles apply to many other laptops with NVIDIA GPUs.
1. Verify Basic Suspend/Resume Works
Before making changes, ensure that suspend/resume works at least partially.
systemctl suspend
Wait a few seconds, then press the power button (or any key) to wake.
- If the machine wakes but drops you to a console with kernel messages or freezes, continue with the next steps.
- If it never wakes at all, jump to the firmware and driver sections below.
This baseline test ensures you’re debugging suspend/resume itself and not an unrelated power or driver issue.
2. Install the Latest Firmware & Kernel
Updated firmware and kernels fix a large number of ACPI and driver bugs.
sudo apt update && sudo apt full-upgrade
# Install fwupd and refresh firmware database
sudo apt install fwupd
sudo fwupdmgr refresh && sudo fwupdmgr update
# Install HWE kernel (gives you 5.19 on Ubuntu 20.04)
sudo apt install --install-recommends linux-generic-hwe-20.04
Reboot after the upgrades:
sudo reboot
Newer kernels and firmware often add fixes for ACPI, GPU power management, and suspend/resume reliability.
3. Install the Proprietary NVIDIA Driver
For hybrid laptops like the XPS 15 9550, the open source nouveau driver often fails with suspend/resume. Use the NVIDIA PPA instead:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
# Choose the latest stable driver, e.g. 525
sudo apt install nvidia-driver-525
Reboot after installation.
4. Add Required Kernel Parameters
The Dell firmware responds best to specific ACPI tweaks. Edit your GRUB config:
sudo nano /etc/default/grub
Find the line starting with GRUB_CMDLINE_LINUX_DEFAULT and append:
acpi_osi=! acpi_osi='Windows 2015' mem_sleep_default=deep pcie_aspm=force nvidia-drm.modeset=1
Explanation:
acpi_osi=!disables the default OSI strings that confuse some firmware.acpi_osi='Windows 2015'tricks the BIOS into exposing proper S3 states.mem_sleep_default=deepforces the kernel to use the deepest sleep (S3).pcie_aspm=forceenables PCIe Active State Power Management to help the GPU power down correctly.nvidia-drm.modeset=1ensures the NVIDIA DRM driver stays in modeset mode during suspend/resume.
Save and update GRUB:
sudo update-grub
5. Create System-Sleep Scripts to Unload/Reload NVIDIA
Sometimes the NVIDIA modules must be unloaded before suspend and reloaded after resume. Create a script:
sudo nano /usr/lib/systemd/system-sleep/nvidia-suspend.sh
Paste the code:
#!/bin/sh
# Unload NVIDIA modules before suspend, reload after resume
if [ "$1" = "pre" ]; then
# Stop the display manager briefly to avoid flicker
systemctl stop gdm.service
# Unload NVIDIA modules
modprobe -r nvidia_drm nvidia_modeset nvidia
fi
if [ "$1" = "post" ]; then
# Reload the modules
modprobe nvidia
modprobe nvidia_modeset
modprobe nvidia_drm
# Restart the display manager
systemctl start gdm.service
fi
Make it executable:
sudo chmod +x /usr/lib/systemd/system-sleep/nvidia-suspend.sh
This ensures NVIDIA is cleanly detached before suspend and properly reloaded after resume.
6. Disable Unnecessary USB Wake-Up (Optional but Recommended)
External USB devices (especially mice, keyboards, docks) can wake your laptop unintentionally. Check and disable them:
cat /proc/acpi/wakeup
Find the USB controller (often XHC) and toggle it:
sudo sh -c 'echo XHC > /proc/acpi/wakeup'
You can also toggle other entries such as EHC1, EHC2, etc., if you have a dock or other devices.
7. Reboot and Test Again
sudo reboot
After reboot, repeat the suspend test:
systemctl suspend
You should now see:
- The system enters S3 (RAM stays powered).
- Wake returns you to the graphical login screen (GDM).
- No black console and no kernel panic.
If it still fails, double-check the script paths, GRUB parameters, and driver version.
8. Optional: Enable “Hybrid Sleep” (S3 + S4)
Hybrid Sleep writes RAM contents to disk but also keeps RAM powered, giving you a fast resume plus a safe fallback. Edit:
sudo nano /etc/systemd/sleep.conf
Add:
[Sleep]
AllowHybridSleep=yes
Test with:
systemctl hybrid-sleep
This combines suspend to RAM with hibernation for extra safety on low battery.
9. Troubleshooting Checklist
If suspend/resume still misbehaves:
- Confirm
nvidia-drm.modeset=1is active (cat /sys/module/nvidia_drm/parameters/modeset). - Ensure your system-sleep script has execute permission.
- Check
journalctl -b -1after a failed resume for driver or ACPI errors. - Update to the newest kernel and NVIDIA driver from the PPA.
- Temporarily disable USB wake devices to rule out spurious wakes.
- Test without Hybrid Sleep if enabled.
Conclusion
By systematically updating firmware, installing the proper drivers, tweaking kernel parameters, and managing the NVIDIA modules before and after sleep, you can make the Dell XPS 15 9550 (and similar laptops) reliably suspend and resume under Linux. These steps not only prevent black screens but also improve power savings and stability.