Fix: External Display Stuck at 1024x768 on Linux

Linux & Unix Intermediate 👁 74 views 📅 Jun 17, 2026

Your external monitor shows only 1024x768. This fix gets the right resolution back with xrandr or a config file change.

Quick answer

Run xrandr -q to list outputs, then cvt 1920 1080 60 to get modeline, then xrandr --newmode and xrandr --addmode. If that fails, force a custom EDID file.

Why this happens

You plugged in an external monitor—maybe a Dell 27" over HDMI or a cheap USB-C adapter—and Linux shows only 1024x768. The GPU or driver isn't reading the monitor's EDID correctly. EDID is that little block of data the monitor sends saying "I can do 1920x1080 at 60Hz." When Linux doesn't get it, or gets garbled data, it falls back to a safe VESA mode: 1024x768.

I've seen this with older Intel graphics, some NVIDIA cards using nouveau, and especially with USB-C to HDMI adapters. The hardware is fine, but the software handshake fails. You're not stuck with this resolution. Let's fix it.

Fix steps

  1. Identify your display name
    Open a terminal. Run xrandr -q. Look for the external display—it's usually HDMI-1, DP-1, or VGA-1. If you see something like HDMI-1 connected 1024x768, that's your target. Write down the name.
  2. Generate a modeline for your resolution
    Run cvt 1920 1080 60. cvt spits out a modeline like Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync. Copy the whole thing after "Modeline".
  3. Create the new mode
    Run xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync. Replace the numbers with what cvt gave you. After this, xrandr -q shows the new mode listed under "1920x1080_60.00".
  4. Add the mode to your display
    Run xrandr --addmode HDMI-1 "1920x1080_60.00" (replace HDMI-1 with your display name).
  5. Apply the mode
    Run xrandr --output HDMI-1 --mode "1920x1080_60.00". Your screen should switch to 1920x1080 immediately. If it goes black or shows "Frequency out of range", wait 10 seconds—it reverts. That means the modeline timing is off. Try cvt 1920 1080 50 or cvt 1920 1080 30 for a different refresh rate.

Alternative fixes if the main one fails

1. Force EDID manually

If xrandr won't stick, the display isn't sending proper EDID. Grab an EDID file for your monitor's native resolution. I keep a few common ones on my system. Here's how:

  • Install read-edid (sudo apt install read-edid on Ubuntu).
  • Run sudo get-edid | parse-edid to see if the monitor reports anything. If it returns garbage, you'll need a custom EDID.
  • Create a file ~/custom-edid.bin. I won't walk you through binary editing here—it's tedious. Instead, grab a known-good EDID for 1920x1080 from a site like AVS Forum or use one from a working monitor.
  • Then add video=HDMI-1:e edid=~/custom-edid.bin to your kernel boot parameters in /etc/default/grub. Run sudo update-grub and reboot.

2. Use a Wayland workaround

If you're on Wayland (check with echo $XDG_SESSION_TYPE), xrandr won't work. Wayland uses its own resolution handling. For GNOME, install gnome-control-center and set resolution in Settings > Displays. If that option is missing, try wlr-randr (for Sway or Hyprland) or kscreen-doctor (for KDE).

3. Switch display managers

I've fixed this on two machines by switching from GDM to LightDM. Something about GDM's EDID handling is buggy with certain monitors. Install lightdm (sudo apt install lightdm), then sudo dpkg-reconfigure lightdm to set it as default, then reboot.

4. Update or change GPU driver

For NVIDIA cards on Ubuntu, the open-source nouveau driver is famous for EDID issues. Switch to the proprietary driver: go to Software & Updates > Additional Drivers, select nvidia-driver-535 or similar, apply, reboot. For AMD or Intel, make sure you're on the latest kernel—run sudo apt update && sudo apt upgrade then uname -r to check.

Prevention tip

Once you get the right resolution working, make the xrandr commands permanent. Add them to your startup:

  1. Create a script ~/.config/xrandr-fix.sh with the three commands from steps 2-4.
  2. Make it executable: chmod +x ~/.config/xrandr-fix.sh.
  3. Add to your desktop environment's auto-start. On GNOME: gnome-session-properties, click Add, browse to the script. On KDE: System Settings > Startup and Shutdown > Autostart, add script.
  4. Alternatively, add the commands to ~/.xprofile or ~/.xinitrc—they run on login.

Also, avoid cheap USB-C adapters. I've had three fail at EDID passthrough. Stick with name-brand ones like Anker or Cable Matters. They're $15 more but save you an hour of debugging.

That's it. You should be looking at a crisp 1920x1080 desktop now. If not, post your xrandr -q output and monitor model in the comments—I'll help you debug the modeline timing.

Was this solution helpful?