当前位置: 首页>>技术问答>>正文


将电脑从睡眠模式唤醒后沿着窗口边界出现奇怪的文物

, , , ,

问题描述

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


从Suspend唤醒Ubuntu 16.04后,所有窗口,上下文菜单和类似内容出现以下图形故障:

nvidia,graphics,suspend,visual-artifacts,ubuntu

nvidia,graphics,suspend,visual-artifacts,ubuntu

nvidia,graphics,suspend,visual-artifacts,ubuntu


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

  • NVIDIA GeForce 610M, driver version 375.39, 340.102
  • NVIDIA GT 630M, driver version 375.39
  • NVIDIA GTX 650, driver version 375.39
  • NVIDIA GT 740M, driver version 378.13
  • NVIDIA GTX 745, unknown driver version
  • NVIDIA GTX 850M, driver version 375.39, 378.13
  • NVIDIA GT 940M, driver version 375.39
  • NVIDIA GTX 950M, unknown driver version
  • NVIDIA GTX 960M, driver version 378.13
  • NVIDIA GTX 970, driver version 375.39
  • NVIDIA GTX 970M, driver version 375.39
  • NVIDIA GTX 980 TI, unknown driver version
  • NVIDIA GTX 1060, driver version 375.26, 375.39, 378.09
  • NVIDIA GTX 1070, driver version 378.09

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

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

此外,这个问题已经在干净的安装中得到了复制,其中唯一的变化是软件更新以及安装最新的NVIDIA驱动程序。


发生了什么事情,如何解决?

最佳解决办法

注意:这是一个临时的解决方法,直到Nvidia发布补丁驱动程序。向下滚动以查找实际修复程序的其他答案。 – Android Dev


我有同样的问题使用GPU:Nvidia GTX 970与nvidia 375.39驱动程序在Ubuntu 16.04.2 LTS

自从最近升级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)是bug,并在问题的屏幕截图中显示的窗口边界处产生白色人工制品。每当您暂停并再次唤醒时,都会重复发生。

直到几天前,Xenial仓库中的nvidia-367软件包工作正常且可靠,但现在他们更新了它并将其转换为一个过渡软件包,该软件包自动安装错误的nvidia-375版本。

解决方案(从Nvidia发布bugfix后更新):

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.

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

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

我现在的解决方案是从nvidia-375nvidia-378降级到nvidia-370,目前看起来工作正常。由于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。这个bug也是reported on Launchpad

感谢@Stefanuncovering this information中的出色技能!


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

  • 解决方案来自beta驱动程序381.09 changelog的相关屏幕截图:

    nvidia,graphics,suspend,visual-artifacts,ubuntu

  • 该驱动程序目前不在任何存储库中

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

  • 更新 – 立即修复官方报告:荣获@ubfan1 reporting this!详情请参阅下面的部分


1.从官方仓库安装补丁[发布]驱动程序(推荐):

Nvidia于05/04/2017推出了其发布驱动程序的更新,其中包含您正在寻找的错误修复。已更新的发行版驱动程序的版本为375.66

由于此375.66位于官方存储库中,因此加载修补过的驱动程序非常简单。

  • 如果您目前使用的是375.39版本,那么所有需要的都是简单的:

    sudo apt-get update
    sudo apt-get upgrade
    

  • 如果你在传统驱动程序上,那么你应该执行:

    sudo apt-get update
    

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

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

重新启动后,您应该会发现您的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,那么您可以在其他驱动程序中简单切换到版本340。 (版本340没有这个错误。)

nvidia,graphics,suspend,visual-artifacts,ubuntu

确保在切换驱动程序版本后重新启动。


3.要从非官方PPA安装补丁驱动程序(推荐):

  1. CTRL + ALT + T启动终端

  2. 运行这些命令:

    sudo -i
    add-apt-repository ppa:graphics-drivers/ppa
    apt-get update
    apt-get install nvidia-381
    
  3. 重新启动你的电脑,你应该很好去!计算机重新启动后,打开Nvidia X服务器设置。运气好的话,你会看到新的驱动版本:

    nvidia,graphics,suspend,visual-artifacts,ubuntu


4.要手动安装修补的β驱动程序(不推荐):

*.run文件安装Nvidia驱动程序通常不是一个好主意。它倾向于破坏事物。因此,如上所述,最好从PPA安装它们。尽管如此,如果您冒险并想手动安装它们,那么Ubuntu 16.04和GTX650就是这样的过程。

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

nvidia,graphics,suspend,visual-artifacts,ubuntu

确保切换后重新启动。如果您未能解除您当前的所有权驱动程序,新驱动程序将与旧的驱动程序发生冲突,并且会导致事情中断!

  1. 从Nvidia下载补丁驱动文件。 Here’s a direct link.

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

  3. 从GUI会话中注销(在继续之前,您应该在登录屏幕上结束)

  4. CTRL + ALT + F1启动tty1

  5. 用您的正常凭证登录

  6. 运行这些命令:

    sudo service lightdm stop
    cd Downloads
    chmod +x NVIDIA-Linux-x86_64-381.09.run
    sudo ./NVIDIA-Linux-x86_64-381.09.run
    
  7. 接受许可协议:

    nvidia,graphics,suspend,visual-artifacts,ubuntu

  8. 它会抱怨distribution-provided pre-installer脚本失败。无论如何继续:

    nvidia,graphics,suspend,visual-artifacts,ubuntu

  9. 询问您是否想用dkms注册内核模块时选择Yes

    nvidia,graphics,suspend,visual-artifacts,ubuntu

  10. 询问您是否要安装32位兼容性库时,请选择Yes

    nvidia,graphics,suspend,visual-artifacts,ubuntu

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

    nvidia,graphics,suspend,visual-artifacts,ubuntu

  12. 询问您是否想运行nvidia-xconfig时选择Yes

    nvidia,graphics,suspend,visual-artifacts,ubuntu

  13. 选择Ok退出安装程序

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

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

    nvidia,graphics,suspend,visual-artifacts,ubuntu

第四种办法

这个问题出现在375和378个驱动程序中……


鉴于简单地杀死compiz进程修复了不良的边界问题,我在系统唤醒后每次测试了一个在我的Ubuntu 16.04系统上运行的解决方案。

步骤1:

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

#!/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。

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

  • 切换到英特尔卡如果您正在运行NVIDIA Prime,则可以切换到英特尔卡,这将解决此问题。但请注意,它会阻止系统使用完整的图形电源。

  • 降级驱动程序根据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驱动程序中也得到修复,该驱动程序位于正常的软件仓库中,应该通过正常的更新来安装。

第八种办法

这不是一个完整的解决方案,但它可能比使用compiz --replace更好,否则重新启动compiz并搞乱你的工作区。

当我从暂停状态恢复时,我这样做:

  • 系统 – >首选项 – >出现

  • 将主题更改为不同的主题

  • 改回原来的主题

这将重新加载看起来在GPU中损坏的纹理。如果有一种方法可以自动强制重新加载主题纹理,这可能是一个永久的解决方案。

参考资料

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