fedora下解决nvidia闭源驱动无法进行S3睡眠导致的“睡死”问题

〇、操作环境及问题描述

1、操作环境:

❯ fastfetch
             .',;::::;,'.                 datong@fedora
         .';:cccccccccccc:;,.             -------------
      .;cccccccccccccccccccccc;.          OS: Fedora Linux 43 (Workstation Edition) x86_64
    .:cccccccccccccccccccccccccc:.        Host: MS-7996 Reborn by dsanke (1.0)
  .;ccccccccccccc;.:dddl:.;ccccccc;.      Kernel: Linux 6.17.12-300.fc43.x86_64
 .:ccccccccccccc;OWMKOOXMWd;ccccccc:.     Uptime: 12 mins
.:ccccccccccccc;KMMc;cc;xMMc;ccccccc:.    Packages: 2762 (rpm), 19 (flatpak), 5 (snap)
,cccccccccccccc;MMM.;cc;;WW:;cccccccc,    Shell: zsh 5.9
:cccccccccccccc;MMM.;cccccccccccccccc:    Display (L20W): 1680x1050 @ 60 Hz in 22" [External]
:ccccccc;oxOOOo;MMM000k.;cccccccccccc:    DE: GNOME 49.2
cccccc;0MMKxdd:;MMMkddc.;cccccccccccc;    WM: Mutter (Wayland)
ccccc;XMO';cccc;MMM.;cccccccccccccccc'    WM Theme: Mojave-Dark-solid-alt
ccccc;MMo;ccccc;MMW.;ccccccccccccccc;     Theme: Adwaita [GTK2/3/4]
ccccc;0MNc.ccc.xMMd;ccccccccccccccc;      Icons: Adwaita [GTK2/3/4]
cccccc;dNMWXXXWM0:;cccccccccccccc:,       Font: Adwaita Sans (11pt) [GTK2/3/4]
cccccccc;.:odl:.;cccccccccccccc:,.        Cursor: Adwaita (24px)
ccccccccccccccccccccccccccccc:'.          Terminal: Ptyxis 49.2
:ccccccccccccccccccccccc:;,..             Terminal Font: MesloLGS Nerd Font (10pt)
 ':cccccccccccccccc::;,.                  CPU: Intel(R) Core(TM) i5-7600K (4) @ 4.20 GHz
                                          GPU: NVIDIA GeForce GTX 960 [Discrete]
                                          Memory: 3.03 GiB / 11.63 GiB (26%)
                                          Swap: 0 B / 8.00 GiB (0%)
                                          Disk (/): 22.45 GiB / 110.20 GiB (20%) - btrfs
                                          Local IP (enp2s0): 192.168.1.108/24
                                          Locale: zh_CN.UTF-8

nvidia 驱动版本:580.119.02.

2、问题描述

本人在安装 nvidia 显卡之前一直使用 S3 睡眠模式,并且之前使用的是 i5-7600k 自带的 hd610 核显进行显示输出。但在使用 gtx960 显卡并按照fedora 官方文档正确安装 nvidia 闭源驱动后,无法进行之前的正常 S3 睡眠。经常睡死,表现为鼠标键盘都显示正常连接,电脑也还在运行状态,但是显卡输出无信号,并且鼠标键盘等外设都无法唤醒电脑进入正常的工作模式,无法将 GPU 恢复至正常状态。

Linux 支持多种睡眠状态(Suspend-to-RAM / S3, Suspend-to-Disk / Hibernate, Suspend-to-Idle / s2idle)。以上原因在于 nvidia 对传统的睡眠模式 S3 的兼容比较差,对现代待机模式(s2idle)支持较好。

二、检查睡眠模式

查看当前系统支持的睡眠模式:

cat /sys/power/mem_sleep

输出:

[s2idle] deep
# OR
s2idle [deep]

[s2idle] 表示当前默认使用的是 s2idle(较安全)。

[deep] 表示当前使用 S3(传统睡眠,NVIDIA 容易出问题)。

其中,s2idle 是 Linux 内核中一种 低功耗空闲状态(suspend-to-idle),也称为 “现代待机”(Modern Standby) 它是 ACPI(高级配置与电源接口)规范中定义的睡眠模式之一,属于 轻量级睡眠,与传统的 S3(suspend-to-RAM)有显著区别,同时也更加耗电。

对比s2idleS3
系统状态CPU 停止,但内核调度器仍“逻辑运行”整个系统挂起,仅 RAM 供电
唤醒方式任意中断(键盘、鼠标、网络等)需要特定唤醒事件(如电源键)
功耗中等(比运行低,比 S3 高)很低(接近关机)
NVIDIA 驱动支持较好(闭源驱动可工作)经常失败(驱动无法恢复 GPU 状态)
Windows 对应“Modern Standby”“Sleep (S3)”

三、更改睡眠模式为 s2idle

编辑 GRUB 配置,添加内核参数:

sudo nano /etc/default/grub

找到 GRUB_CMDLINE_LINUX 行,在引号内添加:

mem_sleep_default=s2idle

如:

GRUB_CMDLINE_LINUX="rhgb quiet rd.driver.blacklist=nouveau,nova_core modprobe.blacklist=nouveau,nova_core,mem_sleep_default=s2idle"

然后更新 GRUB 配置:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

重启,应用更改:

sudo reboot

四、检验睡眠

使用命令手动进入睡眠:

sudo systemctl suspend

查看是否成功睡眠。


版权声明: 本文为博主「张火火isgudi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接: https://www.cnblogs.com/zbyisgudi/p/19409359

更多推荐