Nvidia drivers - Unable to check "Force full composition pipeline"
I read that in order to avoid screen tearing I should enable the option "Force full composition pipeline" on nvidia settings[¹]. However that option doesn't seem to be available in my system.
I thought nvidia-settings might have been held back but according to the blog post below, that option should be available in this version:
Am I missing something?
Thanks
[¹]https://www.gamingonlinux.com/articles/how-to-an-update-on-fixing-screen-tearing-on-linux-with-an-nvidia-gpu.8892
The solutions above do not work with Ubuntu 20.04 but the problem seems to persist. But the working solution is quite simple:
sudo nano /lib/modprobe.d/nvidia-kms.conf
sudo update-initramfs -u
reboot
The original content of nvidia-kms.conf is:
# This file was generated by nvidia-prime
# Set value to 1 to enable modesetting
options nvidia-drm modeset=0
As it says, modeset=0 has to be changed to modeset=1.
I wonder why this is not enabled from the beginning.
I feel your pain. I always have problems trying to figure out how to get rid of tearing on my laptops that have both an Nvidia dGPU (Dedicated GPU) and the iGPU (Integrated GPU).
I'm going to take a stab in the dark and guess that you're system is a PRIME system, in which case the composition pipeline options will not be available (even adding them manually to your xorg.conf file won't work - it'll probably just make your screen go dark).
I think what you're looking for (again, just guessing) is PRIME Synchronization - this is Nvidia's new way of syncing screens.
Try this:
- Create a file in your
/etc/modprobe.d
directory calledzz-nvidia-tearing.conf
. - Add the following line to it:
options nvidia_387_drm modeset=1
(change "387" to your driver version). - From the terminal: sudo update-initramfs -u
- Reboot.
- Check is PRIME sync is enabled:
xrandr --prop | less
You should see something like:
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
The important line is the last line. If, for some reason, your PRIME sync still isn't enabled (i.e. set to "1"), then try editing the last line of your /etc/modprobe.d/nvidia-graphics-drivers.conf
- change it to:
options nvidia_387_drm modeset=1
(again, obviously changing "387" to the version of your installed Nvidia driver).
Don't forget to run:
sudo update-initramfs -u
after you make any changes to any file in /etc/modprobe.d
.
If that still doesn't work (which it should, so long as you're using Nvidia driver 370 or higher), then you can try adding the following to your GRUB_CMDLINE_LINUX_DEFAULT
in /etc/default/grub
:
nvidia-drm.modeset=1
I don't know what your GRUB_CMDLINE_LINUX_DEFAULT looks like, but after you add the line above, it could look something like this:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia-drm.modeset=1"
I find it astonishing that Nvidia do not enable PRIME Sync by default on hardware the supports it. The reason given is because it doesn't play nicely with SLI - but how many Linux users actually use SLI? I have yet to see any.
If you have any more questions, ask away, I'll try to answer them.
Good luck!
In the latest (as of writing this) Nvidia Binary Drivers 430.26 there is such option (of course I am assuming here that the driver is properly installed and works) :
But if it does not show up for You for some reason there is another way to enable it via xorg.conf
file.
Here is how it looks like in my system:
Edit /etc/X11/xorg.conf
file and the following code to the Screen section (note that there will be more options in Yours) :
Section "Screen"
Option "metamodes" "3440x1440_75 +0+0 {ForceCompositionPipeline=On, ForceFullCompositionPipeline=On};"
EndSection
Save and then reboot system.
Another possible way is to use nvidia-settings
:
$ nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline=On, ForceFullCompositionPipeline=On }"
As an Ubuntu user I've come across this horrible tearing issue and also the installer-freeze issue, both of them related to using an NVIDIA gpu based hardware. I'd like to resolve both problems in this single answer, so here it goes:
The system I'm working with is an Ubuntu 18.04 LTS amd64 running on a Core i7 with a built-in HD Graphics gpu and an NVIDIA GEFORCE GTX 960M gpu.
1st, Ubuntu installer freezes at startup: this is caused by the presence of the NVIDIA chip, so, in order to correct it, boot the installer and press E
when the GRUB shows up. Go to the end of the LINUX line and add nouveau.modeset=0
. Then continue the booting process by pressing F10
. Install the system normally and, when finished, remove the installer media from the computer, reboot the system and log into your account.
Continue below:
2nd, the horrible display tearing problem or the unsynchronized PRIME display: this is caused by an improper configuration of the PRIME display (the system needs to properly offload the graphics in a multiple gpu system configuration), so, firstly, install the proper GPU drivers in the system. In my case, the 390 version driver corresponds to the GTX 960M gpu, so, for example, it would be needed to perform a sudo apt-get install nvidia-driver-390
. If the proper driver version is available, I would prefer doing it from the main repositories rather than from a PPA.
After the driver libraries have been installed, go to a terminal and open gedit
as a super user with sudo gedit
. Then, open the system file /etc/default/grub
, locate the line that shows the nouveau.modeset=0
code we set earlier and delete it entirely. Replace that line with GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia-drm.modeset=1"
and save. Close gedit and, in the terminal, perform a GRUB update, by doing a sudo update-grub
.
After this has been done, close everything and reboot the system. Everything should be working fine now!
Notes:
My guided steps are a summary of other users' advices and I've performed these steps at least thrice with the same great result. I've decided to write my own guide because the ones I used always had some uncovered issues that I had to go through to get the system working properly.
In order to identify your correspondent NVIDIA driver version you can check their official drivers download page, selecting the proper model and linux 64-bit as the operating system. The results will show the proper version number.
If you want to learn about what a PRIME display is and why it is so cumbersome, you can check this link: https://devtalk.nvidia.com/default/topic/957814/linux/prime-and-prime-synchronization/
Good luck!