You upgraded Fedora and the screen tears
You just switched to Fedora, installed the proprietary NVIDIA driver, and everything looks sharp until you scroll a long webpage or launch a game. The window splits horizontally. The top half shows the new frame, the bottom half shows the old one. It happens every few seconds. You know the GPU is powerful enough. The problem is synchronization, not performance.
What is actually happening
Screen tearing occurs when the GPU finishes rendering a frame halfway through the monitor's refresh cycle. The display controller reads the top half of the new frame and the bottom half of the previous frame. You see a horizontal split that moves as you scroll. Open-source drivers handle this through kernel modesetting and atomic page flips. The kernel waits for the vertical blank interval before swapping buffers. The proprietary NVIDIA driver historically bypassed the kernel for raw performance. That design choice breaks the sync chain on Linux.
Modern NVIDIA drivers fix this with PRIME sync and adaptive sync support. PRIME sync forces the driver to wait for the vertical blank before presenting a frame. Adaptive sync tells the monitor to change its refresh rate to match the GPU's output. Both features work on Fedora, but they require explicit configuration. The display server matters. X11 and Wayland handle compositing differently. X11 relies on xrandr and Xorg configuration snippets. Wayland relies on the kernel parameter nvidia-drm.modeset=1 and compositor-level flags. Fedora ships with Wayland by default. You need to know which session you are running before applying a fix.
Check your display server first. Wayland and X11 require different fixes.
The fix
Check your display server and output name
You need to know whether you are on X11 or Wayland. You also need the exact output name your monitor uses. The name is usually HDMI-0, DP-1, or eDP-1. Guessing the name breaks the command.
Here is how to identify your session and list connected displays.
# echo $XDG_SESSION_TYPE prints wayland or x11
echo $XDG_SESSION_TYPE
# xrandr lists all outputs and their current modes
# look for the line that says "connected"
xrandr | grep -i connected
The xrandr output shows the active resolution and refresh rate next to the connected string. Note the exact output identifier. It is case-sensitive.
Run journalctl -xe if the command returns nothing. A missing output usually means the display manager failed to initialize the GPU properly. Read the actual error before guessing.
Force a fixed refresh rate
Forcing a fixed rate is the fastest way to stop tearing on X11. It locks the display to a single refresh cycle. The GPU waits for the vertical blank before sending the next frame. Tearing disappears. Frame pacing becomes predictable.
Here is how to lock your primary display to 60Hz.
# --output targets the exact connector name from xrandr
# --rate forces the display to a specific refresh cycle
# this overrides any adaptive or variable refresh settings
xrandr --output HDMI-0 --rate 60
Replace HDMI-0 with your actual output name. The change applies immediately. Open a terminal and scroll through a long text file. The split should be gone.
Reboot before you debug. Half the time the symptom is gone.
Enable adaptive sync
Adaptive sync matches the monitor's refresh rate to the GPU's frame rate. It eliminates tearing without capping performance. It requires a monitor that supports FreeSync or G-Sync compatible mode. It also requires the NVIDIA driver to expose the feature.
Here is how to enable adaptive sync through the NVIDIA settings tool.
# nvidia-settings opens the proprietary configuration GUI
# it writes changes to ~/.nvidia-settings-rc by default
nvidia-settings
Navigate to X Server Display Configuration. Select your display. Check the box for Allow FLIP updates. Check the box for Force Composition Pipeline. Apply the changes. The driver will restart the display server briefly.
You can also enable it from the command line. This approach works better in scripts and headless setups.
# --assign targets the output and sets the mode string
# +ADAPTIVE_SYNC enables the driver's internal sync flag
# this bypasses the GUI and writes directly to the X server
nvidia-settings --assign "GPU-0/GPU-0/HDMI-0.0/AllowFLIP=1"
nvidia-settings --assign "GPU-0/GPU-0/HDMI-0.0/ForceCompositionPipeline=1"
Replace HDMI-0.0 with your output path. The GPU-0 prefix matches your primary NVIDIA card. Run nvidia-smi to verify the GPU index if you have multiple cards.
Trust the package manager. Manual file edits drift, snapshots stay.
Make the change survive a reboot
xrandr and nvidia-settings changes reset when the display server restarts. You need a persistence mechanism. Fedora handles X11 persistence through Xorg configuration snippets in /etc/X11/xorg.conf.d/. Wayland persistence relies on kernel parameters and session defaults.
Here is how to create an Xorg snippet that locks the refresh rate permanently.
# sudo mkdir ensures the directory exists for custom configs
# configs here override defaults without touching /usr/lib
sudo mkdir -p /etc/X11/xorg.conf.d
# cat creates a new file with the exact configuration block
sudo tee /etc/X11/xorg.conf.d/20-nvidia-tearing.conf > /dev/null << 'EOF'
Section "Monitor"
Identifier "HDMI-0"
# Option forces the X server to use 60Hz on boot
# this runs before any desktop environment loads
Option "PreferredMode" "1920x1080_60.00"
Option "ForceCompositionPipeline" "True"
EndSection
EOF
Replace HDMI-0 and the resolution string with your values. The 20- prefix ensures it loads after default configs. The ForceCompositionPipeline option tells the driver to use PRIME sync. Reboot to apply.
For Wayland, you need the kernel parameter nvidia-drm.modeset=1. This enables kernel modesetting for the NVIDIA driver. It is required for proper buffer synchronization on modern compositors.
Here is how to add the kernel parameter to GRUB.
# sudo grubby modifies the default kernel command line
# --args appends the parameter to all installed kernels
# --update-kernel applies it to the currently running kernel
sudo grubby --args="nvidia-drm.modeset=1" --update-kernel=ALL
Run dnf upgrade --refresh before rebooting. The weekly maintenance command clears cached metadata and ensures the kernel package matches the bootloader configuration. Reboot after adding the parameter.
Snapshot the system before the upgrade. Future-you will thank you.
Verify it worked
You need to confirm the driver is actually using the sync mechanism. Visual inspection is not enough. Frame pacing can hide tearing in static windows.
Here is how to check the active refresh rate and sync status.
# xrandr --verbose shows the current mode and flags
# look for "refresh" and "vsync" in the output
xrandr --verbose | grep -A 5 "connected"
# glxinfo confirms the OpenGL renderer and sync state
# pipe through grep to isolate the NVIDIA driver string
glxinfo | grep "OpenGL renderer"
The xrandr output should show your forced rate or the adaptive sync flag. The glxinfo output should list the NVIDIA driver version. Open a browser and scroll rapidly. The split should be gone. If you see tearing on Wayland, check journalctl -t setroubleshoot. SELinux denials sometimes block the compositor from accessing the GPU buffer. Read those before disabling SELinux.
Run journalctl -xe first. Read the actual error before guessing.
Common pitfalls and what the error looks like
The xrandr --output HDMI-0 --rate 60 command will refuse to proceed and print xrandr: cannot find output "HDMI-0". The output name is wrong. Run xrandr without arguments and copy the exact string next to connected.
If you see [FAILED] Failed to start nvidia-persistenced.service during boot, your kernel parameter is missing or malformed. The NVIDIA persistence daemon requires nvidia-drm.modeset=1 to load properly. Check /proc/cmdline for the parameter.
Config files in /etc/ are user-modified. Files in /usr/lib/ ship with the package. Edit /etc/. Never edit /usr/lib/. Overwriting package files breaks dnf transactions and leaves you with unmanageable upgrades.
The nvidia-settings GUI sometimes shows a grayed-out Adaptive Sync checkbox. This means the monitor does not advertise FreeSync or G-Sync compatibility in its EDID data. Check your monitor's physical settings menu. Some panels hide VRR behind a manufacturer-specific label like "Motion Blur Reduction" or "Overdrive".
If the screen goes black after applying ForceCompositionPipeline, press Ctrl+Alt+F3 to drop to a TTY. Remove the Xorg snippet or revert the nvidia-settings assignment. The X server will recover on the next login.
Firewall rules do not affect display synchronization. Skip firewall-cmd unless you are debugging remote desktop sessions. Focus on the display server and kernel parameters.
When to use this vs alternatives
Use a fixed refresh rate when you want predictable frame pacing and your monitor does not support variable refresh. Use adaptive sync when your monitor supports FreeSync or G-Sync compatible mode and you want maximum performance without tearing. Use Wayland with nvidia-drm.modeset=1 when you want modern compositor features and hardware acceleration. Use X11 when you rely on legacy applications that break under Wayland compositing. Stay on the default Fedora session if you only deviate from the defaults occasionally.