Display / Screen Issues

Screen looks wrong, stuck at low resolution, tearing, or black screen after login? This guide covers the most common display problems on Linux and how to fix them.

Screen Resolution Wrong or Stuck at Low Res

If your screen is stuck at something like 1024x768 or 800x600 when it should be much higher, it's almost always a graphics driver issue. Your system is using a generic fallback driver instead of the proper one for your GPU.

Check what driver you're using

# See what GPU you have
lspci | grep -i vga

# Check which driver is loaded
lsmod | grep -E 'nvidia|amdgpu|i915|nouveau'

# See available resolutions
xrandr   # On X11
# On Wayland, check your desktop's display settings instead

Fix it based on your GPU

Quick test: If xrandr shows your desired resolution but it's not being used, you can force it with: xrandr --output <display-name> --mode 1920x1080. Replace the display name and resolution with your own (run xrandr without arguments to see what's available).

Screen Tearing

Screen tearing looks like a horizontal line cutting across your screen where the top and bottom halves are slightly out of sync. It's especially noticeable when scrolling or watching video. It happens when your display is updating in the middle of a frame being drawn.

The fix depends on your desktop environment:

GNOME

GNOME on Wayland handles this automatically -- you shouldn't see tearing. If you're on X11 with GNOME, it uses Mutter as its compositor, which should also prevent tearing by default.

If you still see tearing on GNOME with NVIDIA:

# Force full composition pipeline (NVIDIA on X11)
sudo nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"

# To make it permanent, add it to your xorg config:
# See our NVIDIA guide for details
KDE Plasma

KDE gives you explicit control over compositing:

  1. Open System SettingsDisplay and MonitorCompositor
  2. Set Rendering backend to OpenGL 3.1 (or OpenGL 2.0 if that doesn't work)
  3. Enable VSync -- try "Full Screen Repaints" first
  4. Set Tearing Prevention to "Full Screen Repaints" or "Re-use screen content"

On Wayland with KDE Plasma 6, tearing is handled automatically, though you can enable "Allow tearing" in display settings if you prefer lower input latency in games.

XFCE

XFCE's compositor is lightweight but can cause tearing if not configured right:

  1. Open SettingsWindow Manager TweaksCompositor tab
  2. Make sure Enable display compositing is checked
  3. Check Synchronize drawing to the vertical blank

If tearing persists, XFCE's compositor is fairly basic. You can disable it and use picom instead for better results:

# Install picom
# Ubuntu/Debian: sudo apt install picom
# Fedora: sudo dnf install picom
# Arch: sudo pacman -S picom

# Disable XFCE compositor, then start picom
picom --vsync &

Multi-Monitor Setup

Linux handles multiple monitors well these days, but getting everything arranged correctly takes a little setup.

Arranging displays

Different refresh rates

If you have a 144Hz gaming monitor and a 60Hz secondary display, you might notice the 144Hz monitor stuttering when both are active. This used to be a big problem, but the situation has improved:

Per-monitor scaling

If one monitor is 4K and the other is 1080p, you'll want different scaling on each:

HiDPI / 4K Scaling

If you have a high-resolution display (4K, 5K, or a high-DPI laptop screen), everything might look tiny by default. You need to enable scaling so text, icons, and windows are a usable size.

GNOME

GNOME supports integer scaling (100%, 200%) out of the box. For fractional scaling (125%, 150%, 175%):

# Enable fractional scaling on Wayland
gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

# Then go to Settings → Displays and you'll see more scale options

KDE Plasma

KDE has built-in fractional scaling support:

  1. Open System SettingsDisplay and Monitor
  2. Select your display and adjust the Scale slider (you can set any value like 125%, 150%, etc.)
  3. Click Apply and log out/in for the best results

Per-app issues

Even with system-wide scaling set correctly, some apps might look blurry or the wrong size:

Black Screen After Login

You type your password, the screen goes black, and nothing happens. You might see a cursor, or the screen might be completely dark. This is one of the scariest issues, but it's usually fixable.

Common causes

How to recover

# 1. Switch to a text console (this works even with a black screen)
#    Press Ctrl + Alt + F2 (or F3, F4, F5, F6)
#    Log in with your username and password

# 2. Check the display manager status
sudo systemctl status gdm      # GNOME
sudo systemctl status sddm     # KDE
sudo systemctl status lightdm  # XFCE / others

# 3. Check for GPU driver issues
lsmod | grep -E 'nvidia|nouveau|amdgpu'
dmesg | grep -i -E 'gpu|drm|nvidia|error'

# 4. Try restarting the display manager
sudo systemctl restart gdm     # Or sddm / lightdm

# 5. If it's an NVIDIA issue, you can try switching to the open-source driver
sudo apt remove nvidia-driver-*   # Ubuntu/Debian
sudo reboot
# Then reinstall the correct driver after rebooting
Can't even get to a text console? Reboot and hold Shift (BIOS) or press Esc (UEFI) to access the GRUB menu. Edit the boot entry and add nomodeset to the kernel parameters. This disables GPU driver loading and boots with basic graphics, letting you fix things.

Flickering Screen

A flickering display can range from a subtle flicker to the whole screen rapidly turning on and off. Here's what to check:

Wayland vs X11 differences

General fixes

# Check for GPU errors in the kernel log
dmesg | grep -i -E 'drm|gpu|display|flicker'

# On X11, try disabling the compositor temporarily
# KDE: Alt + Shift + F12 toggles the compositor
# XFCE: Settings → Window Manager Tweaks → Compositor → uncheck "Enable"

# If flickering happens with an NVIDIA GPU, try adding this kernel parameter:
# nvidia-drm.modeset=1
# Edit /etc/default/grub and add it to GRUB_CMDLINE_LINUX_DEFAULT
sudo update-grub   # Ubuntu/Debian
sudo grub2-mkconfig -o /boot/grub2/grub.cfg   # Fedora

External Monitor Not Detected

You plug in an external monitor and nothing happens. Here's how to troubleshoot:

Check the basics first

On X11

# List all connected and disconnected outputs
xrandr

# If the monitor shows as "connected" but no image:
xrandr --output HDMI-1 --auto

# If it shows as "disconnected" even though it's plugged in:
# Force detection
xrandr --output HDMI-1 --mode 1920x1080

# If your resolution isn't listed, you can add it manually:
cvt 1920 1080 60   # Generate modeline for your resolution
# Copy the modeline output, then:
xrandr --newmode "1920x1080_60" [paste modeline values here]
xrandr --addmode HDMI-1 "1920x1080_60"
xrandr --output HDMI-1 --mode "1920x1080_60"

On Wayland

Wayland doesn't use xrandr. Instead, your desktop environment handles display detection:

USB-C / Thunderbolt monitors: These can be trickier. Make sure bolt (Thunderbolt device manager) is installed and running: sudo systemctl status bolt. You may need to authorize the device with boltctl.
Brightness Controls Not Working

This is mostly a laptop issue. You press the brightness keys and nothing happens, or the on-screen indicator moves but the actual brightness doesn't change.

Try the kernel parameter fix

The most common fix is telling the kernel which backlight interface to use:

# Edit your GRUB config
sudo nano /etc/default/grub

# Find the line that starts with GRUB_CMDLINE_LINUX_DEFAULT
# Add one of these options (try them one at a time):

# Option 1 (most common fix):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_backlight=vendor"

# Option 2:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_backlight=native"

# Option 3 (for newer kernels):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_backlight=video"

# Save the file, then update GRUB:
sudo update-grub   # Ubuntu/Debian/Mint
sudo grub2-mkconfig -o /boot/grub2/grub.cfg   # Fedora

Reboot and test after each change.

Manual brightness control

# Find your backlight device
ls /sys/class/backlight/

# Check current and max brightness
cat /sys/class/backlight/*/brightness
cat /sys/class/backlight/*/max_brightness

# Set brightness manually (replace intel_backlight with your device)
# Value is between 0 and max_brightness
echo 500 | sudo tee /sys/class/backlight/intel_backlight/brightness

Install a brightness tool

# brightnessctl is a handy command-line tool
# Ubuntu/Debian: sudo apt install brightnessctl
# Fedora: sudo dnf install brightnessctl
# Arch: sudo pacman -S brightnessctl

# Set brightness to 50%
brightnessctl set 50%

# Increase by 10%
brightnessctl set +10%

# Decrease by 10%
brightnessctl set 10%-

Night Light / Blue Light Filter

Staring at a bright blue screen at night can make it harder to sleep. Both major desktops have a built-in night light feature that warms the screen color in the evening.

GNOME

  1. Open SettingsDisplaysNight Light
  2. Toggle it on
  3. Set a schedule (Sunset to Sunrise is the easiest -- it uses your location automatically) or set manual times
  4. Adjust the Color Temperature slider to your preference

KDE Plasma

  1. Open System SettingsDisplay and MonitorNight Light (called "Night Color" in older versions)
  2. Enable it and choose a schedule
  3. Adjust the color temperature

Other desktops or manual setup

If your desktop doesn't have a built-in night light, you can use redshift or gammastep (Wayland-compatible):

# Install redshift (X11) or gammastep (Wayland)
# Ubuntu/Debian:
sudo apt install redshift    # X11
sudo apt install gammastep   # Wayland

# Run it (adjusts automatically based on time of day)
redshift          # X11
gammastep         # Wayland

# Or set a specific color temperature (lower = warmer)
redshift -O 4500
gammastep -O 4500
Wayland vs X11 Explained

What are they?

X11 (also called "Xorg" or "X Window System") and Wayland are display protocols -- they're the layer between your apps and your screen. They handle things like drawing windows, tracking your mouse, and managing keyboard input.

  • X11 has been around since 1987. It works, but it's old and has limitations around security, performance, and modern display features (like mixed refresh rates and fractional scaling).
  • Wayland is the modern replacement. It's more secure (apps can't spy on each other's windows), handles HiDPI and multi-monitor better, and is generally smoother. Most major distros are now defaulting to Wayland.

Which one am I using?

# Check your current session type
echo $XDG_SESSION_TYPE
# Prints "wayland" or "x11"

How to switch

You can switch between Wayland and X11 at the login screen:

  • GDM (GNOME): Click your username, then look for a gear icon in the bottom-right corner. Select "GNOME" for Wayland or "GNOME on Xorg" for X11.
  • SDDM (KDE): Click your username, then look for a session selector (usually bottom-left). Choose "Plasma (Wayland)" or "Plasma (X11)".

When to use which

Use Wayland if...Use X11 if...
You want the best HiDPI / multi-monitor experienceYou use apps that don't work on Wayland yet (some screen sharing, remote desktop tools)
You care about security (apps can't keylog each other)You have an older NVIDIA GPU (pre-Turing / driver < 545)
You have mixed refresh rate monitorsYou need tools like xdotool or xrandr that only work on X11
Your distro defaults to it (and things work fine)You're experiencing bugs or crashes on Wayland
Bottom line: If you're on a recent install and everything works, you're probably on Wayland and that's fine. If something display-related is broken and you're on Wayland, try switching to X11 to see if the problem goes away (or vice versa). It takes 10 seconds at the login screen.