This is all due to the fact that the X server is out-dated, ill-suitable for today’s graphics hardware and basically all the direct video card communication is done as an extension (“patch”) over the ancient bloated core. The X server provides no builtin means of synchronization between user rendering the window and the screen displaying a window, so the content changes in the middle of rendering. This is one of the well-known issues of the X server (it has many, the entire model of what the server does and is outdated – event handling in subwindows, metadata about windows, graphical primitives for direct drawing…). Widget toolkits mostly want to gloss over all this, but tearing is still a problem because there is no mechanism to handle that. Additional problems arise when you have multiple cards that require different drivers, and on top of all this, opengl library has a hard-wired dependency on xlib, so you can’t really use it independently without going through X.
Wayland, which is somewhat unenthusiastically trying to replace X, supports a pedantic vsync synchronization in its core, and is advertised to have every frame exactly perfect.
If you quickly google “wayland video tearing” you’ll find more information on everything.
If you’re using an nvidia driver >= 365.20, then try enabling the “Force Full Composition Pipeline” option in
Screen tearing appears mostly because of two reasons – drivers that aren’t there yet, and lack of vsync with certain window managers.
As for drivers, both free and proprietary drivers support free-tearing compositing (nvidia and amd both). Be aware that e.g. enabling tear-free desktop in catalyst (
fglrx) may cause frame drop and lags, so it is usually disabled by default. As for open driver, vsync should be enabled by default. So screen tearing issue may be solved by trying different drivers and configuring them.
As for window managers, it’s known that Openbox, Awesome and others lightweight wms don’t support tear-free. XFCE (xfwm, to be specific) has fixed it in recent releases, 4.11/12 now have Vsync. Major desktop environments also have no problems with tearing, including GNOME, KDE, Unity and Cinnamon.
If you still experience screen tearing, your option is to try another compositing manager like Compton or Kwin. Kwin is the window manager for KDE and I have experience of using kwin in XFCE when it didn’t support vsync and it worked really well.
So the solution here is experimentation, what is broken in one combination of driver/wm can work in another. I believe the situation will improve soon since open-source drivers are becoming more advanced and switching to wayland may get rid of old issues with Xorg.