If you are running XFCE, 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 (although if someone DOES know why, please let us know in the comments because I'm always eager to learn).
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 hit enter:
ls /etc/X11
If you see an xorg.conf file listed like below, proceed.
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 back-up of the file by typing the following command and hitting 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 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 Section "Screen"
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 EndSubSectionEndSection
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!
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.
This should generate one for you which you can then modify using the steps above.
If this doesn't work or you have other tips that may help users, please leave them in the comments below. There are also plenty of other fixes that can be used such as switching to compton for window management, etc but I personally have found this one to be the most efficient and consistent.
Best of luck, I hope this helps!