Nvidia GTX960m 屏幕撕裂

Min*_*oki 6 nvidia tearing nvidia-optimus nvidia-prime 17.04

我最近购买了 MSI GP72 7QF ( i5-7300HQ + Nvidia GTX960m ),在安装 Ubuntu 17.04 后我遇到了烦人的屏幕撕裂问题。我安装了最新的 Nvidia 驱动程序 ( 384.59 ),但它仍然在撕裂。我猜问题是 PRIME 同步。

我该如何解决?

Tim*_*son 14

我有两台运行 17.04 的混合笔记本电脑,一台旧的 ThinkPad 和一台 P50(2016)。这些是 Nvidia Optimus 机器,均具有“企业级”Quadro 图形和适当的硬件多路复用,而便宜的笔记本电脑则没有。这使得 Linux 中的 Optimus 问题有点没有实际意义,但是,无论如何我都有 Optimus 工作。

我花了相当多的时间来解决这个问题,我提出了答案。如果你有我的机器,无论如何。

我的笔记本电脑有一个 bios 设置来禁用英特尔图形并仅使用 nvidia 卡,它被描述为离散模式。这需要移动工作站 ThinkPad 具有的硬件多路复用。在这种模式下,很容易摆脱撕裂。这是解决方案(1)。但这可能不是一种选择。

如果 Nvidia 控制面板让您选择 nvidia 或 intel,则您处于混合模式。

如果您想使用混合图形,或者您别无选择,很容易避免外部显示器撕裂,因为它们是由 nvidia 硬件驱动的。撕裂是仅在笔记本电脑面板上还是在外接显示器上?外接显示器撕裂是由力管道组成,以我的两台机器的经验。不需要完整的流水线。这是解决方案 (2a),但它不会停止撕裂笔记本电脑面板。您可以从 nvidia 控制面板或通过命令行(适用于启动脚本)打开它。请参阅下面的屏幕截图。有一个技巧:你需要选择一个外部显示器,而不是内部面板,然后点击Advanced... 下面的命令行脚本。

但是要停止在 nvidia prime 模式下撕裂英特尔面板,您需要 Prime 同步。这是最难开始工作的事情。我在 17.04 上使用 gnome 桌面,但忘记使用 gdm3。继续使用 lightdm 作为显示管理器。gdm3 目前有一个错误,它似乎强制执行 Wayland 会话,但这不起作用。借助 lightdm,您可以使用最新的 nvidia 驱动程序(我假设您已经发现这些驱动程序在 PPA 中)启用主同步以获得无撕裂体验。您需要创建一个名为在现有 nvidia 之后加载的新 modprobe 文件,然后为此重建 initramfs(清除并重新安装 nvidia 驱动程序会产生副作用,但需要更长的时间)。如果这是你的情况,我会用完整的说明更新这个答案。它现在运行良好,使用最新的驱动程序(大约一个星期)。在那之前,它起作用了,但我们遇到了内核恐慌。现在看起来很稳定。在 nvidia 上有一个关于 linux 驱动程序的论坛,它有一个非常活跃的线程。所以让主同步工作是解决方案 (2b)

我不确定我的笔记本电脑上是否有很多 Prime 同步点;如果使用多显示器(几乎所有时间),我也可以通过使用离散模式获得我想要的东西,当我想要长电池寿命时,我会在混合模式下切换到主要选择英特尔。这意味着要访问 bios 设置,但无论如何更改主模式都需要重新启动。换句话说,我从来没有真正需要它,但它确实有效(现在)。

如果您在 intel 模式下运行混合图形,则很容易修复笔记本电脑面板上的撕裂,因为 nvidia 卡从图片中消失了(字面意思)。因此主同步是无关紧要的。当然,在这种情况下,没有外部显示器。在我的笔记本电脑上,我必须使用一个设置来启用无撕裂英特尔;这是一个 xorg 设置。我有一个脚本 prime-select_tim,它在 intel 模式下运行时恢复该设置,并在 nvidia 模式下运行时将其删除。那是因为如果此配置在/usr/share/X11/xorg.conf.d 你说你在尝试使用英特尔配置文件时遇到了问题。我发现 X 在混合 Nvidia 模式下运行时对 /usr/share/X11 的内容非常挑剔。如果您不添加任何内容,它就可以工作(这就是为什么我有一个脚本,如果我更改为混合 nvidia 模式,它会隐藏我的 20-intel.conf 文件)。

另请注意,您应该确保安装了 xserver-xorg-video-intel 包。包描述暗示您不需要它(“如果您的硬件足够新(大约 2007 年及更新),则不鼓励。”尽管如此,它仍然是必不可少的。

这是解决方案(3)。注意我不知道在混合 nvidia 模式下将此文件保留在 xorg.conf.d 中是否仍然会导致问题,我已经有一段时间没有测试了。

这是我的 20-intel.conf,用于在混合英特尔模式下修复笔记本电脑面板上的撕裂。在混合 nvidia 模式下,它不会修复笔记本电脑面板上的撕裂(实际上,即使只是将这个文件留在那里也可能阻止 X 启动)。只有 Prime 同步可以帮助您。

Section "Device"
     Identifier  "Intel Graphics"
        Driver      "intel"
        Option      "TearFree"    "true"
 EndSection
Run Code Online (Sandbox Code Playgroud)

~

我在使用 xfce 时解决了所有这些问题,所以我知道它也可以在那里工作。但是 17.04 中的 gnome 非常好,我改变了。我没有在 Unity 中测试过这个。

== 混合英伟达模式 ==

所以详细说明在混合 nvidia 模式下没有撕裂:在这种模式下,nvidia 卡呈现一切。它可以直接写入外部屏幕,因此外部屏幕上的任何撕裂都只是 nvidia 问题。ForceCompositionPipeline 是我需要的修复。

您可以从命令行激活它。这就是我所做的。

#!/bin/bash
nvidia-settings --assign CurrentMetaMode="$(nvidia-settings -q CurrentMetaMode -t|tr '\n' ' '|sed -e 's/.*:: \(.*\)/\1\n/g' -e 's/}/, ForceCompositionPipeline = On}/g')" > /dev/null
Run Code Online (Sandbox Code Playgroud)

我不是那个片段的作者,对我来说太神奇了。您也可以从 Nvidia 控制面板 Advanced 执行此操作,但请确保单击外部显示器的表示。PRIME 面板,即笔记本电脑面板,不显示此设置

在此处输入图片说明

如果这不能解决撕裂问题,我无能为力,但这意味着您的问题是 nvidia 驱动程序问题,与主要或主要同步无关。我正在使用来自 PPA 的驱动程序 384.59。见http://ubuntuhandbook.org/index.php/2017/02/how-to-install-nvidia-375-39-378-13-via-ppa-in-ubuntu/

为了在笔记本电脑面板上绘图,nvidia 卡写入英特尔卡使用的内存,然后将其显示在屏幕上。这就是“总理”。确定你有这个工作,否则你的笔记本电脑面板上不会有图像。

但 Prime Sync 是下一个级别。同步两张卡以避免撕裂需要 Prime Sync,这是一个非常新的东西,只有在过去几周我们才看到稳定的解决方案。nvidia 驱动程序需要在内核模式设置下运行,默认情况下它不这样做。

sudo vi /etc/modprobe.d/zz-nvidia-modeset.conf
Run Code Online (Sandbox Code Playgroud)

并使用此内容:

 options nvidia_384_drm modeset=1
Run Code Online (Sandbox Code Playgroud)

这显然假设您有一个 384 驱动程序。

然后 sudo update-initramfs -u

否则新的文本文件将没有任何效果。我不在乎任何人对 grub2 中的设置说什么,使用这个文本文件是唯一对我有用的方法,它是 nvidia Prime Sync 线程上公认的解决方案。

不要使用 gdm3,如果您当前使用 gdm3,请使用 lightdm。希望 gdm3 错误将在 Ubuntu 17.10 之前修复,它可能是默认的显示管理器 :) 如果您不确定,那么:

dpkg-reconfigure lightdm 
Run Code Online (Sandbox Code Playgroud)

然后重新启动。

tim@raffles:~$ xrandr --properties | grep PRIME
    PRIME Synchronization: 1 
Run Code Online (Sandbox Code Playgroud)