Nvidia驱动程序 - 无法检查“强制全屏位映射”选项。


你有屏幕撕裂的问题吗?如果没有,忽略那个建议。如果有的话,你将需要以另一种方式启用它(CCSM是一个可能的选择),因为混合图形是完全不同的一个问题,并且如Nvidia X Server设置中明确说明的那样,PRIME显示无法通过nvidia设置进行控制(...) - user692175
是的,我正在经历屏幕撕裂问题。有没有关于如何通过Prime Displays解决这个问题的指南?谢谢。 - Filipe Dias
我认为可以通过安装CCSM并启用“强制完全重绘”或类似的功能来完成。 - user692175
我尝试过了,但它并没有解决问题。 - Filipe Dias
请看下面的答案。强制使用组合管线并不是处理最新的Nvidia硬件/驱动中的撕裂问题的方法。 - Vanessa Deagan
5个回答

上面的解决方案在Ubuntu 20.04上不起作用,但问题似乎仍然存在。不过,可行的解决方案非常简单:
sudo nano /lib/modprobe.d/nvidia-kms.conf
sudo update-initramfs -u
reboot

nvidia-kms.conf 的原始内容如下:

# This file was generated by nvidia-prime
# Set value to 1 to enable modesetting
options nvidia-drm modeset=0

正如所说,modeset=0必须更改为modeset=1。
我想知道为什么这一开始就没有启用。

1尝试了其他一些解决方案后,你的方法成功解决了屏幕撕裂的问题。虽然在我的系统中没有/lib/modprobe.d/nvidia-kms.conf文件,但我将options nvidia-drm modeset=1这行代码放入了/lib/modprobe.d/nvidia-graphics-drivers.conf文件中。运行了update-initramfs并重新启动后,同步设置变为了“开启”,尽管我仍无法调整显示设置。我正在使用nvidia-driver-440。 - Rodrigo Oliveira
1我发现在Ubuntu 20.04安装中,每次更新NVIDIA驱动程序时,/lib/modprobe.d/nvidia-graphics-drivers.conf(这是存在的文件)都会被更改。创建文件/lib/modprobe.d/nvidia-kms.conf,并添加一行"options nvidia-drm modeset=1",然后(你必须这样做)运行"sudo update-initramfs -u"并重新启动解决了这个问题。非常感谢这个解决方案,没有它,在使用NVIDIA驱动程序的Ubuntu 20.04上会出现可怕的屏幕撕裂。 - Nicholas Stommel

我理解你的困扰。我总是在尝试解决同时具有Nvidia独立显卡(dGPU)和集成显卡(iGPU)的笔记本电脑屏幕撕裂问题时遇到麻烦。
我要胡乱猜测一下,你的系统可能是PRIME系统,在这种情况下,合成管道选项将不可用(即使手动将它们添加到xorg.conf文件中也无效,可能只会让屏幕变暗)。
我想你所需要的(再次猜测)是PRIME同步 - 这是Nvidia同步屏幕的新方法。
请尝试以下操作:
  • /etc/modprobe.d目录中创建一个名为zz-nvidia-tearing.conf的文件。
  • 在该文件中添加以下行:options nvidia_387_drm modeset=1(将"387"更改为您的驱动版本)。
  • 从终端运行:sudo update-initramfs -u
  • 重新启动。
  • 检查PRIME同步是否已启用:xrandr --prop | less
你应该会看到类似以下内容:
Screen 0: minimum 8 x 8, current 3840 x 1080, maximum 16384 x 16384
eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 174mm
        EDID: 
                00ffffffffffff0030e4210500000000
                001a0104951f1178ea9d35945c558f29
                1e505400000001010101010101010101
                0101010101012e3680a070381f403020
                350035ae1000001a542b80a070381f40
                3020350035ae1000001a000000fe004c
                4720446973706c61790a2020000000fe
                004c503134305746362d535042360075
        PRIME Synchronization: 1 

重要的是最后一行。如果由于某种原因,您的PRIME同步仍未启用(即设置为“1”),请尝试编辑您的/etc/modprobe.d/nvidia-graphics-drivers.conf文件的最后一行 - 将其更改为:
options nvidia_387_drm modeset=1

(再次强调,将“387”更改为您安装的Nvidia驱动程序版本。)
(不要忘记运行:)
sudo update-initramfs -u

在对/etc/modprobe.d中的任何文件进行更改后。
如果这仍然不起作用(只要您使用的是Nvidia驱动程序370或更高版本,它应该可以正常工作),那么您可以尝试将以下内容添加到/etc/default/grub中的GRUB_CMDLINE_LINUX_DEFAULT
nvidia-drm.modeset=1

我不知道你的GRUB_CMDLINE_LINUX_DEFAULT是什么样子的,但在你添加了上面的那行之后,它可能会变成这个样子:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia-drm.modeset=1"

我发现令人惊讶的是,Nvidia在支持PRIME Sync的硬件上默认不启用它。给出的理由是因为它与SLI不兼容 - 但实际上有多少Linux用户真正使用SLI呢?我还没有见过任何人使用。
如果你还有更多问题,请随时提问,我会尽力回答。
祝好运!

3这种主同步技术(将options nvidia_387_drm modeset=1放入modprobe.d中的配置文件)完全破坏了我的系统。重新启动后,Kubuntu进入了一个黑屏。经过3个小时的解决,解决方案是删除一个损坏的xorg.conf文件:mv /etc/X11/xorg.conf /etc/X11/xorg.conf.bak - robertspierre
我也是..你的步骤毁了我的笔记本电脑 - Jastria Rahmat
在Ubuntu 20.04 / Nvidia 440中,编辑modeset设置的位置已经改变,现在位于/lib/modprobe.d。请查看下面的回答,如果对您有用,请给它投票! - w-sky
这些指示导致我的笔记本电脑屏幕无法被检测,只有我的外部显示器能正常工作。我使用了raffaem的评论来修复我的电脑。 - SomeGuy

在最新的(撰写本文时)Nvidia二进制驱动程序430.26中,有这样一个选项(当然,我在这里假设驱动程序已经正确安装并运行):

enter image description here

但是如果由于某种原因它在您的系统中没有显示出来,还有另一种方法可以通过xorg.conf文件启用它。
这是我系统中的样子:
编辑/etc/X11/xorg.conf文件,并将以下代码添加到屏幕部分(请注意,您的选项可能会更多):
Section "Screen"
    Option "metamodes" "3440x1440_75 +0+0 {ForceCompositionPipeline=On, ForceFullCompositionPipeline=On};"
EndSection

保存并重新启动系统。
另一种可能的方法是使用 nvidia-settings
$ nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline=On, ForceFullCompositionPipeline=On }"

作为一个Ubuntu用户,我遇到了这个可怕的撕裂问题和安装程序冻结问题,这两个问题都与使用基于NVIDIA gpu的硬件有关。我希望在这个回答中解决这两个问题,所以请看以下内容:
我正在使用的系统是Ubuntu 18.04 LTS amd64,运行在一台搭载Core i7、内置HD Graphics GPU和NVIDIA GEFORCE GTX 960M GPU的计算机上。
首先,Ubuntu安装程序在启动时会冻结:这是由于NVIDIA芯片的存在造成的,为了解决这个问题,请在启动安装程序时按下 GRUB 出现时按下 “E” 键。移到 LINUX 行的末尾并添加“nouveau.modeset=0”。然后按下“F10”继续引导过程。正常安装系统,在完成后从计算机中移除安装程序介质,重新启动系统并登录您的账户。
继续以下内容:
第二个问题是“可怕的显示撕裂问题”或“不同步的PRIME显示”。这是由于PRIME显示配置不正确(系统需要在多GPU系统配置中正确卸载图形),因此首先需要在系统中安装适当的GPU驱动程序。在我的情况下,390版本的驱动对应于GTX 960M GPU,因此例如,需要执行以下命令:sudo apt-get install nvidia-driver-390。如果合适的驱动版本可用,我更愿意从主要软件仓库安装而不是从PPA安装。
驱动程序库安装完成后,打开终端并以超级用户身份打开gedit,使用sudo gedit命令。然后,打开系统文件/etc/default/grub,找到之前设置的nouveau.modeset=0代码所在的行,并将其完全删除。用GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia-drm.modeset=1"替代那一行,并保存。关闭gedit,在终端中进行GRUB更新,执行sudo update-grub命令。
在完成这些步骤之后,关闭所有内容并重新启动系统。现在应该一切正常运作!
注意事项:
1. 我的引导步骤是其他用户建议的总结,我已经至少三次执行这些步骤,结果非常好。我决定写自己的指南,因为我使用的那些指南总是有一些问题未涵盖,我不得不经历一些困扰才能让系统正常工作。
2. 要确定你的对应的NVIDIA驱动版本,你可以在他们的官方驱动下载页面上选择适合的型号和64位Linux操作系统。结果将显示正确的版本号。
3. 如果你想了解什么是PRIME显示以及为什么它如此繁琐,你可以查看这个链接:https://devtalk.nvidia.com/default/topic/957814/linux/prime-and-prime-synchronization/ 祝你好运!

不,你只需要将X配置保存到某个位置...然后下次重启时,合成设置才会继续生效...所以成功点击“保存到X配置文件”...就这样。