Hi there!

I recently switched from Arch Linux after a decade and now settled on Void Linux. So far so good. However sometimes I gather minor things here and there. My current issue is, the proprietary drivers of Nvidia still seeking systemd for some parts and not sure how to walk around this.

I cannot suspend my PC because when I wake it up I always see something about nvidia-sleep.sh. Probably it cannot wake the GPU up properly.

This is nvidia-sleep.sh:
#!/bin/bash

if [ ! -f /proc/driver/nvidia/suspend ]; then
    exit 0
fi

RUN_DIR="/var/run/nvidia-sleep"
XORG_VT_FILE="${RUN_DIR}"/Xorg.vt_number

PATH="/bin:/usr/bin"

RestoreVT() {
    #
    # Check if Xorg was determined to be running at the time
    # of suspend, and whether its VT was recorded.  If so,
    # attempt to switch back to this VT.
    #
    if [[ -f "${XORG_VT_FILE}" ]]; then
        XORG_PID=$(cat "${XORG_VT_FILE}")
        rm "${XORG_VT_FILE}"
        chvt "${XORG_PID}"
    fi
}

case "$1" in
    is-suspend-then-hibernate-supported)
        # suspend-then-hibernate only works correctly if $SYSTEMD_SLEEP_ACTION
        # is supported, which was added in systemd 248.
        systemd_version=$(systemctl --version | head -n1 | cut -d' ' -f2)
        if [ "$systemd_version" -gt 247 ]; then
            exit 0
        fi

        echo "systemd version $systemd_version is too old to support suspend-then-hibernate with NVIDIA." 2>&1
        echo "Please upgrade to systemd 248 or newer." 2>&1
        exit 1
        ;;
    suspend|hibernate)
        mkdir -p "${RUN_DIR}"
        fgconsole > "${XORG_VT_FILE}"
        chvt 63
        if [[ $? -ne 0 ]]; then
            exit $?
        fi
        echo "$1" > /proc/driver/nvidia/suspend
        RET_VAL=$?
        #
        # If suspend/hibernate entry fails, switch back to the active VT
        #
        if [[ $RET_VAL -ne 0 ]]; then
            RestoreVT
        fi
        exit $RET_VAL
        ;;
    resume)
        echo "$1" > /proc/driver/nvidia/suspend
        RestoreVT
        exit 0
        ;;
    *)
        exit 1
esac

I’m using Niri so no desktop environment here if that helps. My driver is nvidia580. Also using greetd (w/ tuigreet). So, what can I do here?

Linux void 6.18.38_1 
pkgver: runit-2.3.1_1
Nvidia 580.159.04 

Edit: Tried nouveau and suspend works with it. However because Nvidia didn’t provide firmware blobs for my card (GTX 1080) I cannot use the open drivers well.

Edit 2: Tried to give power management from acpid to elogind, thinking it might help to fool this script since it’s systemd’s standalone part here. Currently elogind both handles my seat and power management. I actually had some hope here, but sadly didn’t work. Here are my elogind config files anyway:

/etc/elogind/logind.conf.d/logind.conf
[Login]
KillUserProcesses=no
HandlePowerKey=poweroff
HandlePowerKeyLongPress=poweroff
HandleRebootKey=reboot
HandleRebootKeyLongPress=poweroff
HandleSuspendKey=suspend
RemoveIPC=yes
/etc/elogind/sleep.conf.d/nvidia-sleep.conf                                    
[Sleep]
AllowSuspend=yes
AllowHibernation=no
AllowSuspendThenHibernate=no
AllowHybridSleep=no
#SuspendMode=deep
SuspendState=mem standby freeze
HandleNvidiaSleep=yes

Nvidia, this is for you:

  • hellmo_luciferrari@lemmy.zip
    link
    fedilink
    English
    arrow-up
    4
    ·
    11 days ago

    I would imagine that the line where it checks systemd version could be modified to fit. How? I dont know.

    Why use the proprietary NVIDIA package instead of nouveau?

    • muhyb@programming.devOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      11 days ago

      I tried modifying chvt 63 part into where I can easily access via key shortcuts like chvt 2 and now I’m getting a different error output, at least something… more readable.

      I don’t use nouveau because I play games. It improved with NVK a lot recently but still isn’t there.

      • hellmo_luciferrari@lemmy.zip
        link
        fedilink
        English
        arrow-up
        3
        ·
        11 days ago

        I also play games, and use noveau. I get great performance. No issues at all. In some cases even better than proprietary.

        • muhyb@programming.devOP
          link
          fedilink
          English
          arrow-up
          2
          ·
          11 days ago

          Huh, last time I tried NVK was more than 6 months ago apparently. I’m actually interested in open drivers because proprietary ones are pain. Anyway, can you explain more? What kind of games are you playing, for how long on nouveau? It might be improved since I last checked.

          • hellmo_luciferrari@lemmy.zip
            link
            fedilink
            English
            arrow-up
            3
            ·
            11 days ago

            I have been on nouveau drivers for over a year at this point. Games vary, but have played through a good chunk of Cyber Punk 2077, Doom Dark Ages (including the new DLC), Minecraft (specifically All The Mods 10), Mortal Kombat One (with latest DLC), 7 Days to Die, Risk of Rain 2, The Talos Principle Reawakened, Far Cry 5, Far Cry 6.

            I mean I have played plenty more.

            I use Proton-Ge or CachyOS Proton.

            I also have an issue with suspend/hibernate and the like. Machine just shuts off. I haven’t figured that out for myself.

            • muhyb@programming.devOP
              link
              fedilink
              English
              arrow-up
              2
              ·
              11 days ago

              Hmm, some resource-heavy games there. Sounds promising. Last time when I try to play resource-heavy games, I was getting 30-40 FPS where I usually get at least 75. There were playable but not fun that way. By the way, just checked and last time I tried NVK was 2 years ago!? I guess I’ll give it a shot again. Thanks for reminding me. <3

              I also have an issue with suspend/hibernate and the like. Machine just shuts off. I haven’t figured that out for myself.

              This doesn’t sound good. So it’s possible my problem won’t go away with nouveau. :/

              Edit: Which distro are you using by the way?

              • hellmo_luciferrari@lemmy.zip
                link
                fedilink
                English
                arrow-up
                4
                ·
                11 days ago

                Always glad to share what I find that may help another person!

                Also may I add, I am using 2 180hz monitors and I hit 144 constantly. (I am rocking the 3090)

                I am on Arch! I am not super intimate with how suspend/hibernate works with Nvidia cards, even after perusing the Arch Wiki and trying a lot.

                I did look into it a bit. And you have inspired me to do so even more. Should I find something, you’ll be the first I share with.

                • muhyb@programming.devOP
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  ·
                  edit-2
                  11 days ago

                  Mine is 1080 and already dropped to legacy driver.

                  By the way, just installed nouveau and on my first try, got bunch of DATA_ERROR but it’s fine now. Though haven’t tried a game yet, will try soon and report back.

                  While doing this, found out about this: nouveau doesn’t have support for power management for some cards and apparently mine is one of them.

                  Check your sudo dmesg | grep -i nouveau and if you see pmu: firmware unavailable that’s why your suspend or hibernate don’t work (mine probably won’t too, will see).

                  Thanks again. :)

                  • hellmo_luciferrari@lemmy.zip
                    link
                    fedilink
                    English
                    arrow-up
                    2
                    ·
                    11 days ago

                    Oh man, that sounds like not so much fun. Keep me posted! I will help if I can if there is anything I can do.

                    I did run sudo dmesg | grep -i nouveau and nothing came up.

                    I did look into different idle parameters for /sys/power/mem_sleep

                    But I didn’t end up trying to switch from s2idle deep to just s2idle.