Fix: External Display Stuck at 1024x768 on Linux
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
- Identify your display name
Open a terminal. Runxrandr -q. Look for the external display—it's usuallyHDMI-1,DP-1, orVGA-1. If you see something likeHDMI-1 connected 1024x768, that's your target. Write down the name. - Generate a modeline for your resolution
Runcvt 1920 1080 60.cvtspits out a modeline likeModeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync. Copy the whole thing after "Modeline". - Create the new mode
Runxrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync. Replace the numbers with whatcvtgave you. After this,xrandr -qshows the new mode listed under "1920x1080_60.00". - Add the mode to your display
Runxrandr --addmode HDMI-1 "1920x1080_60.00"(replaceHDMI-1with your display name). - Apply the mode
Runxrandr --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. Trycvt 1920 1080 50orcvt 1920 1080 30for 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-edidon Ubuntu). - Run
sudo get-edid | parse-edidto 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.binto your kernel boot parameters in/etc/default/grub. Runsudo update-gruband 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:
- Create a script
~/.config/xrandr-fix.shwith the three commands from steps 2-4. - Make it executable:
chmod +x ~/.config/xrandr-fix.sh. - 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. - Alternatively, add the commands to
~/.xprofileor~/.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?