Try the instructions here. The quick fix worked well. It was night and day. All I had to do was copy and paste a command into the terminal, but the permanent didn't work. I couldn't make a xorg.conf file.
If you are running Xrce, LXDE, MATE or other desktop environments that
are not running a compositor such as Compton and you have a reasonably
new NVIDIA card, you are likely pulling your hair out trying to get
rid of the awful screen tearing you are experiencing. This screen
tearing typically occurs when you are running a proprietary NVIDIA
driver under Linux and have one of the aforementioned (or any
non-composited) desktop environments. Fortunately for all of us there
is a fix, and I'm going to walk you through how to make that nasty
NVIDIA screen tearing go away.
I'm not going to get into the specifics as to why this happens because
frankly, I have no idea and I'm more interested in how to make it go
away.
For me, the tearing is very obvious when moving windows back and forth
or scrolling in Firefox.. to the point that it drives me (and I'm sure
you as well or you wouldn’t be here) absolutely nuts. So why suffer
any longer? Let's get rid of it, shall we?
To test out and see if the fix works properly for you, open up a
terminal and execute the following command (just copy it from here and
paste it in):
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"
Your screen may flicker for a second and you should then see a drastic
improvement. Test out Firefox and moving windows. Did the fix work for
you? If so, we’ll need to make it permanent as this is just a
temporary fix for now but don't worry, I’ll show you how. If it didn’t
work for you, you can try changing the line slightly to this:
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
Note that in the line above, we just changed the
ForceCompositionPipeline
to ForeFullCompositionPipeline
.
Once you've determined that this does indeed fix your issue, we'll
need to make sure it's permanent. If it didn't work or caused an
issue, simply reboot and you'll be back to your normal desktop.
Now that we've determined that our fix works, to resolve screen
tearing once and for all, it's time to make the changes stick. First
we need to make sure you have an xorg.conf present in the /etc/X11
directory. To find out, type the following command into a terminal and
press Enter:
ls /etc/X11
If you see an xorg.conf file listed like below, proceed.
$ ls /etc/X11
app-defaults xinit Xreset Xsession.d
default-display-manager xkb Xreset.d Xsession.options
fonts xorg.conf Xresources xsm
rgb.txt xorg.conf.backup Xsession
If not, skip this next part but keep reading; I've got you covered
further down under What to do if you can't find an
/etc/X11/xorg.conf.
For those with an xorg.conf listed, in the same terminal window, make
a backup of the file by typing the following command and pressing
Enter:
cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup
Now open the file with your favorite text editor (I'm a fan of nano
text editor myself) as root and enter the following command:
sudo nano /etc/X11/xorg.conf
This will open up your editor, you will then want to add a line below
based on which one worked for you under the Screen Section, so it
ends up looking similar to this:
Section "Screen"
Identifier "Screen1"
Device "Device1"
Monitor "Monitor1"
DefaultDepth 24
Option "Stereo" "0"
Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
SubSection "Display"
Depth 24
EndSubSection
EndSection
So, if of the two nvidia-settings lines above we tested, the one with
ForceFullCompositionPipeline worked, use the example above, if
ForceCompositionPipeline worked, simply use that instead in the
example above.
Some of you may already have an Option "metamodes" in your
/etc/X11/xorg.conf
, like in the example below for dual monitor
setup:
Option "metamodes" "VGA-0: 1152x864_60 +0+0, DVI-D-0: 1680x1050_60 +0+864"
If this is the case, simply change the line so that it look like this:
Option "metamodes" "VGA-0: 1152x864_60 +0+0, DVI-D-0: 1680x1050_60 +0+864 { ForceCompositionPipeline = On }"
Reboot and your tearing should be gone!
What do do if you can't find an /etc/X11/xorg.conf
Now, for those of you who, like me, did not have an
/etc/X11/xorg.conf
(most people running Ubuntu, for instance), you
may be panicking thinking that you won't be able to apply this fix.
Not to worry, I had the same issue, and I won't leave you hanging.
On my main machine, I’m running Linux Mint 18, but this should work
with any distribution, I suspect. I did not have an xorg.conf, so what
I did was launch the nvidia-settings tool and generated a new one by
going to the X Server Display Configuration section and under file
name enter /etc/X11/xorg.conf (uncheck merge with existing if it's
checked as this is only useful in the instance of where you have one)
and then click Save to X Configuration File.
Save to X Configuration File
This should generate one for you which you can then modify using the
steps above.
Best Answer
Update 08/09/2019:
It seems that gord0 (OP) is right in his comment. You don't need to go through all of the steps that I had previously described (I'm not deleting them, just in case that someone find's them helpful) to get rid of tearing.
What you have to do to is:
Open NVIDIA X Server Settings.
Go to X Server Display Configuration.
Select the screen that you want.
Click the Advanced button.
Enable Force Composition Pipeline or Force Full Composition Pipeline (try both and enable the one that gives you the best results).
Click the Apply button.
Alternatively, you can enable Force Composition Pipeline or Force Full Composition Pipeline by running the following commands in your terminal:
For Force Composition Pipeline:
For Force Full Composition Pipeline:
These commands use
xrandr
andsed
with some regular expressions to get the current monitor setup in the appropriate format and use it as input to thenvidia=settings --assign
command, which enables the desired setting.You should now have no screen tearing.
In case the changes are not persistent and get discarded after reboot, you can do the following:
Run the appropriate, for your case, command from the commands above and make sure that it works correctly, that is you have no screen tearing in your monitors.
Add one of the following commands (depending on what worked best for you) to your startup applications:
For Force Composition Pipeline:
For Force Full Composition Pipeline:
The
sleep 10
command just adds a 10-seconds delay to ensure that the desktop has fully loaded before running thenvidia=settings --assign
command. You may need to add a larger delay if your desktop takes more time to fully load.Alternatively, you can save the configuration by clicking Save to X Configuration File button.
Old answer. Try these if the above method doesn't work for you.
What is suggested in the answer you posted is correct for Ubuntu 16.04.
For Ubuntu 18.04 and later versions, you have to change
options nvidia_387_drm modeset=1
tooptions nvidia-drm modeset=1
(the Nvidia driver version is no longer needed).So what you have to do for Ubuntu 18.04 and later versions is:
Create a file in your
/etc/modprobe.d
directory calledzz-nvidia-modeset.conf
.Add the following lines to it:
From the terminal run:
Reboot.
To enable the Nvidia adapter, after rebooting, you have to run
then log out and log back in.
Edit: If you are using Gnome, you will have to use another display manager, such as
lightdm
, sincegdm
does not allow external monitors to work withnomodeset=1
.To install
lightdm
run:After installing
lightdm
runand select it as your display manager in the terminal window that appears.