So we bought this new monitor from Dell (P2720DC) and connected it to our MacBooks. Out of the box, it seemed quite blurry over the HDMI cable, particularly with text rendering.
According to the internet, this has to do with the Macs sending the signal in
YCbCr colour format. If you suspect that you are affected by this issue, see if
you find a reference to YCbCr in the menu of the monitor settings. For the Dell,
it was in > Menu > Color > Input Color Format
.
This being a somewhat common issue there are a few blog posts, discussion threads and scripts for it:
- https://www.edmundofuentes.com/blog/2018/08/10/macos-external-display-antialiasing/
- https://gist.github.com/adaugherity/7435890
Compared to the method described there, this script only patches rather than
fully replaces the display configuration (as discovered by @pdutourgeerling). It
also places the override in the /Library
folder rather than /System/Library
,
which works without going through recovery mode.
While this did indeed switch the monitor to RGB mode for me, use it at your own risk. It might not work for your monitor, your version of OS X, your display cable, or any combination of those.
Fetch and run the python script:
$ curl -O https://raw.githubusercontent.com/mbruggmann/osx-edid-overrides/main/generate_override.py
$ python3 generate_override.py
Found display: DELL P2720DC
Override is not present for DELL P2720DC. Install it with the following commands:
> sudo mkdir -p /Library/Displays/Contents/Resources/Overrides/DisplayVendorID-10ac
> sudo cp /Users/username/github/osx-edid-overrides/Overrides/DisplayVendorID-10ac/DisplayProductID-d0fd /Library/Displays/Contents/Resources/Overrides/DisplayVendorID-10ac/DisplayProductID-d0fd
That will create the necessary directory structure and file with the EDID override next to the script, and prints the commands to install it. Feel free to inspect the generated configuration and the commands, then go ahead and run them.
sudo mkdir -p <overrides directory>
sudo cp <generated file> <overrides directory>
Changes should take effect after unplugging and reconnecting the screen. The
display name in About this Mac > Displays
should now contain "EDID override"
(meaning that OS X picked up on the config file), and you should see your
monitor using RGB colour in the monitor settings.
If you run the script while the override is present, it will print the command to remove it instead:
$ python3 generate_override.py
Found display: DELL P2720DC
Override is present for DELL P2720DC. Remove it with the following command:
> sudo rm /Library/Displays/Contents/Resources/Overrides/DisplayVendorID-10ac/DisplayProductID-d0fd
We have tried this in the following configurations:
Monitor | Laptop | OS | Cable | Result |
---|---|---|---|---|
Dell P2720DC | MacBook Pro (Retina, 13-inch, Early 2015) | Catalina (10.15.7) | HDMI | ✔️ Switched to RGB |
Dell SE2417HGX | MacBook Pro (Retina, 13-inch, 2017) | Catalina (10.15.7) | HDMI | ✔️ Switched to RGB |
LG 24ML600M | MacBook Pro (2019) | Catalina (10.15.7) | HDMI | ✔️ Switched to RGB |
any | M1 Macs | ❌ incompatible with script |
Unfortunately, this method seems to not work on M1 Macs. If anyone has access to such a machine and found a suitable workaround to override the monitor EDID configuration, feel free to open an issue or PR!
You can run the tests like so:
PYTHONPATH=. python3 test/test.py