在配备 NVIDIA 的 Ubuntu 20.04 上,暂停功能无法正常工作(无法唤醒)

在配备 NVIDIA 的 Ubuntu 20.04 上,暂停功能无法正常工作(无法唤醒)

我的问题是我无法正确暂停计算机。从技术上讲我可以,但当我回来并尝试重新打开它时,它就是不起作用。我的屏幕保持黑色,并闪烁着一条线,就像典型的书写线一样_

我的笔记本电脑HP Pavilion 15-BC519NS 英特尔酷睿 i5-9300H/8GB/512GB SSD/GTX 1050/15.6 英寸

以下是输出lspci

00:00.0 Host bridge: Intel Corporation 8th Gen Core 4-core Processor Host Bridge/DRAM Registers [Coffee Lake H] (rev 07)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x16) (rev 07)
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile)
00:04.0 Signal processing controller: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (rev 07)
00:12.0 Signal processing controller: Intel Corporation Cannon Lake PCH Thermal Controller (rev 10)
00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host Controller (rev 10)
00:14.2 RAM memory: Intel Corporation Cannon Lake PCH Shared SRAM (rev 10)
00:16.0 Communication controller: Intel Corporation Cannon Lake PCH HECI Controller (rev 10)
00:17.0 RAID bus controller: Intel Corporation 82801 Mobile SATA Controller [RAID mode] (rev 10)
00:1d.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port #9 (rev f0)
00:1d.5 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port #14 (rev f0)
00:1d.6 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port #15 (rev f0)
00:1d.7 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port #16 (rev f0)
00:1f.0 ISA bridge: Intel Corporation HM470 Chipset LPC/eSPI Controller (rev 10)
00:1f.3 Audio device: Intel Corporation Cannon Lake PCH cAVS (rev 10)
00:1f.4 SMBus: Intel Corporation Cannon Lake PCH SMBus Controller (rev 10)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Cannon Lake PCH SPI Controller (rev 10)
01:00.0 VGA compatible controller: NVIDIA Corporation GP107M [GeForce GTX 1050 3 GB Max-Q] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev ff)
02:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
04:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8822BE 802.11a/b/g/n/ac WiFi adapter
05:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS522A PCI Express Card Reader (rev 01)

我还没有在任何地方看到解决这个问题的方法,所以我希望有人能在这里帮我。提前谢谢!

答案1

我怀疑您的问题与最新的 NVIDIA 更新有关,该更新会安装nvidia-driver-460。此版本及其之后的一些版本目前存在错误。您可以在此处订阅该错误:https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-460/+bug/1911055

您可以通过将 NVIDIA 驱动程序降级到以前的版本来解决此问题,直到错误得到解决。请按照以下步骤降级到nvidia-driver-450-server

  1. 打开软件和更新并转到附加驱动程序标签。

  2. 选择nvidia-driver-450-server使用来自 nvidia-driver-450-server 的 NVIDIA 服务器驱动程序元包(专有))。

    附加驱动程序

    如果愿意,您可以尝试其他驱动程序nvidia-driver-450-server,并选择最适合您的驱动程序。

  3. 点击应用更改并等待更改应用完毕。

  4. 重新启动系统。

暂停现在应该可以按预期工作了!

答案2

修复暂停恢复问题 - 恢复时黑屏 Ubuntu 20.04LTS,5.13.0,nvidia-drivers 510

两个部分:

  1. 早期版本的 nvidia 驱动程序需要支持挂起/恢复/休眠/etc/systemd/

    从 nvidia-driver-470 开始,必须使用以下命令删除这些支持脚本:

    sudo systemctl disable nvidia-suspend
    sudo systemctl disable nvidia-resume
    sudo systemctl disable nvidia-hibernate
    

    在驱动程序更新过程中,它们不会自动删除,在 470 之前安装了 nvidia 驱动程序的系统在升级后会保留它们。这可能是许多人建议恢复到 460 的原因。

  2. /usr/bin/nvidia-sleep.sh仍需要通过立即退出来停用。在 bash 标头行后添加一行,以立即从脚本中退出 0(即成功):

    #!/bin/bash
    exit 0
    

通过这两组更改,暂停/恢复现在对我来说可以正常工作。

答案3

我在运行带有 NVIDIA 的 Ubuntu 20.04 的 Acer Aspire 笔记本电脑上遇到了同样的问题。我使用的是默认驱动程序(nvidia-driver-460)。然后我尝试了一下nvidia-driver-450-server,但仍然没有任何运气。然后我尝试了一下nvidia-driver-418-server,它成功了。

这是我的附加驱动程序软件和更新中的选项卡:

软件和更新中的“附加驱动程序”选项卡

我的建议:继续回滚驱动程序并进行测试,直到找到可行的驱动程序。

  1. 打开软件和更新 →附加驱动程序标签。
  2. 选择nvidia-driver-418-server
  3. 点击应用更改
  4. 重启系统。
  5. 测试暂停。

答案4

下面引用的是我对这个问题的解释和对重复线程的回答这里

了解一些背景知识来理解问题和一些建议的(有效)解决方案的冗余。

NVIDIA Linux 驱动程序通过两种不同的机制支持挂起和休眠电源管理操作:

  1. 内核驱动回调:默认机制 - 无需明确配置即可启用和使用。内核驱动程序从 Linux 内核接收回调,以暂停、休眠和恢复已注册 Linux PCI 驱动程序的每个 GPU。

  2. /proc/driver/nvidia/suspend:此机制在使用时不依赖 Linux 内核的回调,而是依赖系统管理工具(例如)systemd通过接口向 NVIDIA 内核驱动程序发出暂停、休眠和恢复命令/proc/driver/nvidia/suspend 。它仍处于实验阶段,需要明确配置才能使用。

最干净简单的解决方案就是简单地禁用 2(如果已启用)并让默认机制1做工作

当然,高级用户可以选择使用明确而准确的配置来修复[2]——它更强大,因为这种机制旨在消除内核驱动程序回调机制的限制1. 它支持具有高级 CUDA 功能(例如 UVM)的电源管理,并且能够保存和恢复所有视频内存分配

以下是最干净简单的解决方案su -假定访问):

  1. 检查[2]是否启用:

    systemctl status nvidia-suspend nvidia-hibernate nvidia-resume
    

    在此处输入图片描述

  2. 或者,执行以下操作:

    journalctl -b | grep suspend
    

    如果使用了 [2],您会在日志中看到它的明确操作,例如:

    COMMAND=/bin/systemctl status nvidia-suspend nvidia-hibernate nvidia-resume
    
  3. 好的,既然您知道 [2] 正在使用中,让我们禁用它。:

    systemctl disable nvidia-suspend nvidia-hibernate nvidia-resume
    

    您应该会看到一条消息,指出:

    Removed /etc/systemd/system/systemd-[suspend|hibernate|resume].service.requires/nvidia-[suspend|hibernate|resume].service
    
  4. 现在,您可以重复步骤 1 或 2,并验证服务确实已禁用

    rm /lib/systemd/system-sleep/nvidia
    

我见过一些有效但不准确的解决方案,例如[123],sudo rm /etc/systemd/system/systemd-suspend.service.requires/nvidia-suspend.service 建议手动操作。你不应该这样做。

其他一些有用的诊断命令:

$ cat /proc/driver/nvidia/version $ nvcc --version

另外Ctrl+ Alt+F7后跟 Ctrl+ Alt+ F1

相关内容