当前位置: 首页>>技术教程>>正文


nvidia – 将计算机从睡眠模式唤醒后,窗口边框出现奇怪的伪像

, , ,

问题描述

注意:Nvidia 已发布官方修复程序;请参阅 ByteCommander’s answermy own answer 和/或 Kaz Wolfe’s answer


从 Suspend 唤醒 Ubuntu 16.04 后,所有窗口、上下文菜单等都会出现以下图形故障:


\\n

This is currently known to affect the following NVIDIA cards running\\nthe proprietary drivers:

\\n

    \\n

  • NVIDIA GeForce 610M, driver version 375.39, 340.102
  • \\n

  • NVIDIA GT 630M, driver version 375.39
  • \\n

  • NVIDIA GTX 650, driver version 375.39
  • \\n

  • NVIDIA GT 740M, driver version 378.13
  • \\n

  • NVIDIA GTX 745, unknown driver version
  • \\n

  • NVIDIA GTX 850M, driver version 375.39, 378.13
  • \\n

  • NVIDIA GT 940M, driver version 375.39
  • \\n

  • NVIDIA GTX 950M, unknown driver version
  • \\n

  • NVIDIA GTX 960M, driver version 378.13
  • \\n

  • NVIDIA GTX 970, driver version 375.39
  • \\n

  • NVIDIA GTX 970M, driver version 375.39
  • \\n

  • NVIDIA GTX 980 TI, unknown driver version
  • \\n

  • NVIDIA GTX 1060, driver version 375.26, 375.39, 378.09
  • \\n

  • NVIDIA GTX 1070, driver version 378.09
  • \\n

\\n

The above above list has been sourced from reports from other users\\nhere on AU, this thread, and this thread.

\\n

NB: This is be no means an exclusive list. It probably effects nearly all Nvidia cards.

\\n

此外,此问题已在全新安装中重现,唯一的变化是软件更新和最新 NVIDIA 驱动程序的安装。


这是怎么回事,如何解决?

最佳方案

注意:在 Nvidia 发布补丁驱动程序之前,这是一个临时解决方法。向下滚动以找到具有实际修复的其他答案。 – 安卓开发


我在使用 GPU 时遇到了同样的问题:在 Ubuntu 16.04.2 LTS 上使用 Nvidia 375.39 驱动程序的 Nvidia GTX 970

自从最近升级 nvidia 驱动程序以来,我已经观察到这一点。因此,我怀疑这是驱动程序中的错误。

我找到了答案 on the nvidia board 。这是驱动程序中已确认的错误,nvidia 显然已经在处理它。同时,可以重新启动 compiz

compiz --replace

摆脱文物。

The bug is in the Ubuntu bug tracking system 包括一个变通脚本,可在恢复后自动重新启动 compiz。

次佳方案

更新 2:

Nvidia 现在还将他们的 nvidia-375 驱动程序更新到版本 375.66,即 available from the standard Ubuntu repositories of all currently supported releases

这意味着从现在开始,除了像往常一样进行正常的系统更新之外,您不必再采取任何特殊操作。如果您不需要 graphics-drivers PPA 中的驱动程序包,则不需要它们。

以下是 16.04 上关于此错误的主要回购协议包的更改日志摘录:

$ apt changelog nvidia-375=375.66-0ubuntu0.16.04.1

  [...]
    - Fixed a regression that caused corruption in certain
      applications, such as window border shadows in Unity, after
      resuming from suspend.
  [...]

更新:

Nvidia 终于解决了这个问题并发布了一个新的工作驱动程序版本:nvidia-381

此答案中描述的解决方案也已更新,现在建议升级到此固定版本,而不是降级到出现错误之前的最新版本。不过,它仍然是相同的过程,您只需切换包名称即可。


问题原因:

一些适用于 Ubuntu 的专有 Nvidia 图形驱动程序包(即 nvidia-375nvidia-378 )存在错误,并在问题的屏幕截图中显示了窗口边框周围的白色伪像。每次您暂停并再次从中唤醒时,都会重复发生这种情况。

直到大约几天前,Xenial 存储库中的 nvidia-367 包运行良好且可靠,但现在他们对其进行了更新并将其转换为一个过渡包,该包会自动安装有问题的 nvidia-375 版本。

解决方案(在 Nvidia 发布错误修复后更新):

\\n

Make sure that you really have a Nvidia graphics card, which is causing the problem, and not one from a different brand that coincidentally misbehaves in a similar way. Installing Nvidia drivers for non-Nvidia graphics cards will do no good.

\\n

You can verify this by checking the output of the command below:

\\n

lspci -k | grep -iEA3 '3d|vga'\\n

\\n

我现在的解决方案是从 nvidia-375nvidia-378 降级到 nvidia-370 ,到目前为止似乎工作正常。\n随着 Nvidia 发布了一个新的升级驱动程序版本 nvidia-381 并修复了这个错误,我们可以(并且应该)安装那个而不是降级。

这个包在标准存储库中不可用,但您可以轻松地从 PPA 获取它并通过运行以下命令用它替换您当前的驱动程序:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt purge nvidia*

sudo apt install nvidia-370
sudo apt install nvidia-381

完成该过程后,重新启动计算机并测试是否仍有任何问题。对我来说,他们消失了。祝你好运。

第三种方案

这是 Nvidia 驱动程序中的错误。

Nvidia 已经能够重现该问题,并且他们正在努力修复,该修复将包含在他们的下一个驱动程序版本中。 (修复程序现已发布,请参阅以下部分)。

有关详细信息,请参阅 this thread on the Nvidia developer forums。这个错误也已经 reported on Launchpad

感谢 @Stefanuncovering this information 中的高超技巧!


Nvidia 终于发布了官方修复程序!

  • 该修复由 beta 驱动程序 381.09 提供\n来自 changelog 的相关屏幕截图:\n

  • 此驱动程序当前不在任何存储库中

  • 在上述更改之前,您将需要手动安装新驱动程序更新:381.09 驱动程序现在位于非官方存储库中。您可以从非官方 PPA 安装已打补丁的驱动程序,也可以手动安装。

  • 更新 – 现在在官方回购中修复:\n@ubfan1reporting this 点赞!有关详细信息,请参阅以下部分


1. 从官方 repo 安装补丁 [release] 驱动程序(推荐):

Nvidia 于 2017 年 5 月 4 日推送了对其发布驱动程序的更新,其中包含您正在寻找的错误修复等内容。更新后的发布驱动程序的版本为 375.66

由于这个 375.66 位于官方存储库中,因此加载已打补丁的驱动程序非常简单。

  • 如果您当前使用的是有问题的 375.39 版本,那么只需要一个简单的:

    \n

    sudo apt-get update\nsudo apt-get upgrade\n

    \n

  • 如果您使用的是旧版驱动程序,那么您应该执行以下操作:

    \n

    sudo apt-get update\n

    \n

    随后在其他驱动程序中切换到新的驱动程序版本:

    \n

    \n

  • 如果您当前使用的是手动安装的驱动程序,则应将其卸载、重新启动,然后执行上述步骤。

重新启动后,您应该会发现您的 Nvidia 驱动程序已更新为 375.66


2. 如果您不需要较新的驱动程序来与您的 GPU 兼容:*

*请注意,本节已被第 #1 节取代

如果您的显卡足够旧,驱动程序的 v340 版本支持它,则无需从非官方 PPA 安装更新版本。但是,对于使用 GTX 9 系列或 10 系列等较新显卡的用户,您将需要更新的驱动程序。

为方便起见,以下是 340 版驱动程序支持的卡的完整列表:

GeForce 800M Series (Notebooks):
GeForce GTX 880M, GeForce GTX 870M, GeForce GTX 860M, GeForce GTX 850M, GeForce 845M, GeForce 840M, GeForce 830M, GeForce 825M, GeForce 820M, GeForce 810M

GeForce 700 Series:
GeForce GTX TITAN Z, GeForce GTX TITAN Black, GeForce GTX TITAN, GeForce GTX 780 Ti, GeForce GTX 780, GeForce GTX 770, GeForce GTX 760, GeForce GTX 760 Ti (OEM), GeForce GTX 750 Ti, GeForce GTX 750, GeForce GTX 745, GeForce GT 740, GeForce GT 730, GeForce GT 720, GeForce GT 710, GeForce GT 705

GeForce 700M Series (Notebooks):
GeForce GTX 780M, GeForce GTX 770M, GeForce GTX 765M, GeForce GTX 760M, GeForce GT 755M, GeForce GT 750M, GeForce GT 745M, GeForce GT 740M, GeForce GT 735M, GeForce GT 730M, GeForce GT 720M, GeForce GT 710M, GeForce 720M, GeForce 710M, GeForce 705M

GeForce 600 Series:
GeForce GTX 690, GeForce GTX 680, GeForce GTX 670, GeForce GTX 660 Ti, GeForce GTX 660, GeForce GTX 650 Ti BOOST, GeForce GTX 650 Ti, GeForce GTX 650, GeForce GTX 645, GeForce GT 645, GeForce GT 640, GeForce GT 635, GeForce GT 630, GeForce GT 620, GeForce GT 610, GeForce 605

GeForce 600M Series (Notebooks):
GeForce GTX 680MX, GeForce GTX 680M, GeForce GTX 675MX, GeForce GTX 675M, GeForce GTX 670MX, GeForce GTX 670M, GeForce GTX 660M, GeForce GT 650M, GeForce GT 645M, GeForce GT 640M, GeForce GT 640M LE, GeForce GT 635M, GeForce GT 630M, GeForce GT 625M, GeForce GT 620M, GeForce 610M

GeForce 500 Series:
GeForce GTX 590, GeForce GTX 580, GeForce GTX 570, GeForce GTX 560 Ti, GeForce GTX 560 SE, GeForce GTX 560, GeForce GTX 555, GeForce GTX 550 Ti, GeForce GT 545, GeForce GT 530, GeForce GT 520, GeForce 510

GeForce 500M Series (Notebooks):
GeForce GTX 580M, GeForce GTX 570M, GeForce GTX 560M, GeForce GT 555M, GeForce GT 550M, GeForce GT 540M, GeForce GT 525M, GeForce GT 520M, GeForce GT 520MX

GeForce 400 Series:
GeForce GTX 480, GeForce GTX 470, GeForce GTX 465, GeForce GTX 460 SE v2, GeForce GTX 460 SE, GeForce GTX 460, GeForce GTS 450, GeForce GT 440, GeForce GT 430, GeForce GT 420, GeForce 405

GeForce 400M Series (Notebooks):
GeForce GTX 485M, GeForce GTX 480M, GeForce GTX 470M, GeForce GTX 460M, GeForce GT 445M, GeForce GT 435M, GeForce GT 425M, GeForce GT 420M, GeForce GT 415M, GeForce 410M, GeForce 405M

GeForce 300 Series:
GeForce GT 340, GeForce GT 330, GeForce GT 320, GeForce 315, GeForce 310

GeForce 300M Series (Notebooks):
GeForce GTS 360M, GeForce GTS 350M, GeForce GT 335M, GeForce GT 330M, GeForce GT 325M, GeForce GT 320M, GeForce 320M, GeForce 315M, GeForce 310M, GeForce 305M

GeForce 200 Series:
GeForce GTX 295, GeForce GTX 285, GeForce GTX 280, GeForce GTX 275, GeForce GTX 260, GeForce GTS 250, GeForce GTS 240, GeForce GT 230, GeForce GT 240, GeForce GT 220, GeForce G210, GeForce 210, GeForce 205

GeForce 200M Series (Notebooks):
GeForce GTX 285M, GeForce GTX 280M, GeForce GTX 260M, GeForce GTS 260M, GeForce GTS 250M, GeForce GT 240M, GeForce GT 230M, GeForce GT 220M, GeForce G210M, GeForce G205M

GeForce 100 Series:
GeForce GT 140, GeForce GT 130, GeForce GT 120, GeForce G100

GeForce 100M Series (Notebooks):
GeForce GTS 160M, GeForce GTS 150M, GeForce GT 130M, GeForce GT 120M, GeForce G 110M, GeForce G 105M, GeForce G 103M, GeForce G 102M

GeForce 9 Series:
GeForce 9800 GX2, GeForce 9800 GTX/GTX+, GeForce 9800 GT, GeForce 9600 GT, GeForce 9600 GSO, GeForce 9600 GSO 512, GeForce 9600 GS, GeForce 9500 GT, GeForce 9500 GS, GeForce 9400 GT, GeForce 9400, GeForce 9300 GS, GeForce 9300 GE, GeForce 9300 SE, GeForce 9300, GeForce 9200, GeForce 9100

GeForce 9M Series (Notebooks):
GeForce 9800M GTX, GeForce 9800M GTS, GeForce 9800M GT, GeForce 9800M GS, GeForce 9700M GTS, GeForce 9700M GT, GeForce 9650M GT, GeForce 9650M GS, GeForce 9600M GT, GeForce 9600M GS, GeForce 9500M GS, GeForce 9500M G, GeForce 9400M G, GeForce 9400M, GeForce 9300M GS, GeForce 9300M G, GeForce 9200M GS, GeForce 9100M G

GeForce 8 Series:
GeForce 8800 Ultra, GeForce 8800 GTX, GeForce 8800 GTS 512, GeForce 8800 GTS, GeForce 8800 GT, GeForce 8800 GS, GeForce 8600 GTS, GeForce 8600 GT, GeForce 8600 GS, GeForce 8500 GT, GeForce 8400 GS, GeForce 8400 SE, GeForce 8400, GeForce 8300 GS, GeForce 8300, GeForce 8200, GeForce 8100 /nForce 720a

GeForce 8M Series (Notebooks):
GeForce 8800M GTX, GeForce 8800M GTS, GeForce 8700M GT, GeForce 8600M GT, GeForce 8600M GS, GeForce 8400M GT, GeForce 8400M GS, GeForce 8400M G, GeForce 8200M G, GeForce 8200M

Quadro Series:
Quadro K6000, Quadro K5200, Quadro K5000, Quadro K4000, Quadro K4200, Quadro K2200, Quadro K2000, Quadro K2000D, Quadro K620, Quadro K600, Quadro K420, Quadro 6000, Quadro 5000, Quadro 4000, Quadro 2000, Quadro 2000D, Quadro 600, Quadro 410, Quadro 400

Quadro Series (Notebooks):
Quadro K5100M, Quadro K5000M, Quadro K4100M, Quadro K4000M, Quadro K3100M, Quadro K2100M, Quadro K3000M, Quadro K2000M, Quadro K1100M, Quadro K1000M, Quadro K610M, Quadro K510M, Quadro K500M, Quadro 5010M, Quadro 5000M, Quadro 4000M, Quadro 3000M, Quadro 2000M, Quadro 1000M

Quadro FX Series:
Quadro CX, Quadro FX 370, Quadro FX 370 Low Profile, Quadro FX 380, Quadro FX 380 Low Profile, Quadro FX 570, Quadro FX 580, Quadro FX 1700, Quadro FX 1800, Quadro FX 3700, Quadro FX 3800, Quadro FX 4600, Quadro FX 4700 X2, Quadro FX 4800, Quadro FX 5600, Quadro FX 5800

Quadro FX Series (Notebooks):
Quadro FX 3800M, Quadro FX 3700M, Quadro FX 3600M, Quadro FX 2800M, Quadro FX 2700M, Quadro FX 1800M, Quadro FX 1700M, Quadro FX 1600M, Quadro FX 880M, Quadro FX 770M, Quadro FX 570M, Quadro FX 380M, Quadro FX 370M, Quadro FX 360M

Quadro NVS Series:
Quadro NVS 290, Quadro NVS 295, NVS 510, NVS 315, NVS 310, NVS 300, Quadro NVS 420, Quadro NVS 450

Quadro NVS Series (Notebooks):
NVS 5400M, NVS 5200M, NVS 5100M, NVS 4200M, NVS 3100M, NVS 2100M, Quadro NVS 320M, Quadro NVS 160M, Quadro NVS 150M, Quadro NVS 140M, Quadro NVS 135M, Quadro NVS 130M

Quadro Plex Series:
Quadro Plex Model II, Quadro Plex D Series, Quadro Plex Model IV, Quadro Plex 7000

Quadro Sync Series:
Quadro Sync, Quadro G-Sync II

Quadro SDI:
Quadro SDI

GRID Series:
GRID K2, GRID K520

NVS Series:
Quadro NVS 290, Quadro NVS 295, NVS 510, NVS 315, NVS 310, NVS 300, Quadro NVS 420, Quadro NVS 450

NVS Series (Notebooks):
NVS 5400M, NVS 5200M, NVS 5100M, NVS 4200M, NVS 3100M, NVS 2100M, Quadro NVS 320M, Quadro NVS 160M, Quadro NVS 150M, Quadro NVS 140M, Quadro NVS 135M, Quadro NVS 130M

ION (Desktops):
ION

ION (Notebooks):
ION

ION LE (Desktops):
ION LE

ION LE (Notebooks):
ION LE

因此,如果您的 GPU 支持 340,那么您只需在 Additional Drivers 中切换到 340 版本即可。 (版本 340 没有这个错误。)

请务必在切换驱动程序版本后重新启动。


3. 从非官方 PPA 安装已打补丁的 [beta] 驱动程序(推荐):

  1. 使用 CTRL + ALT + T 启动终端

  2. 运行这些命令:

    \n

    sudo -i\nadd-apt-repository ppa:graphics-drivers/ppa\napt-get update\napt-get install nvidia-381\n
  3. 重新启动您的计算机,您应该一切顺利!计算机重新启动后,打开 Nvidia X 服务器设置。运气好的话,您会看到新的驱动程序版本:\n


4. 手动安装已打补丁的 [beta] 驱动程序(不推荐):

*.run 文件安装 Nvidia 驱动程序通常不是一个好主意。它往往会破坏事物。因此,最好从 PPA 安装它们,如上所述。不过,如果您喜欢冒险并想手动安装它们,那么这个过程对我来说适用于 Ubuntu 16.04 和 GTX650。

在安装打过补丁的驱动程序之前,您必须卸载当前的专有驱动程序并切换到 Nouveau 驱动程序:

确保切换后重新启动。如果您未能卸载当前的专有驱动程序,新驱动程序将与旧驱动程序发生冲突,您将破坏一切!

  1. 从 Nvidia 下载已打补丁的驱动程序文件。 Here’s a direct link.

  2. 将文件保存到您的下载文件夹

  3. 从您的 GUI 会话注销(您应该在继续之前进入登录屏幕)

  4. CTRL + ALT + F1 启动 tty1

  5. 使用您的正常凭据登录

  6. 运行这些命令:

    \n

    sudo service lightdm stop\ncd Downloads\nchmod +x NVIDIA-Linux-x86_64-381.09.run\nsudo ./NVIDIA-Linux-x86_64-381.09.run\n
  7. 接受许可协议:\n

  8. 它将抱怨 distribution-provided 预安装程序脚本失败。仍然继续:\n

  9. 当系统询问您是否要使用 dkms 注册内核模块时,选择 Yes:\n

  10. 当系统询问您是否要安装 32 位兼容性库时,选择 Yes:\n

  11. 构建内核模块需要一段时间,请耐心等待!\n

  12. 当系统询问您是否要运行 nvidia-xconfig 时选择 Yes :\n

  13. 选择 Ok 退出安装程序

  14. 差不多好了!现在只需运行这些命令:

    \n

    rm ~/.Xauthority\nrm ~/.config/dconf/unity\nsudo shutdown -r now\n
  15. 计算机重新启动后,打开 Nvidia X 服务器设置。运气好的话,您会看到新的驱动程序版本:\n

第四种方案

此问题存在于 375 和 378 驱动程序中…


鉴于简单地杀死 compiz 进程可以解决坏边界问题,我已经测试了一个解决方案,该解决方案每次在系统唤醒后都适用于我的 Ubuntu 16.04 系统。

步骤1:

我在目录 /lib/systemd/system-sleep 中创建了一个名为 fixbadborders 的脚本。\n它包含以下内容:

#!/bin/sh
## This file (or a link to it) must be in the folder /lib/systemd/system-sleep/
## Purpose: Kill compiz after system wakes up from sleep.
## This will fix bad window borders caused by Nvidia driver 375.39.
kill $(ps -C compiz -o pid=)

第2步:

允许脚本具有执行权限:

sudo chmod +x fixbadborders

要删除此脚本:

sudo rm /lib/systemd/system-sleep/fixbadborders

所有学分归于创建此脚本的 Sun Bear comment 13

第五种方案

NVIDIA 已发布更新的驱动程序版本,修复了此回归。任何超过 381.09 的驱动程序现在都不会再有这个问题,直到 NVIDIA 再次搞砸。

在驱动程序到达主存储库之前,可以从非官方的 NVIDIA 驱动程序 PPA 下载它们。这样做可以确保您不需要弄乱安装程序(这被广泛认为是一个坏主意)或 Nouveau。同样,它将允许通过 apt 安装/卸载驱动程序,而不是 NVIDIA 安装程序将驱动程序留在其中的危险 half-configuration。此外,这不会导致任何登录循环或错误,除非您有一个奇怪的系统。要安装,请运行:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-381

旧驱动程序将自动卸载并加载新驱动程序。随后重新启动您的计算机(因为 NVIDIA 驱动程序需要烘焙到内核中),一切都应该正常工作。您可以通过运行以下命令来检查驱动程序是否已正确安装:

nvidia-settings --version

在更新到最新的驱动程序之前,请务必还原本文中描述的所有补丁。例如,如果您安装了如下所述的 Unity 补丁版本,请运行此命令以恢复到正常版本:

sudo ppa-purge ppa:kaihengfeng/lp1292830 

请注意,您需要安装 ppa-purge,可以这样做:

sudo apt install ppa-purge

如果无法更新(卡太旧、公司政策等):

Launchpad 的 Kai-Heng Feng 非常友好地上传了一个 Unity 版本到他自己的 PPA (ppa:kaihengfeng/lp1292830),应该可以解决这个问题。为了解决这个问题,只需通过运行以下命令添加他的 PPA:

sudo add-apt-repository ppa:kaihengfeng/lp1292830 
sudo apt update
sudo apt full-upgrade

完成后,重新启动系统或通过注销然后重新登录来重新启动 X11。

或者,您也可以执行以下任一操作:

  • 切换到 Intel 卡\n如果你运行的是 NVIDIA Prime,则可以切换到 Intel 卡,这将解决此问题。但是请注意,它会阻止系统使用全部图形功能。

  • 降级驱动程序\n根据 some comments on the bug-report,降级到 NVIDIA 驱动程序 367.57 应该可以完全解决问题。由于它不再出现在 PPA 中,您需要直接从 NVIDIA (64-bit) (32-bit) (32-bit ARM) 下载它。

第六种方案

The solution proposed by Victor A. 工作正常。但是,您应该注意,放置在 /lib/systemd/system-sleep/ 中的脚本在计算机进入睡眠和唤醒时都会执行。鉴于我们只想要后者,使用建议的脚本会不必要地减慢 going-to-sleep 进程。我推荐以下一个:

#!/bin/sh
if [ "$2" = "suspend" ] || [ "$2" = "hybrid-sleep" ]; then
    case "$1" in
        post) kill $(ps -C compiz -o pid=) ;;
    esac
fi

不过,这是一个警告。此脚本(以及 Victor A. 提出的脚本)将禁用 wake-up 上的密码提示屏幕,从而构成安全风险。

第七种方案

此问题也已在 Nvidia 375.66 驱动程序中修复,该驱动程序位于正常存储库中,应该通过正常更新安装。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13219.html,未经允许,请勿转载。