How to Fix Screen Flickering and Tearing in Ubuntu

Screen flickering, micro-stutters, and horizontal visual tearing during window movement or video playback in Ubuntu Linux occur when the display server (Xorg or Wayland) updates the video frame buffer out of synchronisation with the monitor’s physical refresh cycle (vertical blanking interval). This graphical anomaly frequently affects systems equipped with Intel integrated graphics, NVIDIA proprietary drivers, or hybrid dual-GPU laptops. Resolving this issue involves configuring display server protocols, enabling TearFree rendering pipelines in Xorg, and adjusting compositor synchronisation settings.

Understanding Display Tearing and Flickering in Linux

Screen tearing manifests as a split horizontal line across moving images or dragged windows, caused by the graphics processing unit (GPU) writing a new frame into the front display buffer while the monitor is mid-way through scanning the previous frame. Flickering typically results from rapid mode-switching in variable refresh rate displays (FreeSync/G-Sync) or power-saving states in Intel i915 kernel drivers.

The primary origins include:

  • Xorg vs Wayland Architecture: The legacy X11 display server lacks mandatory vertical synchronisation (VSync), relying on driver-specific 2D acceleration modules. Modern Wayland sessions enforce VSync at the compositor level, eliminating tearing by design. For associated graphical startup checks, see our resource on fixing cannot open display error in Ubuntu.
  • Disabled TearFree Option on Intel Graphics: The open-source Intel DDX driver often ships with triple buffering and TearFree acceleration disabled by default.
  • Unsynchronized NVIDIA Modesetting: Proprietary NVIDIA drivers lacking the nvidia-drm.modeset=1 kernel parameter, preventing prime synchronisation on hybrid graphics laptops.
  • Display Refresh Rate Mismatch: Monitors running at unsupported fractional refresh rates or panels defaulting to 30Hz or 59.94Hz.
Display Server GPU Hardware Recommended Solution
Wayland Intel / AMD / Modern NVIDIA Switch from Xorg to Wayland session at login
Xorg (X11) Intel HD/UHD/Iris Graphics Deploy 20-intel.conf with Option "TearFree" "true"
Xorg (X11) NVIDIA GeForce / RTX Enable “Force Full Composition Pipeline” in NVIDIA X Server Settings
Hybrid Optimus Intel + NVIDIA Laptop Enable kernel DRM modesetting (nvidia-drm.modeset=1)

Step 1: Switch Between Wayland and Xorg Display Sessions

Ubuntu defaults to Wayland for most modern GPUs, which natively eliminates screen tearing by synchronising buffer swaps with the monitor refresh cycle. However, some proprietary drivers perform better under Xorg.

  1. Save any open work and log out of your Ubuntu desktop session.
  2. On the login screen, click your username.
  3. Look for the Gear icon in the bottom-right corner of the display.
  4. If you are currently on Ubuntu (Wayland), select Ubuntu on Xorg. Conversely, if you are experiencing tearing on Xorg, select Ubuntu to engage Wayland.
  5. Enter your password and log in. Test video playback to observe whether tearing ceases.

Step 2: Enable TearFree on Intel Integrated Graphics (Xorg)

If your system utilizes an Intel processor with integrated graphics under an Xorg session, creating an X11 configuration snippet activates tear-free buffer management.

  1. Open your terminal by pressing Ctrl + Alt + T.
  2. Create the X11 configuration directory if it does not already exist:
sudo mkdir -p /etc/X11/xorg.conf.d/
  1. Create and edit the Intel graphics configuration file:
sudo nano /etc/X11/xorg.conf.d/20-intel.conf
  1. Paste the following directive into the file:
Section "Device"
   Identifier  "Intel Graphics"
   Driver      "intel"
   Option      "TearFree"    "true"
   Option      "AccelMethod" "sna"
EndSection
  1. Press Ctrl + O and Enter to save, then press Ctrl + X to exit.
  2. Reboot your system to apply the TearFree rendering pipeline.

Step 3: Enable Full Composition Pipeline for NVIDIA GPUs

On systems running the official NVIDIA proprietary driver under Xorg, visual tearing is resolved by enabling the hardware composition pipeline.

  1. Launch the terminal and open the NVIDIA control panel with administrative rights:
sudo nvidia-settings
  1. In the left-hand column, click X Server Display Configuration.
  2. Click the Advanced button located at the bottom of the window.
  3. Tick the checkboxes for Force Composition Pipeline and Force Full Composition Pipeline.
  4. Click Apply, then click Save to X Configuration File to make the change permanent across reboots.

Step 4: Enable NVIDIA DRM Kernel Modesetting

For modern laptops featuring hybrid graphics (NVIDIA Optimus), tearing frequently occurs because PRIME display synchronisation is inactive at the kernel level.

  1. In the terminal, open the default GRUB bootloader configuration file:
sudo nano /etc/default/grub
  1. Locate the line starting with GRUB_CMDLINE_LINUX_DEFAULT:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
  1. Append nvidia-drm.modeset=1 inside the quotation marks:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia-drm.modeset=1"
  1. Save and exit the file, then update GRUB:
sudo update-grub

Reboot your computer. This enables direct buffer synchronisation between the discrete NVIDIA GPU and the integrated display controller.

Step 5: Verify Monitor Refresh Rate in GNOME Settings

Operating a monitor at an incorrect frequency can induce persistent micro-stutters and screen flickers.

  1. Open Settings from the application menu.
  2. Click Displays in the sidebar.
  3. If you have multiple monitors, click the affected screen.
  4. Check the Refresh Rate dropdown menu. Ensure it matches your monitor’s native operational frequency (e.g., 60 Hz, 120 Hz, or 144 Hz) rather than an interlaced or reduced value.
  5. If your display supports Variable Refresh Rate (VRR), toggle it Off temporarily to test if erratic refresh switching is the source of the flicker.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.