从睡眠模式唤醒计算机后沿窗口边界出现奇怪的瑕疵

NB:Nvidia发布了官方修正案; 请看ByteCommander的答案 , 我自己的答案和/或Kaz Wolfe的答案 。


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

在此处输入图像描述


目前已知这会影响运行专有驱动程序的以下NVIDIA卡:

  • NVIDIA GeForce 610M,驱动程序版本375.39,340.102
  • NVIDIA GT 630M,驱动程序版本375.39
  • NVIDIA GTX 650,驱动程序版本375.39
  • NVIDIA GT 740M,驱动程序版本378.13
  • NVIDIA GTX 745,未知驱动程序版本
  • NVIDIA GTX 850M,驱动程序版本375.39,378.13
  • NVIDIA GT 940M,驱动程序版本375.39
  • NVIDIA GTX 950M,未知驱动程序版本
  • NVIDIA GTX 960M,驱动程序版本378.13
  • NVIDIA GTX 970,驱动程序版本375.39
  • NVIDIA GTX 970M,驱动程序版本375.39
  • NVIDIA GTX 980 TI,未知驱动程序版本
  • NVIDIA GTX 1060,驱动程序版本375.26,375.39,378.09
  • NVIDIA GTX 1070,驱动程序版本378.09

上面的列表来自AU, 此主题和此主题的其他用户的报告。

注意:这绝不是一个独家清单。 它可能影响几乎所有的Nvidia卡。

此外,此问题已在干净安装中复制,其中唯一的更改是软件更新和最新NVIDIA驱动程序的安装。


发生了什么,怎么解决?

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


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

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

我在nvidia板上找到了答案。 这是驱动程序中确认的错误,nvidia显然已经在使用它了。 在此期间,可以重新启动compiz

 compiz --replace 

摆脱文物。

该错误发生在Ubuntu错误跟踪系统中,包括一个在恢复后自动重启compiz的变通脚本。

更新2:

Nvidia现在还将他们的nvidia-375驱动程序更新为375.66版本,该版本可从所有当前支持的版本的标准Ubuntu存储库中获得 。

这意味着从现在开始, 您不必再采取任何特殊操作 ,除非像往常一样进行正常的系统更新。 如果您不想要它们,则不需要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发布bugfix后更新):

确保你真的有一个导致问题的Nvidia显卡,而不是一个来自同一行为的巧妙行为的不同品牌的显卡。 为非Nvidia显卡安装Nvidia驱动程序将没有任何好处。

您可以通过检查以下命令的输出来validation这一点:

 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安装nvidia-370 

 sudo apt install nvidia-381 

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

Nvidia驱动程序中的一个错误。

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

有关详细信息,请参阅Nvidia开发人员论坛上的此主题 。 Launchpad上也报告了此错误。

感谢@Stefan在发现这些信息方面的出色技巧!


Nvidia终于发布了官方解决方案!

  • 修复程序来自beta驱动程序381.09来自更改日志的相关屏幕截图: 在此处输入图像描述

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

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

  • 更新 – 现在在官方报告中修复:

    感谢@ ubfan1 举报此内容 ! 有关详细信息,请参阅以下部分


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

Nvidia于2017年4月5日推出了更新到他们的发布驱动程序,其中包含了您正在寻找的错误修复程序。 更新的发行版驱动程序已获得版本375.66

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

  • 如果您目前使用的是375.39版本的bug,那么应该要求的只是一个简单的:

     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没有此错误。)

在此处输入图像描述

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


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

  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 Server Settings。 运气好的话,你会看到新的驱动程序版本:

    在此处输入图像描述


4. 手动安装修补的[beta]驱动程序( 推荐):

*.run文件安装Nvidia驱动程序通常不是一个好主意。 它往往会破坏事物。 因此,如上所述,最好从PPA安装它们。 然而,如果你是冒险并且想要手动安装它们,这个过程对我来说对Ubuntu 16.04和GTX650起作用了。

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

在此处输入图像描述

切换后务必重启。 如果您未能卸载当前的专有驱动程序,新驱动程序将与旧的驱动程序冲突,您将破坏这些事情!

  1. 从Nvidia下载修补的驱动程序文件。 这是一个直接链接。

  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. 接受许可协议:

    在此处输入图像描述

  8. 它会抱怨分发提供的预安装程序脚本失败。 无论如何继续:

    在此处输入图像描述

  9. 当系统询问您是否要使用dkms注册内核模块时,请选择“ 是”

    在此处输入图像描述

  10. 当系统询问您是否要安装32位兼容性库时,请选择“ 是”

    在此处输入图像描述

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

    在此处输入图像描述

  12. 当系统询问您是否要运行nvidia-xconfig时,请选择“ 是”

    在此处输入图像描述

  13. 选择确定退出安装程序

  14. 差不多了! 现在运行以下命令:

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

    在此处输入图像描述

这个问题出现在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创建此脚本评论13

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

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

 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 ppa:kaihengfeng/lp1292830地将Unity版本上传到他自己的PPA( ppa:kaihengfeng/lp1292830 ),该版本应修补此问题。 要解决此问题,只需运行以下命令即可添加其PPA:

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

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

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

  • 切换到Intel卡
    如果您正在运行NVIDIA Prime,您可以切换到Intel卡,这将解决此问题。 但请注意,它会阻止系统使用全图形电源。
  • 降级司机
    根据对bug报告的一些评论 ,降级到NVIDIA驱动程序367.57应该完全解决问题。 由于PPA中不再存在这种情况,因此您需要直接从NVIDIA (64位) (32位) (32位ARM)下载 。

Victor A.提出的解决方案效果很好。 但是,您应该注意,放置在/lib/systemd/system-sleep/中的脚本在计算机进入睡眠状态和唤醒时都会执行。 鉴于我们只想要后者,使用建议的脚本不必要地减慢了进入睡眠过程的速度。 我推荐以下一个:

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

但是有警告。 该脚本(以及Victor A.提出的脚本)将在唤醒时禁用密码提示屏幕,从而构成安全风险。

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

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

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

  • 系统 – >首选项 – >外观
  • 将主题更改为不同的主题
  • 改回原来的主题

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

还有另一种方法可以解决这个问题。 (如果你有很多进程在运行,我不推荐它。)

醒来电脑后就杀了Xorg。

通过以下方式找到Xorg的PID:

 top 

当你找到Xorg的pid时,按Ctrl + C来停止“顶部”进程。

转到root并通过以下方式终止进程:

 sudo su kill [pid] 

之后,登录您的帐户。

警告:这将关闭所有应用程序。 Firefox不会对此产生任何问题,它只会恢复所有选项卡,但我无法保证其他应用程序,因此请在执行此过程之前保存它们。

我尝试将驱动程序更改为更新的错误修复程序,但它使我的能力与tensorflow进行深度学习,所以我回到了最初的错误软件。

每次我从睡眠中唤醒Ubuntu时都会发生这种情况。 我只是打开一个终端CTRL + ALT + T并输入

 killall compiz 

显示屏重置,毛刺消失。 只需要几秒钟。 您甚至可以在~/.bashrc中将其alias kc='killall compiz'这样您只需在执行命令时键入kc即可。