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.

2 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