Skip to content

Instantly share code, notes, and snippets.

@ejdyksen
Last active August 16, 2025 02:44
Show Gist options
  • Save ejdyksen/8302862 to your computer and use it in GitHub Desktop.
Save ejdyksen/8302862 to your computer and use it in GitHub Desktop.
A script to fix EDID problems on external monitors in macOS

patch-edid.rb

A script to fix EDID problems on external monitors in macOS.

Instructions

  1. Connect only the problem display.

  2. Create this directory structure (if it doesn't already exist):

    sudo mkdir -p /Library/Displays/Contents/Resources/Overrides
  3. Download this ruby script in that directory:

    cd /Library/Displays/Contents/Resources/Overrides
    sudo curl -O https://gist.githubusercontent.com/ejdyksen/8302862/raw/patch-edid.rb

    Note: You may want to use adaugherity's version of the script instead.

  4. Run the script we just downloaded (as root again). This creates a new display override plist file.

    cd /Library/Displays/Contents/Resources/Overrides
    sudo ruby patch-edid.rb
  5. Unplug and replug in the problem display.

Additional reading/acknowledgements

  • The original forum thread
  • An improved version of the script by adaugherity
  • An explaination of the problem from Atomic Object's blog
  • Thanks so much to @stackrainbow for pointing out that this can be done without disabling SIP.
  • This version appears to work in Catalina and Big Sur. See earlier revisions for what worked (with disabling SIP) in earlier versions of macOS, which require the override plist to be in a different directory.
#!/usr/bin/ruby
# Create display override file to force Mac OS X to use RGB mode for Display
# see http://embdev.net/topic/284710
#
# Update 2013-06-24: added -w0 option to prevent truncated lines
require 'base64'
data=`ioreg -l -w0 -d0 -r -c AppleDisplay`
edid_hex=data.match(/IODisplayEDID.*?<([a-z0-9]+)>/i)[1]
vendorid=data.match(/DisplayVendorID.*?([0-9]+)/i)[1].to_i
productid=data.match(/DisplayProductID.*?([0-9]+)/i)[1].to_i
puts "found display: vendorid #{vendorid}, productid #{productid}, EDID:\n#{edid_hex}"
bytes=edid_hex.scan(/../).map{|x|Integer("0x#{x}")}.flatten
puts "Setting color support to RGB 4:4:4 only"
bytes[24] &= ~(0b11000)
puts "Number of extension blocks: #{bytes[126]}"
puts "removing extension block"
bytes = bytes[0..127]
bytes[126] = 0
bytes[127] = (0x100-(bytes[0..126].reduce(:+) % 256)) % 256
puts
puts "Recalculated checksum: 0x%x" % bytes[127]
puts "new EDID:\n#{bytes.map{|b|"%02X"%b}.join}"
Dir.mkdir("DisplayVendorID-%x" % vendorid) rescue nil
f = File.open("DisplayVendorID-%x/DisplayProductID-%x" % [vendorid, productid], 'w')
f.write '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">'
f.write "
<dict>
<key>DisplayProductName</key>
<string>Display with forced RGB mode (EDID override)</string>
<key>IODisplayEDID</key>
<data>#{Base64.encode64(bytes.pack('C*'))}</data>
<key>DisplayVendorID</key>
<integer>#{vendorid}</integer>
<key>DisplayProductID</key>
<integer>#{productid}</integer>
</dict>
</plist>"
f.close
@cooltig
Copy link

cooltig commented Jul 13, 2023

When I run the script it shows an error:[
](patch-edid.rb:11:in <main>': undefined method []' for nil:NilClass (NoMethodError))

@apassiou
Copy link

Here is my issue, I am sending signal from Mac to a monitor via HDbaseT adapter, and I get a display like this: https://i.imgur.com/yO1ArVp.png

Whats strange is if I rotate the picture 90 or 180 degrees it looks completely perfect. But setting it back to Standard it goes back looking like the picture. I tried running this script, but it didnt improve it.

@joevt
Copy link

joevt commented Oct 15, 2023

@apassiou What Mac, GPU, resolution, adapter, monitor? Do you mean 90° and 270° rotation? If it were 180°, then you could just turn the display upside down. 90° or 270° means the height becomes the width which is lower than the original width. So maybe the adapter doesn't like the original width. This seems like a limitation of the adapter, gpu, or the display. Did you try without the adapter?

@johntitor2049
Copy link

Hello! i'm currently using a samsung qn90b connected to a macbook m1 2020" via a dell docking station. When connected to the docking, it's running at 8bit depth while if i plug the display straight into my mac, it runs at 10bit color depth. Any workaround for this issue? thanks!!

@GetVladimir
Copy link

@johntitor2049 the dock might not have the port or the bandwidth to support 10bit color depth, or the Mac simply doesn't recognize it properly.

If possible, it would be best to connect the monitor directly when 10bit color depth is required

@Fedosov83
Copy link

How can I activate HDR support with this patch?

@GetVladimir
Copy link

@Fedosov83 I'm not sure if you can use both HDR and RGB Color Output over a typical HDMI connection. You might need USB-C to DisplayPort for that, but it might again revert to YCbCr when using that combination

@xavierchen0
Copy link

Hi Vladimir, thank you for this and I appreciate the effort you put into helping the community. The steps was clear and it seemed like it worked.

Could I get your help to confirm if my Safari is now in HiDPI? Here is an attached screenshot. It seems like there are less sections than the image you have attached, but text is crisp now.

image

Setup:

  • Macbook Pro M3
  • Monitor #1: Dell S2722DC
  • Moniter #2: Dell S2421HS
  • Dock Dell D6000

@GetVladimir
Copy link

@xavierchen0 thank you so much for your comment.

Yes, you're right, the HiDPI version of the icon should have a lot more notches with varying sizes. Here is an example of how it should look like:

IMG_1002

You can also check in System Information if the resolution is HiDPI:

  • Click on the Apple  Logo on the Top Menu Bar
  • Hold option/alt on the Keyboard and click on System Information
  • Choose Graphics

It should show something like resolution is 3840 x 2160, and UI looks like 1920 x 1080

@xavierchen0
Copy link

xavierchen0 commented Oct 4, 2024

Oh I am not using a 4K monitor 😅. I am actually using a 27 inch 2K monitor.

This is a screenshot of my system information:
image

From what I can see, it seems to be working. Thank you for your prompt response!

Edit: I am aware this doesn't fit the description of HiDPI, but something was causing my display to have very blurry text, hence I was looking up the internet for a solution and stumbled to your page.

@GetVladimir
Copy link

GetVladimir commented Oct 4, 2024

@xavierchen0 yes, you were trying to get (pseudo) HiDPI on standard monitors in order for the macOS interface to look a bit better. They don't seem to optimize the UI for the 1080p monitors anymore. Even the cursor line when typing can cover come characters since it's too thick/bold.

Anyway, the resolution should still show double in the system information and the scale should be set to 2x.

Here is a detailed guide how to enable HiDPI mode on standard monitors: https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8?permalink_comment_id=4207112#gistcomment-4207112

Please note that it won't look nearly as good as it would look on a real 4K display with 2x scaling

@alexconvey
Copy link

Ain't working for M1 MBP running Sequioa 15.3 with Dell P2425 unfortunately. Files are recreated, changes made - no effect. The script does not work as well because the output of ioreg ... command is empty.

@adam-electric
Copy link

Ain't working for M1 MBP running Sequioa 15.3 with Dell P2425 unfortunately. Files are recreated, changes made - no effect. The script does not work as well because the output of ioreg ... command is empty.

@alexconvey Hey bro i read all the articles in this page or post or whatever it is. I have vague knowledge of using the terminal and moving plist and other stuff like this. I am like a hardcore NOOB on this so i know i will mess up my mac mini m1.

Anyways, i am trying to fix the LAGGING, on the monitor that i am using as a third connecter system.

So basically i have my mac mini m1 with two native systems. HDMI TO HDMI, 1st native resolution intended by apple. (flawless)

Then i have my 2nd monitor which is the same brand two dell monitors next to each other, but this is DP (Display Port 1.4 to HDMI 2.1) again another native monitor connected just like apple intended to do so. (flawless)

Then i purchased a J5Create USB-C to Dual HDMI Multi- Monitor Adapter (model : JCA365) so i have it connected to my 3rd Monitor which is an ACER Nitro with HDR 1080P and vsync or nvidia cant remember. Its a real good monitor i use it for video and video games. Anyways, i connected this to my THUNDERBOLT 4 or idk what thunderbolt MAC MINI M1 has in the back, anyways, CONNECTED IT, and connected a MONOPRICE HDMI 2.1 TO HDMI 2.1 8K RES, etc. and downloaded the LATEST DRIVERS from the Display Link adapter from J5CREATE, and my 3rd monitor is HARDCORE LAGGY. - This 3rd Monitor is Connected not as Apple Intended to (laggy)

So i have beautiful colors in the (ACER MONITOR 3RD MONITOR but the movement or switching from apps to different windows its super SUPER MEGA SLOW, LIKE LAGGY LIKE IF THE SAME SYSTEM IS CONNECTED WITHOUT WIRES. PER SE, WIRELESSLY)

This is how i ended up here doing lots of research, this comments are old, the ones before us are using old systems.

I run Mac OS - Sequoia 15.5 Version.

So i dont understand why we having problems when our systems are a bit more accelerated and should be with higher hardware, to be able to handle 3 to 4 monitors.

I don't know if i am completely wrong or not but what i do know is that supposeldy M1 up to M4 should be FLAWLESS in everything.

Seems apple lied to us. Still again maybe it is possible just the main issue is. I DO NOT UNDERSTAND PLIST NEITHER TERMINALS OR PATCHES and thats where my knowledge ends.

TRYING TO HELP SOMEONE AS WELL AS MYSELF AND AS YOURSELF for everyone to have their 3rd MONITOR working FLAWLESSLY, yet i hope i am making a good point.

So i hope i was able to get you to understand my situation yet, i dont know if you already found a solution, yet i do know THERE IS THOUSANDS OR PROBABLY MILLIONS OF PEOPLE TRYING TO GET THIS WORK and i do know or am sure that they ended up in github just like you and me

CHEERS MATE!

Screenshot 2025-08-14 at 5 13 37 AM (image of the display link adapter)

@joevt
Copy link

joevt commented Aug 14, 2025

and downloaded the LATEST DRIVERS from the Display Link adapter from J5CREATE, and my 3rd monitor is HARDCORE LAGGY. - This 3rd Monitor is Connected not as Apple Intended to (laggy)

DisplayLink uses USB and compressed video. The USB is less than 5 Gbps. A 4K60 display is usually 16 Gbps. The CPU is used to compress the video so it may be laggy. DisplayLink does not use the GPU of the Mac so it can connect any number of displays but they won't perform like they were connected to a GPU.

@adam-electric
Copy link

and downloaded the LATEST DRIVERS from the Display Link adapter from J5CREATE, and my 3rd monitor is HARDCORE LAGGY. - This 3rd Monitor is Connected not as Apple Intended to (laggy)

DisplayLink uses USB and compressed video. The USB is less than 5 Gbps. A 4K60 display is usually 16 Gbps. The CPU is used to compress the video so it may be laggy. DisplayLink does not use the GPU of the Mac so it can connect any number of displays but they won't perform like they were connected to a GPU.

So then i don't need to do any patches right? thats were i am super confused about patching it. Seems the patches work completely fine and fluidly on intel based computers. So i dont know if theres a firmware to limit that fluid on the third monitor. So how were you able to find its a 5GB usb c cable? The monitor i use its a 1080p for gaming. I dont have any 4K monitors due to that issue. i know it takes more data from it if its 4K unless i am wrong.

So my question is, Is there a way to be able to overpass that 16GB by usb-c per se idk if theres a MULTI MONITOR WITH DISPLAY LINK RUNNING AT 20GBPS not sure i really never done this before.

Its my first time and im doing research, i searched on google and amazon but seems lots of people complain about this type of items.

So i dont know if there is a possibility to be able to overcome that lag.

I am sorry i am a complete noob. I hope i am able to understand more about this.

Thank you!

@joevt
Copy link

joevt commented Aug 15, 2025

Look for the DisplayLink USB device in System Information.app. DisplayLink uses USB 3.0. USB 3.0 is ≈ 4 Gbps (5 Gbps times 8/10 for the 8b10b encoding = 4 Gbps).

Video data rate is pixel clock times bits per pixel. 4K60 usually has a pixel clock of 533 MHz. 533 million pixels per second x 30 bits per pixel = 15.9 billions bits per second (Gbps). The CPU must compress video to transmit to the DisplayLink video controller at reasonable refresh rates (60 Hz).

I don't think there are any faster DisplayLink devices. The CPU is doing all the work. A faster DisplayLink would require the CPU to do more work.

To lessen the work required by the CPU, reduce the resolution and/or refresh rate.

@adam-electric
Copy link

Look for the DisplayLink USB device in System Information.app. DisplayLink uses USB 3.0. USB 3.0 is ≈ 4 Gbps (5 Gbps times 8/10 for the 8b10b encoding = 4 Gbps).

Video data rate is pixel clock times bits per pixel. 4K60 usually has a pixel clock of 533 MHz. 533 million pixels per second x 30 bits per pixel = 15.9 billions bits per second (Gbps). The CPU must compress video to transmit to the DisplayLink video controller at reasonable refresh rates (60 Hz).

I don't think there are any faster DisplayLink devices. The CPU is doing all the work. A faster DisplayLink would require the CPU to do more work.

To lessen the work required by the CPU, reduce the resolution and/or refresh rate.

yes i found it it shows up to 5gbps oh well so not much we can do about that. Well thank you very much for your help at least now i know that there is no solution to this.

it is what it is.

Thank you!

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