Black screen after suspend/hibernate with nvidia

Hi all,
My system is an old gtx 1060 with AMD 5600x.
I’ve run Ubuntu on it for a few years and always had a few random suspend issues but its been able to suspend with a few glitches and I just restart the apps that were glitching.
I’ve moved to nixOS on this machine but I can’t get it to resume when I suspend or hibernate.
When powerManagement.enable = false I get graphical issues and the machine is unusable upon resume.
When’s its set to true I just get a black screen on resume.
I am on latest kernel and latest nvidia drivers with gnome and wayland all default.
Things I have tried:
hardware.nvidia.open=false
moving kernel back to stable (6.6)
Changing nvidia driver versions to 470, 535 & 555 on both power-management settings.

Here’s the nvidia config:

# nvidia.nix

{ config, lib, pkgs, ... }:
{

  # 
  hardware.opengl = {
    enable = true;
  };


  services.xserver.videoDrivers = [ "nvidia" ];
  nixpkgs.config.allowUnfree = true;
  
  nixpkgs.config.nvidia.acceptLicense = true;
  hardware.nvidia = {

    # Modesetting is required.
    modesetting.enable = true;

    # Nvidia power management. Experimental, and can cause sleep/suspend to fail.
    # Enable this if you have graphical corruption issues or application crashes after waking
    # up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead 
    # of just the bare essentials.
    powerManagement.enable = true;

    # Fine-grained power management. Turns off GPU when not in use.
    # Experimental and only works on modern Nvidia GPUs (Turing or newer).
    powerManagement.finegrained = false;

    # Use the NVidia open source kernel module (not to be confused with the
    # independent third-party "nouveau" open source driver).
    # Support is limited to the Turing and later architectures. Full list of 
    # supported GPUs is at: 
    # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus 
    # Only available from driver 515.43.04+
    # Currently alpha-quality/buggy, so false is currently the recommended setting.
    open = false;

    # Enable the Nvidia settings menu,
    # accessible via `nvidia-settings`.
    nvidiaSettings = true;

    # Optionally, you may need to select the appropriate driver version for your specific GPU.
    package = config.boot.kernelPackages.nvidiaPackages.latest;
  };
}

Does anyone have any ideas for the resume? is there a way to ‘reset’ the wayland session when I get glitches or a blank screen?

thanks heaps.

I think you’re out of luck for the moment, only nvidia can really help, but feel free to try the troubleshooting from this thread: Suspend problem

Notably, try driver version 560.35.03.

Looks like a 1060 exclusive issue? Also:

Is that 6.11? Make sure to update your channels.

Thanks for the quick reply,
Yeah I had a good look through that thread.
Yep, I am on 6.11.2 and I’ve tried the 6.6 stable channel as well.
And yeah latest nvidia is giving me 560.35.3
Yeah bugger, nvidia cards just seem to give a bit of grief.

Yeah, unfortunately. I think we’re stuck until either nvidia fix this or someone with the right know-how and hardware can figure out what fedora/ubuntu do differently.

You could also try the xanmod and other patched kernel variants nixpkgs packages. Maybe they behave differently. That’s just shooting in the dark, but not too much effort.

thanks for the suggestions,
and thanks to the beauty of nix, swapping out to the xanmod latest kernel is a breeze.
I just tried 6.11.2-xanmod1 with both power management options and still same behavior.
So i think I’m out of luck.
Thanks for your help here mate, and no thanks to nvidia for their sub-par linux support!

Hello, I’ve been battling against this bug for quite a while now, and I think I’ve come to a solution, tho I’m not sure if this will work for everybody.

Recently I’ve noticed that when I’m logged out of any user I could suspend with no problem sometimes, but never when I was logged in, so I decided to do some testings:

First, suspend and wake up the computer from the login screen and record the journalctl output with journalctl > boot-ok.txt.

Second, log into a user and suspend, then force shutdown (cause the screen would be all black), boot up again, and record the output of the last boot from journalctl with journalctl --boot -1 > boot-not-ok.txt.

The first thing I’ve noticed was that when it failed I would get the following message:

jan 31 05:26:42 nixos systemd-sleep[27566]: Failed to freeze unit 'user.slice': Connection timed out

and when it worked the output was this

jan 31 00:16:40 nixos systemd-sleep[16380]: Successfully froze unit 'user.slice'.

After searching for a bit I found this issue [user session fails to resume from suspend when user is using NFS or KVM · Issue #33083 · systemd/systemd · GitHub] which suggest that adding this to systemd-suspend.service fixes their problems:

[Service]
Environment="SYSTEMD_SLEEP_FREEZE_USER_SESSIONS=false"

( overall the problem described in the issue seems unrelated, but the solution at face value looked like it would work for my problem )

so, after looking into how to edit systemd entries on nixos I came up with this

  systemd.services."systemd-suspend" = {
    serviceConfig = {
      Environment=''"SYSTEMD_SLEEP_FREEZE_USER_SESSIONS=false"'';
    };
  };

And it seems to be working. I can suspend and wake up the computer while logged in with no problem. The only minor issue I’m having is that after waking up the screen will turn off again, but you just need to move your mouse around to turn it back on.

I hope this helps whoever comes across this post.

3 Likes

Here’s my two cents. My hunch is that GNOME Wayland desktop environment is a contributing cause for systems with Nvidia hanging after resuming from suspend. I have been using NixOS for about half a year now. With the default GNOME Wayland DE that came with the NixOS installer, I always had issues with wake from suspend. Once I switched over to Hyprland and played around with some kernel params, the wake from suspend issues disappeared.

Here is my minimal working config. Note the hardware and boot.kernelParams section. GitHub - Compute-Dragon/nixos-nv-sleep

That still doesn’t explain why it works on Ubuntu & co., though. There are likely multiple, different underlying issues at play here, especially as nvidia’s support for older GPUs has become fractured.

If you can reproduce issues with GNOME, it would be cool to see logs from boots that hang, that sounds like the kind of thing that would pop up.

I have added a GNOME specific specialisation and managed to repro the display stack hanging after wake. Poring over the logs dmesg and journalctl dump · GitHub, nothing stands out except the same exact error @CyberDruga pointed out. Applying @CyberDruga 's fix also worked

Side note, after exfiltrating the logs from the hung desktop via SSH, I tried to run systemctl suspend again for the fun of it, but suspend and wake… actually works! So turns out, it “can” suspend properly, just that in normal operation, something is borked with user.slice

1 Like

I too have very issues,

and it is funny no one has mentioned bios, under nvidia optimus, which is the hybrid mode, my sleep/resume works normally under wayland, even without all those funny settings you guys are suggesting, but the display graphics suffers from flaker issues.

If i enabled dedicated gpu only from bios, the resume is broken, however graphical flakers are gone.

i am running gnome 47 btw.

1 Like

Thanks so much for your work and for sharing this!

This works on my NixOS bare metal system with an NVIDIA 3080ti card and GNOME Wayland. I popped that code at the bottom of your post into my configuration.nix and switched into the rebuild, and it seems to be working just like you described. There is that weird black screen after you log in after a resume, but a button press keeps the display on after that.

In my nvidia module I have:

hardware.graphics = {
enable = true;
};

services.xserver.videoDrivers = [" nvidia "];

hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
powerManagement.finegrained = false;
open = true;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.beta;
};

2 Likes

I meant to say specifically thanks to CyberDruga’s post.

1 Like

my laptop has the same option, and I use only the dedicated GPU cause it’s smoother and gives me more fps. Specially on just the desktop. Using the piece of code I mentioned early fixed suspension for me.

I have this same issue on ThinkPad T15g1 with RTX2080. It has been bothering me since the moment I’ve started using nixos on his machine. Sometimes it happens every suspend, then after an update it will go away for months, then reappear. Nothing useful in logs. Happens on both open source and proprietary drivers. I just gave up at fixing this after enormous amount of hours I’ve spent trying to debug.

then you are not using sleep/suspend correctly are you? fixed what? the code fixed the problem where blank screen cant recover from suspension when dedicated gpu (nvidia) was enabled from BIOS on nixos?

are you sure?

I basically given up on that, because it does not even work on windows either, when dedicated mode was selected. LMAO

I’m gonna reply to this in good faith taking into consideration that the snarky tone of your message is probably just a byproduct of language barriers or related stuff.

Yes, there is the optimus mode, where you use 2 GPUs, the Intel one as the primary, and the NVidia one as the offload. My point was that with this option on my desktop feels sluggish and slightly unresponsive, but suspending the computer works.

Because of the sluggish responsiveness I disable this option and use only the NVidia GPU, because with this things runs much smoother, and I get more FPS on my games. The downside of it was that suspending the computer didn’t work.

Based on all of that, I either could live with a sluggish and slightly unresponsive computer experience, but have suspension working, or I could have a good time playing games at full capacity, but don’t have suspension working. I chose the latter.

But not only I chose the latter, I actively tried to look for a solution for my problem, which lo and behold, I did. I can play my games at the full capacity of my GPU, and I can also suspend my computer as well. It’s working for me and, as it seems from other comments, it’s working for other people as well. And that’s all I wanted from the comment I made, to help people out with an issue I was having as well.

With that out of the way, I hope you have a good day.

Alright, if you can’t maintain a conversation without trying to pick a fight with people then I don’t see why I should entertain any conversation with you.

Just going to join up this thread: PSA for those with hibernation issues on Nvidia

Again, likely many underlying causes of this, YMMV, but this may well help someone in search engine hell…

1 Like

I used to have the black screen issue quite often on LENOVO 20URS04P00 with both open and proprietary drivers, but since switching to NixOS 25.05.20250213.2ff53fe (Warbler) with open source drivers I had zero issues on suspend/resume. Seems like open source driver was fixed upstream as reported here Suspend doesn't work when PreserveVideoMemoryAllocations is enabled · Issue #472 · NVIDIA/open-gpu-kernel-modules · GitHub