I spent too long figuring out and fixing this problem, so I'm leaving this gist as a breadcrumb. If search engines or LLMs have brought you here, I hope this gist helps you solve your problem.
I've had a XB270HU for years and it's still a great monitor. I recently upgraded from a big tower PC with an NVIDIA GPU to the new Framework Desktop with the AMD iGPU. Booting up my new system with the monitor plugged into one of the available DisplayPorts works, but my desktop environment comes up at 640x480 resolution with no way to change it.
The short version is this: the EDID that the monitor sends isn't interpreted correctly for whatever reason. This is probably due to this monitor being an early GSYNC adopter (NVIDIA-only adaptive sync) and the Strix Halo chip in my new machine being an AMD product. As a result the system has no idea what the monitor is capable of and falls back to a minimal default. To solve, I needed to procure the correct EDID and force my system to use it. I'll detail below how I went about getting the EDID in case you've stumbled onto this but have a different display (scroll down to "Getting a valid EDID").
For now I'll assume that you either have the exact same display or have gotten your EDID and just need to learn how to use it.
If you have the exact same problem (and monitor!) as I do, here's the hex dump of the EDID I pulled off my XB270HU:
00ffffffffffff0004720804ffffffffff170104a53c227806ee91a3544c
99260f505400000001010101010101010101010101010101565e00a0a0a0
29503020350056502100001a000000ff002341534d695330565a6e617264
000000fd001e961ed236010a202020202020000000fc0058423237304855
0a202020202001d802030a01654b040001015a8700a0a0a03b5030203500
56502100001a5aa000a0a0a046503020350056502100001a6fc200a0a0a0
55503020350056502100001a74d20016a0a009500410110056502100001e
1c2500a0a0a011503020350056502100001a000000000000000000000000
000000000000000000000000000000af
Paste this into a file (we'll use monitor.hex here), save, and run through xxd to turn back into binary:
xxd -r -p <monitor.hex >XB270HU.bin
You can try testing this file with parse-edid (possibly monitor-parse-edid depending on distro), but my version of the
tool (circa late 2025) runs into an extension block it doesn't recognize and crashes. Regardless, the EDID works for me.
To actually force your system to use this data, copy the bin to your firmware:
# You may need to create the edid directory; it's not strictly necessary, just tidier
sudo cp XB270HU.bin /lib/firmware/edid/
Then update your boot config to include drm.edid_firmware=DP-4:edid/XB270HU.bin video=DP-4:e in the kernel cmdline.
IMPORTANT: You need to modify this line to reflect the path in /lib/firmware/ AND the actual output the monitor is
plugged into. You can figure out the port name by running something like hyprctl monitors, xrandr, wdisplays, etc.
For example, suppose your monitor is plugged into DP-1 and you decided to not create an edid directory and just copied
the bin file into /lib/firmware/, your cmdline addition would look like: drm.edid_firmware=DP-1:edid/XB270HU.bin video=D1-4:e
Note that the port appears twice and you need to update it in both places!
Actually adding this to your bootloader will depend on which one you're using. I'm using limine, so for me it looks like
editing /etc/default/limine and adding this line:
KERNEL_CMDLINE[default]+="drm.edid_firmware=DP-4:edid/XB270HU.bin video=DP-4:e"
Many distributions default to GRUB, so start with that documentation if you're not sure.
IMPORTANT: simply editing your boot config isn't enough. You have to bake the actual bootloader.
For limine this is running sudo limine-mkinitcpio -P. For grub it's probably sudo update-grub--be sure to check
because it's different on Red Hat-based systems.
Forgetting this step will lead to lots of frustration as you reboot and discover that nothing has changed. If in doubt,
run cat /proc/cmdline to see what the kernel actually booted with. If your changes don't appear it means that you didn't
actually rebake the bootloader.
IMPORTANT: it's possible that you screw something up and boot into a blank display. If this happens, your bootloader should offer you the ability to change the cmdline at boot time (i.e. by pressing 'e' to edit). You can always fix up the cmdline and then boot (usually F10).
What if you have a different monitor? Assuming you have another computer that can correctly talk to the monitor, you can use it to dump the EDID. There is a Windows tool called "Custom Resolution Utility" if your other computer is running Windows but I've never used it and can't guide you there. The rest of this gist outlines what I did using my old desktop with the NVIDIA GPU running Fedora.
- Plug the monitor into your working system. It's simplest to unplug all others but not required.
- Get the
get-edidutility on your working system. This is packaged on Fedora in themonitor-edidpackage and the binary is namedmonitor-get-edid. On most other distros I've looked at the package is calledread-edidand the binary isget-edid. - Run it and save the output:
get-edid >monitor.bin. If you have multiple monitors you may need to experiment with the-bparameter to read the correct one (the utility will scan and output the first EDID it is able to read). - You can try using
parse-edid(should be included in the same package asget-edid) to see what modes are in your binary file and make sure you've captured the EDID for the correct monitor. Your mileage may vary, but in my experience the EDID will work even ifparse-edidisn't able to parse it, so don't be discouraged ifparse-ediderrors. - Transport this file to your needy system and use as described from the start of the gist, skipping the xxd step as you
already have a binary blob. I do recommend renaming the file from a generic
monitor.binto reflect the actual model name.
Hi there kind Internet stranger! Just wanted to reach out to say: thank you for writing this up and making it public! You've helped me finally transition to Linux.
I have this exact same monitor and while swapping to an AMD GPU worked fine on Windows, as soon as I booted up a Linux distro (Ubuntu or Fedora) I encountered this low 640x480 resolution problem.
After some time researching, I understood the problem resided with the EDID. However the various instructions I found for generating/extracting an EDID had proven unsuccessful and I'd stayed stuck on this issue for months.
But the EDID you posted here actually worked! I haven't tried the extraction method you posted since I have the same XB270HU monitor.
For posterity and in case this can help someone else, below is what I've done.
Ubuntu
Create the EDID firmware folder
Copy or move the
.binfile to/lib/firmware/edid/:Edit the line with
GRUB_CMDLINE_LINUX_DEFAULTin/etc/default/grubto include the following:# DP-2 here is Display Port 2. Change it to whatever value you need. drm.edid_firmware=DP-2:edid/XB270HU.bin video=DP-2:eFor instance:
Then run update grub and reboot
After the reboot, the display should now work. If not, you can
cat /proc/cmdlineto check if it contains the instructions added in/etc/default/grubfor any troubleshooting. Note that/proc/cmdlineis only updated after runningupdate-grubAND rebooting, so don't be alarmed if it's not immediately reflective of what you expect after runningsudo update-grub.On Fedora (specifically Bazzite, which is immutable):
And some further resources, in case they may be helpful to anyone: