Screen Tearing in Linux with Nvidia Graphics

As discussed in the comment, I post the answer.
To solve the tearing problem, add this following command to be run at startup:
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
To do so, you can search for 'Startup Applications Preferences' and add the command to startup commands by pressing the Add button, pasting the command in the Command field (you can add the name you want in the Name section) then press Add.

Or you can add that command to your Crontab by:

  • Run crontab -e on the terminal.
  • If it is the first time you open Crontab, you'll be asked to choose an editor, choose nano for example (which is number 1) then press Enter.
  • Add the following line to the end of the file: @reboot nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
  • Save using Ctrl + O and exit.

In order to make the changes effective, you should reboot your computer (for both methods).


If the tearing problem still persists even after applying the steps above, please do the following:

  • Install compton using sudo apt install compton compton-conf
  • Add compton to be run at startup following one of the methods already described.

If it the screen is still tearing:

  • Add compton.conf to .config folder by running: touch ~/.config/compton.conf
  • Add compton --config ~/.config/compton.conf

And restart your computer.

CREDITS: Fix Screen Tearing in Linux with Nvidia Graphics


The trick already mentioned in the other answer is to check the "Force Full Composition Pipeline" option in the NVIDIA X Server Settings. This option has to be checked for each monitor. You can do this using the nvidia-settings command to start the configuration GUI. If that option is not visible, you'll have to click on the "Advanced..." button first. After checking the checkbox, click on "Apply" to save the settings.

nvidia-settings example

However, in order to run this automatically on startup you'll need a command line to set these options in crontab or your session startup. To get this command line you can simply query the current settings after setting them in the GUI using nvidia-settings --query CurrentMetaMode. For my dual monitor setup, I got this output (formatted for better readability):

Attribute 'CurrentMetaMode' (mypcname:0.0): 
id=50, switchable=no, source=RandR :: 
DPY-2: nvidia-auto-select @1920x1080 +0+0
{
    ViewPortIn=1920x1080, 
    ViewPortOut=1920x1080+0+0,
    ForceCompositionPipeline=On, 
    ForceFullCompositionPipeline=On
}, 
DPY-6: nvidia-auto-select @1920x1080 +1920+0 
{
    ViewPortIn=1920x1080, 
    ViewPortOut=1920x1080+0+0, 
    ForceCompositionPipeline=On, 
    ForceFullCompositionPipeline=On
}

Everything from the third line can then be directly copy-pasted to the

nvidia-settings --assign CurrentMetaMode=...

command. So with the above example this would work:

nvidia-settings --assign CurrentMetaMode="
DPY-2: nvidia-auto-select @1920x1080 +0+0
{
    ViewPortIn=1920x1080, 
    ViewPortOut=1920x1080+0+0,
    ForceCompositionPipeline=On, 
    ForceFullCompositionPipeline=On
}, 
DPY-6: nvidia-auto-select @1920x1080 +1920+0 
{
    ViewPortIn=1920x1080, 
    ViewPortOut=1920x1080+0+0, 
    ForceCompositionPipeline=On, 
    ForceFullCompositionPipeline=On
}"

Theoretically, you could write these settings manually. The important thing is the ForceFullCompositionPipeline=On part. But unfortunately, that option can't be set without specifying the arrangement of the monitors. And determining the desired geometry coordinates is a bit more troublesome to do by hand.