从睡眠模式唤醒计算机后,窗口边框出现了奇怪的图案。

NB: Nvidia已经发布了官方修复程序,请参阅ByteCommander的回答我的回答和/或Kaz Wolfe的回答
从Suspend模式唤醒Ubuntu 16.04后,所有窗口、上下文菜单等周围出现以下图形故障:

enter image description here


目前已知以下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论坛上其他用户的报告,this帖子和this帖子。
注意:这绝不是一个详尽无遗的列表。几乎所有的Nvidia显卡可能都会受到影响。
此外,这个问题已经在干净的安装中复制,唯一的变化是软件更新和最新的NVIDIA驱动程序的安装。
什么事情正在发生,如何解决?

你使用的是哪个显卡驱动程序?你的显卡型号是什么?最近我遇到了和你一样的问题,我的940M显卡在暂停和唤醒笔记本后,某些版本的NVIDIA专有驱动程序出现了问题。请编辑问题并添加lspci -k | grep -iEA3 '3d|vga'命令的输出,其中包含所有请求的信息。谢谢。 - Byte Commander
1哦,实际上我也再次遇到这个问题,因为我使用的 nvidia-367 驱动程序成为了一个过渡包,它会自动升级到 nvidia-375,而这个版本是导致这个 bug 的其中一个版本。是时候去纠缠 NVIDIA 并撰写错误报告了。 - Byte Commander
2那确实是个问题,但你可以尝试谷歌一些类似“角落里的奇怪事物”的东西...总之,这些问题的答案很差,而下面的解决方案非常好用。 - Ivan
1@taylorswift - 看起来至少还有41个人也遇到了这个问题:https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-375/+bug/1667158 我猜我们只能等Nvidia来修复它了。 - You'reAGitForNotUsingGit
还会影响到GeForce GTX 950M - conualfy
这个问题似乎是重复的,因为它在几周后出现了,与早前的问题相同。 - Sun Bear
@SunBear 这个问题实际上是重复的。由于这个问题有更多的浏览量和投票,最好将其保留为主要问题。 - You'reAGitForNotUsingGit
同样影响GeForce GTX 745 - ArcaneDominion
我在14.04版本上的旧fglrx驱动程序中遇到了类似的错误。 - Suici Doga
10个回答

NB:这是一个临时解决方案,直到Nvidia发布了修补程序驱动程序。向下滚动以找到其他带有实际修复程序的答案。- Android Dev
我使用GPU时遇到了同样的问题:在Ubuntu 16.04.2 LTS上,使用Nvidia GTX 970和nvidia 375.39驱动程序。
我注意到这个问题是在最近升级了nvidia驱动程序之后出现的。因此,我怀疑这是驱动程序中的一个错误。
我在nvidia论坛上找到了答案。这是一个已确认的驱动程序错误,nvidia显然已经在解决这个问题。与此同时,可以通过重新启动compiz来解决。
compiz --replace

为了摆脱这些瑕疵。

Ubuntu的错误跟踪系统中存在一个错误,其中包括一个解决方案脚本,可以在恢复后自动重新启动compiz。


另一个解决方案是降级到先前的驱动程序版本:http://askubuntu.com/a/896544/657603 - Antoine Dusséaux
谢谢你的解决方法。我不确定,但是自从我遇到这个问题之后,我还有另一个问题:我的笔记本电脑在设定的一小时后并不总是正确地进入待机状态。 - Skalár Wag
从睡眠状态恢复后,系统会自动登录,以前会提示输入密码,有没有办法修复这个问题? - Hatem Jaber
2compiz --replace 在工作区使用时不太友好。它会将所有窗口都放置在第一个工作区中 :( - AlikElzin-kilaka
@AlikElzin-kilaka - 这里是我描述的问题,提供了一个稍微不同的解决方案,对于工作区没有造成任何问题(在使用驱动程序375.39的Ubuntu 16.04上)。 - n1k31t4
1你必须使用这个命令保持终端打开。如果你关闭终端,它会重新启动compiz。这个方法只能在下一次暂停之前有效,它并不是一个真正的解决方案,我不能每天运行这个命令几次来保持功能正常。所以我选择了上述的解决方案,即更换驱动程序。 - conualfy
@DexterMorgan - 我试了你的解决方案 kill $(ps -C compiz -o pid=),所有窗口都被放在了第一个工作区。和 compiz --replace 得到了相同的结果。 - AlikElzin-kilaka
我在Debian 9 Stretch上使用Nvidia 375.39驱动程序运行Nvidia GTX 970时也遇到了这个问题。我只需将窗口最小化,问题就会消失。我正在运行Gnome/Cinnamon桌面环境。 - Doctor David Anderson
这比升级/降级驱动程序要方便得多。 - ArcaneDominion

更新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 本答案中描述的解决方案也已经更新,现在建议升级到这个修复版本,而不是降级到出现错误之前的最新版本。不过,操作步骤仍然相同,只需更换软件包名称即可。

问题原因:

一些专有的 Nvidia 图形驱动程序包(特别是 nvidia-375nvidia-378)在 Ubuntu 上存在缺陷,会导致窗口边框出现您在问题截图中显示的白色伪影。每次从暂停状态唤醒后都会可靠地重现这个问题。

直到几天前,Xenial 软件源中的 nvidia-367 包一直正常工作可靠,但现在他们对其进行了更新,并将其转换为一个过渡性包,自动安装有缺陷的 nvidia-375 版本。

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

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

完成这个步骤后,重新启动你的电脑并测试是否还有任何问题。对我来说,它们已经消失了。祝你好运。

1对于普通用户来说,我更倾向于使用这里的快速非驱动程序更改解决方法(链接),而不是降级驱动程序。考虑到修复方案发布(并且预计不会太久),这只是暂时的不便。然而,如果你降级驱动程序,你必须记住将apt恢复到自动接收进一步升级的状态。你还必须积极检查新的正确修复版本是否发布,而不仅仅等待自动获取——容易出问题且不方便。 - Jason C
1@JasonC 不,nvidia-370 很有可能也会变成一个过渡包,就像 nvidia-367 已经是的一样,因此该更新将自动安装由 nvidia/图形驱动团队认为适合的后继版本。370 是目前唯一受支持且不受此错误影响的最新驱动程序,为什么不使用它呢?与之前使用的引入此错误的升级版本 367 相比,它仍然是一个升级。此外,我们没有阻止任何软件包或覆盖任何 apt 配置,正如你所认为的那样。 - Byte Commander
我在950M上也遇到了这个bug,现在我正在尝试这个解决方案看看是否有效。在最近的两次挂起中,它正常工作。

`00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06) 子系统:Toshiba America Info Systems HD Graphics 530 使用的内核驱动程序:i915 内核模块:i915

01:00.0 3D控制器:NVIDIA Corporation GM107M [GeForce GTX 950M] (rev a2) 使用的内核驱动程序:nvidia 内核模块:nvidiafb, nouveau, nvidia_375_drm, nvidia_375 07:00.0 未指定的类别 [ff00]:Realtek Semiconductor Co., Ltd. RTS524A PCI Express Card Reader (rev 01)`
- conualfy
@conualfy 这个输出意味着你使用的是Ubuntu有问题的375驱动程序来驱动你的Nvidia显卡。然而,在评论区只是简单地转贴命令输出是不合适的,因为:1)你没有提供任何背景或解释为什么要发布这个输出;2)在评论中无法保留格式。 - Byte Commander
1@ByteCommander 我将在两个条件下删除我的评论。1)只要您对它的转换成过渡软件包表示100%的自信,我会相信您(我对我的陈述不够自信);或者如果您没有100%的自信,那么请在答案中提到风险,并且2)如果您在答案中提到这不会影响未来的更新,并说明一旦修复发布后应该做什么。 - Jason C
1@JasonC 不需要删除你的评论。由于明显的原因,我无法保证“graphics-drivers” PPA 的维护者将来会对他们的软件包做什么,我只能根据他们过去的行为做出假设。只要支持370版本,就没有必要采取行动,即使他们修复了375和378版本。我非常有把握地猜测,一旦NVIDIA废弃了370版本(就像他们最近废弃了367版本一样),PPA的维护者将把它转变为一个过渡性软件包,意味着更新的版本将不再包含任何代码,而是添加对新驱动程序的依赖。 - Byte Commander
今天真是个美好的一天,这帮助我修复了我的Ubuntu桌面16版。 - Nam G VU
非常感谢。回来后,我无法忍受Windows的那个烦人的边框问题。我一直使用compiz --replace选项一段时间,但刚刚搜索了一下看看是否已经修复,结果果然解决了。再次感谢! - rayryeng
你是从哪里得到这个赏金的?O_o 我从来没有在这个问题上悬赏过... - You'reAGitForNotUsingGit
@AndroidDev 看起来一个名叫"kerrick"的用户在这个问题上放了一个赏金... https://askubuntu.com/posts/896544/timeline - 不过直到现在才注意到它是一个赏金。 - Byte Commander
这个软件包在标准仓库中不可用。为什么不可用,以及何时(如果有的话)会可用? - Matsmath
2@Matsmath 我不知道。只有时间能告诉我们。也许它永远都不会被添加到之前发布的“旧版”Ubuntu版本的软件仓库中。在这种情况发生之前,我认为很难给出准确的答案。 - Byte Commander

這是Nvidia驅動程式中的一個錯誤。

Nvidia已經成功複製了這個問題,並且正在進行修復工作,修復將包含在他們的下一個驅動程式版本中。(修復現已發布,詳情見下文)。

更多信息請參閱Nvidia開發者論壇上的這個帖子。這個錯誤也已被報告到Launchpad平台

特別感謝@Stefan揭示這個信息方面的出色解決能力!


Nvidia终于发布了官方修复!
修复由beta驱动程序381.09提供 来自changelog的相关截图: enter image description here 此驱动程序目前不在任何存储库中
在上述更改之前,您需要手动安装新驱动程序更新:381.09驱动程序现在位于非官方存储库中。您可以从非官方PPA安装修补程序驱动程序,或者您可以手动安装。
更新-修复现已在官方存储库中:
感谢@ubfan1 报告此问题!请参阅下面的部分获取详细信息
1. 从官方仓库安装修补过的[发布]驱动程序(推荐):
Nvidia在2017年5月4日推送了一个更新,其中包含了你所寻找的错误修复。更新后的发布驱动程序版本为375.66。
由于这个375.66版本在官方仓库中,加载修补过的驱动程序非常简单。
如果您目前使用的是有问题的版本375.39,那么只需要简单地执行以下操作即可:
sudo apt-get update
sudo apt-get upgrade

如果您使用的是旧版驱动程序,则应执行以下操作:
sudo apt-get update
然后在“附加驱动”中切换到新的驱动程序版本:

enter image description here


如果您目前使用的是手动安装的驱动程序,则应先卸载它,重新启动,然后按照上述步骤进行操作。
重启后,您应该发现您的Nvidia驱动程序已更新至375.66版本。
2. 如果您的GPU与较新的驱动程序兼容性不需要:*
*请注意,此部分已被第一部分取代*
如果您的显卡足够旧,以至于它受到驱动程序版本340的支持,那么无需从非官方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没有这个错误。)

enter image description here

切换驱动程序版本后,请务必重新启动。
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 Server 设置。希望能够看到新的驱动程序版本:

    enter image description here


4. 手动安装补丁版[测试版]驱动程序(建议):

通常情况下,从*.run文件安装Nvidia驱动程序并不是一个很好的选择。它往往会导致问题出现。因此,最好还是按照上述所述从PPA安装它们。然而,如果你喜欢冒险,并想手动安装它们,以下是我在Ubuntu 16.04和GTX650上成功的过程。

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

enter image description here

确保在切换后重新启动。如果您未能卸载当前的专有驱动程序,新驱动程序将与旧驱动程序冲突,并导致系统出现问题!
  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. 接受许可协议:

    enter image description here

  8. 它会报告分发提供的预安装脚本失败。无论如何,请继续:

    enter image description here

  9. 当被问及是否要使用dkms注册内核模块时,请选择

    enter image description here

  10. 当被问及是否要安装32位兼容库时,请选择

    enter image description here

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

    enter image description here

  12. 当被问及是否要运行nvidia-xconfig时,请选择

    enter image description here

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

  14. 就快完成了!现在只需运行以下命令:

    rm ~/.Xauthority
    rm ~/.config/dconf/unity
    sudo shutdown -r now
    
  15. 计算机重新启动后,打开Nvidia X Server Settings。希望您能看到新的驱动程序版本:

    enter image description here


1注意:第14步是在回答的Unity桌面没有显示出来时使用的,正如在Ask Ubuntu聊天室中讨论过的那样。这可能不是必要的,但如果您的Unity桌面没有出现,请使用该步骤作为解决方案。 - Sergiy Kolodyazhnyy
抱歉,但我必须对这个解决方案提出异议。它导致了一个错误,使我无法登录,并且与安装的Windows软件不兼容。如果您从NVIDIA网站安装.run文件而不是使用Ubuntu中可用的源,这种登录问题很常见。修复此问题的更简单方法是在“软件和更新”菜单中的可选驱动程序之间使用版本340。至少对我来说,它成功地修复了所有问题。 - Giorgio Vitanza
@GiorgioVitanza - 我知道安装 .run 文件并不是推荐的方法。但是,对于拥有10系列等较新显卡的用户来说,使用340驱动程序并不是一个选择。我在自己的电脑上测试了这个解决方案,它运行良好。 - You'reAGitForNotUsingGit
@GiorgioVitanza 试试我的回答-它会安装来自PPA的驱动程序,比运行文件更兼容。 - Kaz Wolfe
@GiorgioVitanza - 现在驱动程序已经在PPA中,我已经更新了我的答案,包括两种方法。 - You'reAGitForNotUsingGit
好的,那我会给这两个答案点赞 @Android Dev。 - Giorgio Vitanza
通常需要多长时间,新的测试版驱动程序才能进入官方PPA? - n1k31t4
@DexterMorgan 司机通常需要经过审核流程并获得批准,才能进入官方软件库。因此,他们往往需要很长时间才能被收录进去。根据以往的经验,这个过程可能需要大约一个月左右的时间,具体情况可能有所不同。 - Kaz Wolfe
@KazWolfe - 这当然引发了一个问题,那就是马车司机们是如何通过的呢... - You'reAGitForNotUsingGit
FYI-安装这些驱动更新对我在16.04上有效。我注意到的一件事是它还更改了我的设置,不再在“暂停”时锁定桌面。只是想提一下,以防这可能会成为任何人的问题。当然,可以将设置更改回默认值。 - n1k31t4
对我来说,新驱动程序并没有完全解决这个问题。仍然存在一些相同类型的瑕疵,但现在它们非常罕见。 - Qumeric
在390.116版本上仍然存在这个问题。 - Dr.X

此问题存在于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

最好将问题标记为重复,而不是一遍又一遍地发布相同的解决方案。 - Zanna
3它的缺点是当从睡眠状态进入桌面时,我的登录界面从未显示出来 :( - Hesam

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)非常友好地上传了一个Unity版本到他自己的PPA(ppa:kaihengfeng/lp1292830),应该可以修复这个问题。为了解决这个问题,只需运行以下命令添加他的PPA:
sudo add-apt-repository ppa:kaihengfeng/lp1292830 
sudo apt update
sudo apt full-upgrade

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

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

  • 切换到英特尔显卡
    如果您正在运行NVIDIA Prime,则可以切换到英特尔显卡,这将解决此问题。但请注意,这将防止系统使用完整的图形性能。
  • 降级驱动程序
    根据错误报告上的一些评论,降级到NVIDIA驱动程序367.57应该完全解决此问题。由于此版本已不再存在于PPA中,因此您需要直接从NVIDIA (64位) (32位) (32位ARM)下载它。

367似乎不再存在,无论是在官方的Ubuntu存储库中还是在graphics-drivers/ppa PPA中,该软件包是用于nvidia-375的过渡软件包,因此安装它将自动获取有缺陷的375版本。如果您知道可以获取旧的367驱动程序的来源,请在您的回答中包含它。 - Byte Commander
@ByteCommander 完成 - Kaz Wolfe
如果你错过了,FYI,修补过的驱动程序现在已经在官方仓库中了。 - You'reAGitForNotUsingGit

这个问题在Nvidia 375.66驱动程序中也得到了修复,该驱动程序位于正常的软件源中,并且应该通过正常的更新进行安装。

不错的侦查!我已经更新了我的答案以反映这个新的进展,并且给你贷上功劳,发现官方仓库中现在有一个修复版本 :) - You'reAGitForNotUsingGit

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.提出的那个)会在唤醒时禁用密码提示屏幕,从而构成安全风险。

这不是一个完整的解决方案,但它可能比使用compiz --replace或重新启动compiz并搞乱你的工作区更好。
当我从暂停状态恢复时,我会这样做:
  • 系统 -> 首选项 -> 外观
  • 将主题更改为不同的主题
  • 再次更改回原始主题
这将重新加载在GPU中似乎已经损坏的纹理。如果有一种自动强制重新加载主题纹理的方法,那可能是一个永久性的解决方案。

1Nvidia已发布了修复过的驱动程序,这个问题不再存在了。 - You'reAGitForNotUsingGit

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

只需在电脑唤醒后杀死Xorg。

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

top

当你找到Xorg的pid时,按下Ctrl + C来停止"top"进程。
进入root并通过以下方式终止该进程:
sudo su
kill [pid]

登录您的账户后。警告:这将关闭您所有的应用程序。Firefox对此没有问题,它只会恢复您的所有标签页,但我不能保证其他应用程序,所以在进行此过程之前请保存它们。

2顺便说一下,要正常关闭程序,而不仅仅是取消任务(Ctrl+C),你可以直接按下 'q' 键。 - anonymous2

我试过将驱动程序更换为更新的错误修复版,但这导致了我使用tensorflow进行深度学习的能力出现问题,所以我又回到了原始有缺陷的软件。
每次从睡眠状态唤醒Ubuntu时都会发生这种情况。我只需打开终端(按下CTRL+ALT+T)然后输入。
killall compiz

显示重置,故障消失了。只需要几秒钟的时间。你甚至可以在你的~/.bashrc中给它起一个别名,比如alias kc='killall compiz',这样当你想执行该命令时,只需输入kc即可。