Skip to content

Instantly share code, notes, and snippets.

Last active August 12, 2023 05:00
  • Star 11 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
Force RGB instead of YCbCr output for HDMI on Ubuntu

Force RGB pixel format over YCbCr

There are some monitors, in my case Dell U2413, that report having YCbCr support when plugged in over HDMI. My AMD Radeon RX 570 Series video card sees this YCbCr pixel format and then prefers that over the RGB pixel format. The result is that fonts, graphics and other visuals are pixelated and not smooth in Ubuntu.

This actually is not just a Linux problem. A similar problem exists on macOS with the same monitor hooked up over HDMI. In fact an article by John Ruble on the Atomic Object blog called Fixing the External Monitor Color Problem with My 2018 MacBook Pro attempts to fix the exact same thing.


All of the articles I could find exploring this topic advocate patching the EDID for the monitor. Unfortunately the macOS solution would not work here. Luckily I found a Reddit post that covered how to get it working.

Install Patched EDID

Install the patched EDID (this example uses the pre-patched EDID attached here) and modify GRUB to use the new EDID.

$ sudo mkdir -p /lib/firmware/edid
$ cd /lib/firmware/edid
$ wget

Create initramfs hook to copy the new EDID

$ sudo tee "/etc/initramfs-tools/hooks/edid" > /dev/null <<'EOF'
    echo "$PREREQ"

case $1 in
    exit 0

. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line
mkdir -p "${DESTDIR}/lib/firmware/edid"
cp -a /lib/firmware/edid/edid.bin "${DESTDIR}/lib/firmware/edid/edid.bin"
exit 0
$ chmod +x /etc/initramfs-tools/hooks/edid
$ sudo update-initramfs -u

Modify the GRUB configuration to use the new EDID

Edit /etc/default/grub and add drm_kms_helper.edid_firmware=edid/edid.bin to the end of GRUB_CMDLINE_LINUX_DEFAULT.

For example:

--- /etc/default/grub	2020-03-19 15:27:24.350222700 -0400
+++ /etc/default/grub	2020-03-19 14:22:58.052179120 -0400
@@ -7,7 +7,7 @@
 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
+GRUB_CMDLINE_LINUX_DEFAULT="quiet splash drm_kms_helper.edid_firmware=edid/edid.bin"
 # Uncomment to enable BadRAM filtering, modify to suit your needs

After saving the changes to /etc/default/grub run sudo grub-mkconfig -o /boot/grub/grub.cfg and reboot.

Creating a Patched EDID

Get Unpatched EDID

Find your current EDID and copy it to the current working directory.

$ sudo find /sys/devices/pci*/*/*/*/*/*HDMI* -name "*edid*" | head -1 | xargs -I{} cp {} edid.bin

Compile wxEDID Utility

$ sudo apt install -y libwxgtk3.0-dev
$ wget
$ tar xvf wxedid-0.0.19.tar.gz
$ cd wxedid-0.0.19
$ ./configure --prefix=$HOME
$ make
$ make install

Run the wxEDID Utility


Edit/Patch EDID with wxEDID Utility

  1. Open the edid.bin file with wxEDID
  2. Find SPF: Supported features -> vsig_format -> replace 0b01 wih 0b00
  3. Find CHD: CEA-861 header -> change the value of YCbCr420 and YCbCr444 to 0
  4. Find VSD: Vendor Specific Data Block -> Change the value of DC_Y444 to 0
  5. Click Option on the panel-> Recalc Checksum
  6. Save patched EDID and exit


EDID edit

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment