Step-by-Step Guide for Dell XPS 15 9550 (and Similar Laptops)

A detailed step-by-step guide to fix suspend/resume issues on the Dell XPS 15 9550 (and similar laptops). Learn how to update firmware, install NVIDIA drivers, tweak kernel parameters, and use system-sleep scripts for reliable sleep and wake.

Step-by-Step Guide for Dell XPS 15 9550 (and Similar Laptops)

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=deep forces the kernel to use the deepest sleep (S3).
  • pcie_aspm=force enables PCIe Active State Power Management to help the GPU power down correctly.
  • nvidia-drm.modeset=1 ensures 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.

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=1 is active (cat /sys/module/nvidia_drm/parameters/modeset).
  • Ensure your system-sleep script has execute permission.
  • Check journalctl -b -1 after 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.

Read next

Testing OpenGL Performance on CPU nouveau driver

While waiting for the right NVLink bridge, I decided to see how my dual RTX 2080 Ti setup performs without them—by turning the GPUs off entirely. The result? A deep dive into OpenGL on CPU using the humble Nouveau driver, where even spinning gears tell a story about patience and pixels.