Suspend 适用于 nouveau,但如果 NVIDIA 驱动程序也能正常工作就更好了。我尝试过 390.12 和更早的版本,但结果是一样的。在从 17.04 升级之前,一切都正常。
我在这里提出了一个问题:[1]https://devtalk.nvidia.com/default/topic/1029413/linux/blanc-screen-after-suspend-on-ubuntu-17-10-nvidia-390-12-driver/
较老的问题在这里:[3]从暂停状态恢复后出现黑屏
答案1
我也一直在努力寻找导致这些问题的原因。
经常提到的是内核参数、驱动程序和 BIOS 设置。是的,它们都以某种方式参与其中。但是,当系统挂起并尝试恢复时,究竟发生了什么?
BIOS 提供了电源管理选项。这些选项应设置为操作系统可以完全控制,因此通常应禁用它们。
解决了这个问题后,操作系统就可以开始工作了。这基本上意味着它会根据触发条件采取行动,然后检查要关闭的事物列表以及要保存以备系统需要再次开机时使用的内容。在此过程中,可能会出现问题。
由于似乎 NVIDIA 显卡出了问题,所以我觉得这是需要调查的问题。然后我偶然发现了 NVIDIA 文档中这个有趣的部分:https://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/powermanagement.html
介绍部分对我们的问题给出了一个非常合理的解释:
NVIDIA Linux 驱动程序支持挂起(挂起到 RAM)和休眠(挂起到磁盘)系统电源管理操作,例如 x86/x86_64 平台上的 ACPI S3 和 S4。当系统挂起或休眠时,NVIDIA 内核驱动程序会为睡眠周期准备正在使用的 GPU,保存所需的状态,以便在系统稍后恢复时将这些 GPU 恢复到正常运行状态。
NVIDIA 内核驱动程序保存的 GPU 状态包括视频内存中的分配。但是,这些分配总体上很大,通常无法被清除。由于驱动程序在挂起时可用的系统内存量通常不足以容纳大量视频内存副本,因此 NVIDIA 内核驱动程序的设计比较保守,通常只保存必要的视频内存分配。
由此造成的视频内存内容丢失可由用户空间 NVIDIA 驱动程序和某些应用程序进行部分补偿,但可能会导致渲染损坏和退出电源管理循环时应用程序崩溃等故障。
NVIDIA 已经想出了一个解决方案:
为了更好地支持这些类型的应用程序的电源管理,NVIDIA Linux 驱动程序提供了一个自定义电源管理接口,旨在与 systemd 等系统管理工具集成。
当我查看驱动程序文件(Arch 上的专有驱动程序)时,它确实列出了这些 systemd 单元文件。它们默认不启用,因为它们被视为“实验性的”。但我试了一下,只需启用上述服务即可暂停、恢复和休眠。
简而言之(关于 Arch):
sudo systemctl enable nvidia-suspend.service
sudo systemctl enable nvidia-hibernate.service
sudo systemctl enable nvidia-resume.service
尝试了一段时间后,大多数问题都解决了,但系统仍然会偶尔在恢复时显示黑屏。查看日志,错误现在明确指向模式设置。我尝试了一些与此相关的内核参数,但已删除所有内容,以便能够确定哪些有效,哪些无效。
因此,重点关注模式设置,我在内核中添加了以下参数:
nvidia-drm.modeset=1
显然,我还没有特定的 NVIDIA 内核模块,因此:
sudo pacman -S linux-headers nvidia-dkms
现在我不再遇到有关模式设置的错误,并且恢复工作正常,而且比以前更快/更干净。
答案2
哦,你又是一个 Nvidia 相关变砖事件的受害者,周二这件事让我非常恼火。下面是我为解决变砖事件所采取的方法。启动你的电脑,确保在你执行这些操作时电脑不会挂起。
sudo apt install linux-headers-$(uname -r)
在那之后:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-396
祈祷重启,然后你就可以开始工作了。对我来说很管用。
答案3
几个月来我一直在寻找解决方案,但毫无希望。我读到了很多有关 Linux 下 Nvidia 显卡暂停/恢复问题的帖子。
我尝试了很多方法,但都没有用:
- 使用内核参数。
- 将 nouveau 模块列入黑名单,甚至将其彻底删除(
package: xserver-xorg-video-nouveau
)。 - 重新安装 Nvidia 专有驱动程序。
最近,我尝试了一些方法,到目前为止似乎很有效。
只需nvidia-settings
以 root 身份运行该工具并将其设置保存到X Configuration File
。您可以将文件另存为/etc/X11/xorg.conf
(曾经是 xorg 配置的默认位置)或保存为 /usr/share/X11/xorg.conf.d/ 目录下的 conf 文件。
如果此解决方案不再有效,我将更新此帖子。顺便说一句,我在删除 nouveau 后尝试了此解决方案,但问题并未解决。因此,我不确定是 conf 文件本身的问题,还是创建 conf 文件和删除 nouveau 的结合问题。
我的系统:Kubuntu 18.04,桌面,Nvidia-390 专有驱动程序。
更新:它连续三次挂起都正常工作,但第四次就停止了。它挂起 7 个小时,醒来后屏幕一片空白。
答案4
我可以通过在 grub 文件中添加 nomodeset 来解决这个问题
编辑 grub 文件
sudo nano /etc/default/grub
在字符串末尾添加单词 nomodeset
GRUB_CMDLINE_LINUX_DEFAULT
,因此,如果它是GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
现在将是
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"
Ctrl+O保存并按Enter
更新 grub2 (或者在旧发行版上仅更新 grub):
sudo update-grub2
重启