Screen tearing in Linux could be a major issue with non-compositing window managers.
Even many compositing window manager could show tearing while dragging windows.
Seems like lots of technical jargon, so to simplify the matter let's discus about basics.
You may often notice that a part of the video/graphics/window is torn apart from the main section. It's is glitch related with video or graphics rendering, when the input video is not in sync with the refresh rate of the display. That's called Screen tearing and on LCD displays, horizontal screen tearing is much prominent.
Screen tearing happens mostly when you're playing a video and dragging/moving or maximizing/minimizing a window.
Basically stacking window managers like kWin, Mutter, XFWM, Compiz with the capability of-screen buffering. They've functionalities like window shadow, 3D animation, transparent windows, anti-aliasing, blur background and many more.
They're much more visually appealing than simple window managers, read more here.
Fix Linux screen tearing with window managers
It's rather easy if you're using KWin, Mutter, Muffin or any other compositing window manager, there should be an option to to enable vsync anywhere in the settings.
If you're using KDE or minimal KWin, use the instruction below.
- Open up the System Settings application.
- Go to the Display and Monitor option under the Hardware section.
- Then on the Tearing prevention option, set it to Full screen repaints. img
XFWM also has an option to enable vsync to prevent tearing, that never works !
You can also use a compositing manager like compton or xcompmgr with Openbox or XFWM window manager. But there's another little tweak to prevent linux screen tearing efficiently on Intel graphics.
Prevent screen tearing on Linux with X11 configuration
It's possible to minimize screen tearing with a little tweak to the X11 configuration. However this option may not work always, specially with Intel Atom or Celeron CPU's inbuilt graphics.
First create a new X11 configuration directory,
mkdir -p /etc/X11/xorg.conf.d/, if already not exists.
Create a configuration file
20-intel.conf there with your favorite text editor as root.
sudo nano /etc/X11/xorg.conf.d/20-intel.conf
Put the configuration below there, and save the file, and exit the test editor.
Section "Device" Identifier "Intel Graphics" Driver "intel" Option "TearFree" "true" EndSection
Finally restart your X11 session by logging out and logging in again, or simply reboot the PC.
However you may need to add other few extra option like
Option "AccelMethod" "uxa" or
Option "TripleBuffer" "true" in the 20-intel.conf file.
Checked with 2nd generation Intel HD3000 graphics and 5 generation HD5500 graphics, both worked without those options.
Conclusion and thoughts
So, that's all about fixing screen tearing in linux with Intel graphics, hope it helped you.
Enabling vsync decreases the graphics benchmark performance, so next I'll experiment with the TripleBuffer and completely disable vsync and compare the difference.
If you've any question or suggestion, just leave a comment. Also don't forget to share if you've found this tutorial worthy to share.