Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Force RGB Color on M1 Mac

Force RGB Color on M1 Mac

How to Force RGB Color Output instead of YPbPr on your M1 Apple Silicon Mac for an External Monitor.

This step-by-step video tutorial will guide you through the procedure of forcing RGB color output on your M1 Mac.

Force RGB Color on M1 Mac

Here is the direct link to the video tutorial: https://www.youtube.com/watch?v=Z1EqH3fd0V4

The video also has Closed Captions (Subtitles) that you can enable, to make it easier to follow if needed.



Please note that you're doing any changes on your own risk.

Terminal commands

Here are each of the Terminal commands mentioned in the tutorial, so that you can just copy and paste them:

open /Library/Preferences

plutil -convert xml1

plutil -convert binary1

plutil -lint


End result

The end result is having your M1 mac output RGB color to your external monitor instead of YPbPr, potentially making the colors more accurate and the text a bit more crisp, even on older 1080p monitors.

Hopefully this tutorial would be useful to someone.

Please feel free to ask in the comment section if you have any questions regarding this procedure.



Background

While doing a lot of testing on how the Dual-Cable workaround makes RGB to work on M1, I've discovered what changes it makes to macOS, and managed to create a more streamlined workaround without the need to use a second cable.

To make things easier, I've created a step-by-step video tutorial of the whole procedure that should force RGB color output on your M1 Mac connected to an external monitor, and works on an HDMI-to-HDMI cable connection.

Credits

Big thanks goes to the amazing community and all their help over the years to solve issues like this:
https://gist.github.com/ejdyksen/8302862
https://gist.github.com/adaugherity/7435890

Useful Sources

Apple Open Source Project Files for Displays and Graphics
https://opensource.apple.com/source/IOKitUser/IOKitUser-1445.60.1/graphics.subproj/IODisplayLib.c
https://opensource.apple.com/source/IOGraphics/IOGraphics-517.17/IOGraphicsFamily/IOFramebuffer.cpp.auto.html

How to Edit and Convert binary plist files
http://hints.macworld.com/article.php?story=20050803111126899
https://apple.stackexchange.com/questions/155393/how-to-beautify-binary-dict-files
https://discussions.apple.com/thread/1768480

Apps based on this method

@sudowork has created an awesome script written in Phyton that automates the steps and checks for duplicate files.
You can find more info about it here: https://github.com/sudowork/fix_m1_rgb

Additional notes

Multiple PixelEncoding and Range keys in the same plist file
Note that there might be multiple instances of the PixelEncoding and Range keys in the same file, one for each output of your monitor and for different AirPlay devices. You might need to update the integer on each one to get RGB color output on all displays.

Getting RGB color only before login
There might be multiple duplicate plist files with the same name in different locations.

Make sure that you only have the main modified file in:
/Library/Preferences

Then make a backup and remove duplicate displays plist files from these locations (if any):
~/Library/Preferences
or
/Users/username/Library/Preferences
and
/Users/username/Library/Preferences/ByHost


Updates regarding macOS Monterey

USB-C to DisplayPort
From what I've seen, it seems that macOS Monterey 12.0.1 finally outputs RGB color by default on some monitors when using USB-C to DisplayPort cable on M1 Apple Silicone Macs.

You might need to make a backup and delete these 2 files:
/Library/Preferences/com.apple.windowserver.displays.plist
and
/Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist

Restart your Mac and it should properly output RGB color on the monitor on the next boot.

HDMI to HDMI
The situation with HDMI seems to got a bit more complicated. Now the whole section for the LinkDescription might be missing from the com.apple.windowserver.displays.plist on a clean install and doesn't seem to be recreated when rotating the screen either.

Luckily, the solution still works, but you might need to manually add this whole section in the displays plist file:

					<key>LinkDescription</key>
					<dict>
						<key>BitDepth</key>
						<integer>8</integer>
						<key>EOTF</key>
						<integer>0</integer>
						<key>PixelEncoding</key>
						<integer>0</integer>
						<key>Range</key>
						<integer>1</integer>
					</dict>



The section usually goes right under the CurrentInfo key, and it should look something like this:

pixelencoding

This should get your RGB color output working on M1 Mac mini, even when connected with HDMI to HDMI cable.

Multiple monitors when one them is using HDMI to HDMI
Additional thanks goes to @somogyi-ede who tested this with multiple monitors and confirmed that the LinkDescription key needs to be added under each monitor instance in order for all of them to receive RGB color output. Link to the comment

Updates regarding macOS 13 Ventura Beta

USB-C to DisplayPort
The macOS 13 Ventura beta seems to outputs RGB color by default on some monitors when using USB-C to DisplayPort cable on M1 Apple Silicone Macs.

You might need to make a backup and delete these 2 files:
/Library/Preferences/com.apple.windowserver.displays.plist
and
/Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist

Restart your Mac and it should properly output RGB color on the monitor on the next boot.

HDMI to HDMI
Similar as macOS Monterey, the situation with HDMI on macOS Venturs seems a bit more complicated. Usually the whole section for the LinkDescription might be missing from the com.apple.windowserver.displays.plist on a clean install and doesn't seem to be recreated when rotating the screen either.

Luckily, the solution still works, and you still need to manually add this whole section in the displays plist file:

					<key>LinkDescription</key>
					<dict>
						<key>BitDepth</key>
						<integer>8</integer>
						<key>EOTF</key>
						<integer>0</integer>
						<key>PixelEncoding</key>
						<integer>0</integer>
						<key>Range</key>
						<integer>1</integer>
					</dict>



The section usually goes right under the CurrentInfo key, and it should look something like this:

pixelencoding

This should get your RGB color output working on M1 Mac mini, even when connected with HDMI to HDMI cable.

If you have any additional questions, please feel free to contact me.

@GetVladimir
Copy link
Author

GetVladimir commented Feb 19, 2022

@Ezzahhh That is awesome! Thank you so much for the update and I'm glad to hear that the USB-C to DisplayPort cable solved most of the issues.

There is one more thing you can check regarding the monitor being detected as a television, but it's a bit of a long shot:

  • If you have access to your Intel Mac, connect your monitor with the same USB-C to DisplayPort cable that you use now. Make sure that you also use the exact same port on the monitor as well (in case you have multiple ports)
  • Run the EDID patch script for x86 Intel Macs from either here (https://gist.github.com/ejdyksen/8302862) or here (https://gist.github.com/adaugherity/7435890) and generate an Override file
  • Now edit the Override file and add this key in it:
<key>DisplayIsTV</key>
<false/>

so that the full override plist looks something like this example plist:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>DisplayProductName</key>
  <string>DELL U2415 (RGB)</string>
  <key>DisplayIsTV</key>
  <false/>
  <key>IODisplayEDID</key>
  <data>AP///////wAQrLigTEY0MCUYAQSlNCB4IgSVqVVNnSYQUFSlSwBxT4GAqUDR
wNEAAQEBAQEBKDyAoHCwI0AwIDYABkQhAAAeAAAA/wAwOERYRDQ5NzA0RkwK
AAAA/ABERUxMIFUyNDE1CiAgAAAA/QAxPR5TEQAKICAgICAgAGo=
</data>
  <key>DisplayVendorID</key>
  <integer>4268</integer>
  <key>DisplayProductID</key>
  <integer>41144</integer>
</dict>
</plist>
  • Finally, move the new override file to the appropriate /Library/Displays/Contents/Resources/Overrides/YourVendorID-xxxx/YourProductID-xxxx/ on your M1 Mac.

After the reboot, you should see the name of your monitor changed (if successful) in System Preferences > Displays and there is a chance that it will not be detected as a TV anymore.

@domscr2
Copy link

domscr2 commented Feb 24, 2022

Hi @GetVladimir, thank you so much for your efforts. While this has improved the blacks on my external monitor, I'm not sure the issue is 100% resolved...

My personal laptop is a M1 13-inch MacBook Pro
My work laptop is a Windows laptop
They're both plugged into the monitor via USB-C, and a Kensington SD4800P dock provides a HDMI output to my BenQ EW2750

  1. On my monitor OSD, the option to change the HDMI RGB PC Range is still greyed out, suggesting it's still outputting YUV
  2. If I plug the monitor into my Windows work laptop, which is using RGB 16-235 (Intel doesn't allow override), and plug back into the Mac, the issue occurs again until next reboot of the Mac.

Any thoughts or suggestions? Thanks in advance

@GetVladimir
Copy link
Author

GetVladimir commented Feb 24, 2022

@domscr2 thank you for your question.

Could you let me know what Color Profiles in System Preferences > Displays show up on top for your when you have the M1 MacBook Pro connected to the monitor?

Also, I've checked the dock that you mentioned (https://www.kensington.com/en-ca/p/products/connectivity/laptop-docks-usb-accessories/sd4800p-usb-c-10gbps-scalable-video-docking-station-60w-pd-dpdphdmi-windows/) and it seems to have a single HDMI port and 2 DisplayPorts. I would normally suggest that you try connecting from the DisplayPorts directly to the Monitor instead, but I see that the BenQ EW2750 only has HDMI input.

The workaround that has some chance to work would be (if possible) to use an USB-C to HDMI cable and connect your MacBook directly to the BenQ, without any hubs/docs/adapters in the middle. Then you will need to modify the plist again as you did before, but it should work even after restart.

@domscr2
Copy link

domscr2 commented Feb 24, 2022

Hi @GetVladimir, thank you so much for looking into it quickly and offering suggestions. I had a hunch and tried something that I haven't seen mentioned anywhere online:

In my /Users/[user]/Library/Preferences/ByHost folder - there was a com.apple.windowserver.displays.plist file, but it had some kind of GUID in the name, so the file name was actually com.apple.windowserver.displays.[letters and numbers].plist. Performing the same change in that plist file has completely resolved the behaviour I was experiencing.

Now, on my monitor OSD, the option to change the HDMI RGB PC Range is no longer greyed out, and switching between my work laptop and my Mac does not exacerbate the issue. Let's hope that the issue doesn't occur again, but at least I know exactly what to try next time.

Thanks again for your support.

@GetVladimir
Copy link
Author

GetVladimir commented Feb 24, 2022

@domscr2 Awesome! Thank you for the update and I'm glad to hear that you got it working.

Make sure to make a backup of the plist file in case you need to restore it back in the future.

Also, if you delete that plist file in ByHosts, macOS will read the settings directly from the one in /Library/Preferences/

(I don't recommend making any further changes though, as you already got it working)

@domscr2
Copy link

domscr2 commented Feb 24, 2022

@GetVladimir, have got a backup on the Desktop ready to go haha! The ByHosts file is getting automatically generated if I delete it, with the GUID I mentioned eariler, so have to perform the change on both files. Although, the ByHosts file, as mentioned online, seems to be affecting behaviour once signed in.

@GetVladimir
Copy link
Author

GetVladimir commented Feb 24, 2022

@domscr2 Yes, you are right. The Library plist file affects the settings globally, while the one in ByHosts affects the current user settings

@SergioSuarezDev
Copy link

SergioSuarezDev commented Mar 9, 2022

The case of my MacBook is a bit strange... I have 3 USB-C to HDMI adapters. One of them works perfectly (USB-C to HDMI), but the other 2 (which coincidentally also have 3 usb-3 and card reader) have a pink screen....

I have tried everything you indicate here but it is impossible to remove that "pink" or "purple" tone from the screen :(

@GetVladimir
Copy link
Author

GetVladimir commented Mar 9, 2022

@SergioSuarezDev Thank you for your comment.

I'm sorry to hear that. From what you've said, the fault is very likely with the M1 compatibility with the adapters. It also doesn't help that the M1 might assign different UUIDs every time you connect them, so it's not easy to modify the plist files to make them work.

I'm afraid that the current workaround is to either use the only adapter that works, or to use a direct USB-C to DisplayPort cable to connect your MacBook with the Monitor.

@SergioSuarezDev
Copy link

SergioSuarezDev commented Mar 9, 2022

I am using 2 screens with a DVI-HDMI connection, for the moment I will have to work only with the only adapter that works for me. But I usually work with 2 screens :(

I have read that in the case of the Macbook with M1 they would work well with this adapter using displaylink:
https://www.amazon.es/gp/product/B08R9WZKFN/

If it doesn't work either, what would be my alternative? Buy 2 new screens that do not work in RGB mode??

Thanks!!

@GetVladimir
Copy link
Author

GetVladimir commented Mar 9, 2022

@SergioSuarezDev I understand what you mean, the issue is annoying.

I don't know of anything else that will work properly with the M1 MacBook, since (officially) it supports only 1 External Monitor: https://support.apple.com/en-ie/guide/mac-help/mchl7c7ebe08/mac

@SergioSuarezDev
Copy link

SergioSuarezDev commented Mar 10, 2022

Yes, anyway my pink screen problem is working with a matrix of screens but only connecting a single hdmi adapter :(

@poenagit
Copy link

poenagit commented Mar 21, 2022

I have a MBP M1 Pro running MACOSX 12.3 and Dell S2721QS connected with HDMI to HDMI. I tried through my hub and direct plug in. Still does not switch over to RGB. I had to add the block of PixelEncoding code in manually. Is the next step to try a usb-c to displayport cable? Any other suggestions? I don't have flickering but I noticed the colors are slightly off and monitor is dimmer.

@GetVladimir
Copy link
Author

GetVladimir commented Mar 21, 2022

@poenagit thank you for your question.

If you use a dock, you might have more entries in the displays plist file than just for the external monitor. This makes it a bit difficult to find the correct one to add the PixelEncoding key to.

My suggestion would be to make a backup and delete the displays plist file in:
/Library/Preferences
and
/Users/username/Library/Preferences/ByHost

After that, shutdown the Mac, unplug the dock, and make sure that only the Monitor is connected to the Mac with either USB-C-to-DisplayPort or USB-C-to-HDMI cable.

Turn on the Mac again and repeat the procedure of adding the PixelEncoding key again (if needed) in the plist file and it should work. There should also be only a couple of UUID entries in the displays plist files now instead of many.

If it works, make a backup of the working plist file, and replace it again whenever needed (like after connecting the dock again). The Monitor usually should be connected directly to the Mac and not go through the dock in order to work properly

@ChangHyun-Yoo
Copy link

ChangHyun-Yoo commented Mar 22, 2022

I have M1 Mac mini and connected Dell U2723QE with USB-C to C and connected Dell U2720Q with HDMI,

U2723QE with C to C outputting well with RGB but U2720Q with HDMI does not output RGB, It outputs YPbPr.

I tried your solution, but both plist files in the Preference folder and ByHost folder already have a value with PixelEncoding=0, Range=1.
I changed PixelEncoding to 1, Range to 0, It doesn't work, I changed PixelEncoding to 0, Range to 1 again, it doesn't work.

There is no solution you recommend?

Thank you for your article and video.

@GetVladimir
Copy link
Author

GetVladimir commented Mar 22, 2022

@ChangHyun-Yoo thank you for your comment and for the details.

I would recommend making a backup and deleting both plist files.

After that, reboot the Mac and repeat the procedure again. It's very possible that there are more UUIDs in the same plist file that need to have the PixelEncoding key added to it.

If nothing else works, the last resort is to get an USB-C to DisplayPort cable for the U2723Q, but then both USB-C ports on the Mac mini would be in use by the Monitors.

@ChangHyun-Yoo
Copy link

ChangHyun-Yoo commented Mar 23, 2022

@GetVladimir With your recommendations, It works!! Thank you for your help.

You're my best

@GetVladimir
Copy link
Author

GetVladimir commented Mar 23, 2022

@ChangHyun-Yoo Thank you so much for your comment and I'm glad to hear that you got RGB color output working

@poenagit
Copy link

poenagit commented Mar 30, 2022

I was able to get it to work with HDMI-HDMI and then HDMI - hub

but when I unplug and plug it back in it reverts back and even with a restart.

I had to redo the plist again to get it to work

@GetVladimir
Copy link
Author

GetVladimir commented Mar 30, 2022

@poenagit thank you for the update. Glad to hear that you got it working without the hub.

You might wan to do a backup of the display plist file when it works, so that you can restore it when needed.

@Doogooder
Copy link

Doogooder commented Apr 1, 2022

Hello,
Thank you so much for the fix.
Pretty disappointing something so simple is so hard with a Mac :/
I had an interesting outcome where the changes were made but I found the login screen was RGB but once login had completed it changed back to YPbPr.

I am using a Pioneer 508XDA via HDMI.

Code FYI is:

DisplayAnyUserSets Configs CurrentInfo Depth 8 High 768 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1360 LinkDescription BitDepth 8 EOTF 0 PixelEncoding 0 Range 1 Rotation 0.0 UUID 567570E8-8F36-4C5A-9B0D-A853A5E28DC9 UnmirrorInfo Depth 8 High 768 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1360 Orientations 567570E8-8F36-4C5A-9B0D-A853A5E28DC9 0 Underscan 567570E8-8F36-4C5A-9B0D-A853A5E28DC9 1 Version 1 DisplayUUIDMappings 4B4F77C8-2A95-E78F-0F93-5A69417CA049 7C0A4999-38E9-4CD6-B79B-7DD367454923 7D070E19-D819-1E00-0F93-5A69417CA049 567570E8-8F36-4C5A-9B0D-A853A5E28DC9 9B603E2E-98E1-E840-0F93-5A69417CA049 D25EA30C-5D91-4599-B843-16A5FF6148C0

@GetVladimir
Copy link
Author

GetVladimir commented Apr 1, 2022

@Doogooder thank you for your comment and I’m glad if you found the tutorial useful.

From what you've described, it seems like you have a duplicate displays plist file in /Users/yourname/Libraries/Preferences/ByHost

Make a backup of the displays plist file there and either edit it as you did with the first, or simply delete it. After the next reboot, you should have RGB color output after login as well

@Doogooder
Copy link

Doogooder commented Apr 1, 2022

@Doogooder thank you for your comment and I’m glad if you found the tutorial useful.

From what you've described, it seems like you have a duplicate displays plist file in /Users/yourname/Libraries/Preferences/ByHost

Make a backup of the displays plist file there and either edit it as you did with the first, or simply delete it. After the next reboot, you should have RGB color output after login as well

Sorry I didn't realise Apple hide all of those duplicate files in hidden folders.
Crikey they work hard to make this stuff as difficult as possible.
Interestingly the login is YPbPr while the after login screen is RGB.
I will take it :)
The blacks are now beautiful again.
Thank you.

@GetVladimir
Copy link
Author

GetVladimir commented Apr 1, 2022

@Doogooder Awesome! Thank you for the update and I'm glad to hear that you got RGB color output working.

You might want to do a backup of the working displays plist file now, so that you can easily restore it in the future if needed, without having to edit the file again

@nvcken
Copy link

nvcken commented Apr 15, 2022

@GetVladimir
I have 2 monitor ( DELL & LG TV), I only have problem non RGB color when connect to LG TV.
So with this method, it will effect for any external monitor that I connect to MBP M1 or just only my problem monitor ?

@nvcken
Copy link

nvcken commented Apr 15, 2022

Hi @GetVladimir
I tried this already, but did not help, even more washed out than before patch, then I have to reverted back.
Could you check to see any further I can do? this is my specs

MacOS: Big Sur 11.6.5 (20G527)
MacBook Pro (13-inch, M1, 2020)
I connect to LG TV with this hub
https://www.amazon.com/HyperDrive-MacBook-Windows-Laptop-Devices/dp/B098NNLVZL
LG TV HDMI <-> Hub HDMI and Hub Thunderbolt <-> MBP Thunderbolt

@GetVladimir
Copy link
Author

GetVladimir commented Apr 15, 2022

@nvcken thank you for your comment and for the details.

First, check if you have HDR on your TV and disable it. You won't be able to use RGB and HDR at the same time.

Next, you'll need to update to at least the latest version of macOS Monterey. Big Sur is missing a lot of display properties for the M1 based Macs. Even though this is not a guarantee that it will work.

Finally, if nothing else works, it's very likely that your M1 MacBook is not fully compatible with the Hub when it comes to displays. You'll want to try with an USB-C to HDMI cable instead.

Also, please note that the M1 MacBook only supports 1 external display officially

@TheeKuZu
Copy link

TheeKuZu commented May 11, 2022

Hi @GetVladimir!

Thanks a mil!

I had to do a bunch of troubleshooting to get my monitor to output RGB.

The displays file in /ByHosts was overriding the file in the normal /Preferences files. This seems to happen if you've fiddled with something like BetterDummy.

Deleted both files in both locations, redid the tutorial and it finally worked! (HDMI to HDMI).

This is for anyone reading this thread that might not have done this!

Again, thank you so much, the display looks a ton better now!

@GetVladimir
Copy link
Author

GetVladimir commented May 11, 2022

@TheeKuZu you're very welcome! Thank you so much for your comment and I'm glad to hear that you got RGB color output working on HDMI to HDMI connection

@Vladutu
Copy link

Vladutu commented May 15, 2022

Hi @GetVladimir ,
I have an m1 chip macbook pro with monterey (12.3.1) installed and I'm connected to my external monitor (lenovo Y25f) with hdmi. I tried the python script which deletes all those files from the other locations and also manually added the "LinkDescription" section in the file from /Library/Preferences, but it doesn't change anything. In display settings I have a color profile section and the best looking is "Rec.ITU-R BT.709-5" but it still doesn't look very good. On my previous intel chip mac the script "patch-edid" worked very good from the first try. Do you have any other solution that I can try? Thank you

@GetVladimir
Copy link
Author

GetVladimir commented May 15, 2022

Hi @Vladutu and thank you for your comment.

Can you tell me more about the connection? Is it an USB-C to HDMI cable or does it go through a hub/adapter?

@Vladutu
Copy link

Vladutu commented May 15, 2022

@GetVladimir I tried with both direct connection (hdmi-hdmi)from the monitor to the laptop (laptop has a hdmi port) and also through an adapter. With the adapter is HDMI to usb-c

@GetVladimir
Copy link
Author

GetVladimir commented May 15, 2022

@Vladutu thank you for the reply.

Please try one more time with the direct cable connection. Redo the whole procedure, making sure that there are no leftover files and settings.

The issue with the hubs/adapters usually is that the M1 isn't fully compatible with them and assigns them a different UUID every time you connect them, which makes is difficult to change the correct settings in the plist file

@Vladutu
Copy link

Vladutu commented May 15, 2022

Hi @GetVladimir,
I used direct cable connected and I ran the python script again. It gave me the following lines:

2022-05-15 18:12:18    INFO] Fixing /Library/Preferences/com.apple.windowserver.displays.plist
[2022-05-15 18:12:18    INFO] Skipping `/Library/Preferences/com.apple.windowserver.displays.plist`. No `LinkDescription` found in display config. Try rotating your display from Display settings to generate the field in the plist.

After this I manually put the LinkDescription part into the file and ran the python script again. This time I got:

[2022-05-15 18:18:19    INFO] Fixing /Library/Preferences/com.apple.windowserver.displays.plist
[2022-05-15 18:18:19    INFO] Fixing config for Display 37D8832A-2D66-02CA-B9F7-8F30A301B230
[2022-05-15 18:18:19    INFO] Did not fix Display 37D8832A-2D66-02CA-B9F7-8F30A301B230. Values for PixelEncoding and Range not as expected.
[2022-05-15 18:18:19    INFO] Fixing config for Display 1E01BA94-FC77-41C2-A2F1-11960BFF4C97
[2022-05-15 18:18:19    INFO] Fixed Display 1E01BA94-FC77-41C2-A2F1-11960BFF4C97
[2022-05-15 18:18:19    INFO] Resulting XML output for `/Library/Preferences/com.apple.windowserver.displays.plist`:
<plist version="1.0">
<dict>
	<key>DisplayAnyUserSets</key>
	<dict>
		<key>Configs</key>
		<array>
			<array>
				<dict>
					<key>CurrentInfo</key>
					<dict>
						<key>Depth</key>
						<integer>8</integer>
						<key>High</key>
						<real>982</real>
						<key>Hz</key>
						<real>120</real>
						<key>IsLink</key>
						<false />
						<key>OriginX</key>
						<real>1920</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>2</real>
						<key>Wide</key>
						<real>1512</real>
					</dict>
					<key>LinkDescription</key>
					<dict>
						<key>BitDepth</key>
						<integer>8</integer>
						<key>EOTF</key>
						<integer>0</integer>
						<key>PixelEncoding</key>
						<integer>0</integer>
						<key>Range</key>
						<integer>1</integer>
					</dict>
					<key>Rotation</key>
					<real>0.0</real>
					<key>UUID</key>
					<string>37D8832A-2D66-02CA-B9F7-8F30A301B230</string>
					<key>UnmirrorInfo</key>
					<dict>
						<key>Depth</key>
						<integer>8</integer>
						<key>High</key>
						<real>982</real>
						<key>Hz</key>
						<real>120</real>
						<key>IsLink</key>
						<false />
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>2</real>
						<key>Wide</key>
						<real>1512</real>
					</dict>
				</dict>
				<dict>
					<key>CurrentInfo</key>
					<dict>
						<key>Depth</key>
						<integer>7</integer>
						<key>High</key>
						<real>1080</real>
						<key>Hz</key>
						<real>144</real>
						<key>IsLink</key>
						<false />
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>1</real>
						<key>Wide</key>
						<real>1920</real>
					</dict>
					<key>LinkDescription</key>
					<dict>
						<key>BitDepth</key>
						<integer>10</integer>
						<key>EOTF</key>
						<integer>0</integer>
						<key>PixelEncoding</key>
						<integer>0</integer>
						<key>Range</key>
						<integer>1</integer>
					</dict>
					<key>Rotation</key>
					<real>0.0</real>
					<key>UUID</key>
					<string>1E01BA94-FC77-41C2-A2F1-11960BFF4C97</string>
					<key>UnmirrorInfo</key>
					<dict>
						<key>Depth</key>
						<integer>7</integer>
						<key>High</key>
						<real>1080</real>
						<key>Hz</key>
						<real>144</real>
						<key>IsLink</key>
						<false />
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>1</real>
						<key>Wide</key>
						<real>1920</real>
					</dict>
				</dict>
			</array>
		</array>
		<key>Orientations</key>
		<dict>
			<key>1E01BA94-FC77-41C2-A2F1-11960BFF4C97</key>
			<integer>0</integer>
			<key>37D8832A-2D66-02CA-B9F7-8F30A301B230</key>
			<integer>0</integer>
		</dict>
		<key>Underscan</key>
		<dict>
			<key>1E01BA94-FC77-41C2-A2F1-11960BFF4C97</key>
			<real>1</real>
			<key>37D8832A-2D66-02CA-B9F7-8F30A301B230</key>
			<real>1</real>
		</dict>
		<key>Version</key>
		<integer>1</integer>
	</dict>
	<key>DisplayUUIDMappings</key>
	<dict>
		<key>9B603E2E-98E1-E840-0F93-5A69417CA049</key>
		<string>BE1DC10F-0A44-49DE-B3B5-822E92C8EACF</string>
		<key>E3395906-27BF-11DF-0F93-5A69417CA049</key>
		<string>1E01BA94-FC77-41C2-A2F1-11960BFF4C97</string>
	</dict>
</dict>
</plist>

After restart the current profile called (Y25f) was deleted and I had selected by default Rec.ITU-R BT.709-5.
But, it seems to work somehow as the color is pretty good now.

My monitor is connected with a display port to my gaming pc and i switched between hdmi and display port and the colors look pretty similar. I don't know what it did but it did something.

Thank you for your time and help!

@GetVladimir
Copy link
Author

GetVladimir commented May 15, 2022

@Vladutu Awesome! Thank you for the update and I'm glad to hear that you got RGB color output working.

You might want to make a backup of the working plist file now, so that you can easily restore it in the future if needed

@MrTweaks
Copy link

MrTweaks commented May 19, 2022

@GetVladimir - Hi, First of all - Thank you for this valuable topic - you rock and are awesome
Having said that, I have a different issue (not the RGB coloring) and I would appreciate any insight you might have on this issue - I'll explain; I have a M1 macbook Air and I use a Dell 6000 docking station w/ 3x Dell U3011
The 2 U3011's connected to DP work fine, but the HDMI one is limited to 1900 x 1200 in resolution - which is annoying but better than nothing.

However - When mirroring (either 3x the same) the monitor displays the 2560x1600 resolution. Not as sharp, but it would work fine for me, for now. It gets even better, when using BetterDummy, I can mirror the 2 monitors on either side - and keep the central monitor separate)

i would like to have THAT mode - whether it's 1920x1200 displaying 2560x1600 or otherwise - as an extended monitor.
Any ideas on how to approach this?

@MrTweaks
Copy link

MrTweaks commented May 19, 2022

A small addition - I can locate the U3011 in Ioregexplorer, attached to the D6000 - coming from bundle com.apple.driver.AppleMobileDispH13G-DCP

I can also confirm I can see height/width there - would this imply I have to override them in this kext here?

@GetVladimir
Copy link
Author

GetVladimir commented May 19, 2022

@MrTweaks thank you so much for your comment and for the details!

It's actually pretty impressive that you got it to work with 3 screens at all, since the MacBook Air M1 is limited to a maximum of 1 external display with up to 6K resolution at 60Hz (at least according to its official info): https://www.apple.com/macbook-air/specs/

I'm not sure what exactly is the issue, but it seems it also might be the bandwidth of the Dell 6000 dock: https://www.dell.com/en-us/shop/dell-universal-dock-d6000s/apd/452-bdtm/pc-accessories

According to its specs, it can support either:

  • 5120 x 2880 - 60 Hz (Single Display)
  • 3840 x 2160@60Hz, 3840 x 2160@60Hz - 60 Hz (Dual Display)
  • 3840 x 2160@60Hz, 3840 x 2160@60Hz, 3840 x 2160@30Hz (Triple Display)

While mirroring sometimes does get some interesting results, I'm not sure if there is a way to overcome the limit of the dock (or the M1 Air) when using native resolution.

Perhaps you can try connecting the 3rd monitor directly to the MacBook Air M1 with the USB-C to DisplayPort cable and see if any new configurations show up? It's not something that I would recommend, this is only if you'd like to test it for yourself

@MrTweaks
Copy link

MrTweaks commented May 21, 2022

@GetVladimir
Thanks, well - Its not really my achievement; however, I have been running these screens for ages now, and encountered lots of 'challenges' during my hackintosh days - One really needs to know what you're dealing with, so in that sense - I can do some pretty good pre-buy research, if you will ;-)

As for your answer, thank you - It got me thinking differently; i think that de specs on the dell site are 'maxed specifications' as per maximum res. per 1/2/3 screen(s) - However, in terms of datatransfer/bandwidth - there are more configurations possible, albeit (I suspect)not going beyond bandwidth limits. My screens do 2560x1600@60 max. compared tot the max, it should be possible to run them on max. What I see now, and have misconfigured/not given any thought yet, is the @30hz.... perhaps this is the real limitation/incompatibility...
I'm gonna check If I can work w/ that - Thanks again;-)

@GetVladimir
Copy link
Author

GetVladimir commented May 21, 2022

@MrTweaks not a problem, glad if it helps even a bit :) Thank you for the comment

@kikikkstudio
Copy link

kikikkstudio commented May 24, 2022

Thanks for the solution!
and is there any way to fix the problem of recognizing the monitor as a TV without an Intel Mac?

@GetVladimir
Copy link
Author

GetVladimir commented May 24, 2022

@kikikkstudio thank you for your comment.

You can try creating a display override file and use this option:

<key>DisplayIsTV</key>
<false/>

so that the full override plist looks something like this example plist:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>DisplayProductName</key>
  <string>DELL U2415 (RGB)</string>
  <key>DisplayIsTV</key>
  <false/>
  <key>IODisplayEDID</key>
  <data>AP///////wAQrLigTEY0MCUYAQSlNCB4IgSVqVVNnSYQUFSlSwBxT4GAqUDR
wNEAAQEBAQEBKDyAoHCwI0AwIDYABkQhAAAeAAAA/wAwOERYRDQ5NzA0RkwK
AAAA/ABERUxMIFUyNDE1CiAgAAAA/QAxPR5TEQAKICAgICAgAGo=
</data>
  <key>DisplayVendorID</key>
  <integer>4268</integer>
  <key>DisplayProductID</key>
  <integer>41144</integer>
</dict>
</plist>

Here are more details on how to create the display override file:
https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8?permalink_comment_id=4070896#gistcomment-4070896

And here is workaround script from @mfaughn that might help you to create the override file directly on a M1 Mac:
https://gist.github.com/mfaughn/57d95a8c06620a88fd2e651167a2c2ed

@GetVladimir
Copy link
Author

GetVladimir commented May 24, 2022

@kikikkstudio Not a problem, glad if it helps.

Yes, you can try the workaround script to create the override file directly on M1 Mac here (without the need of x86 Mac):
https://gist.github.com/mfaughn/57d95a8c06620a88fd2e651167a2c2ed

@kikikkstudio
Copy link

kikikkstudio commented May 24, 2022

thank you! i try it

@kikikkstudio
Copy link

kikikkstudio commented May 24, 2022

i get error like this

can't convert nil into Integer (TypeError)

from /Library/Displays/Contents/Resources/Overrides/edid_rename_display.rb:50:in block in

from /Library/Displays/Contents/Resources/Overrides/edid_rename_display.rb:13:in. each

from /Library/Displays/Contents/Resources/Overrides/edid_rename_display.rb:13:in each_with_index

from /Library/Displays/Contents/Resources/Overrides/edid_rename_display.rb:13:in

So I tried to manually create folders and files by reading the script and finding the vendor id and product id.
But I don't know where to find 'IODisplayEDID' because of my weak scripting skills.

@GetVladimir
Copy link
Author

GetVladimir commented May 24, 2022

@kikikkstudio ok, you can manually do this instead:

  1. Open Terminal
  2. Type ioreg -l -w0 -d0 -r -c AppleCLCD2
  3. Press CMD + F
  4. Type DisplayAttributes and press return
  5. Look for the values for LegacyManufacturerID and ProductID
  6. Use an online calculator to convert the values to hexadecimals (for example, you can use this link)
  7. Create the file and folder for the display overrides based on those values

For example:
If LegacyManufacturerID=4268, then the hex is 10ac
If ProductID=41144, then the hex is a0b8

So the name and location of the Display Override file should be:
/Library/Displays/Contents/Resources/Overrides/DisplayVendorID-10ac/DisplayProductID-a0b8

Inside that file called DisplayProductID-a0b8, you need the decimal values for VendorID (LegacyManufacturerID) and ProductID. So, for example, it should look something like this:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>DisplayProductName</key>
  <string>DELL U2415 (RGB)</string>
  <key>DisplayIsTV</key>
  <false/>
  <key>DisplayVendorID</key>
  <integer>4268</integer>
  <key>DisplayProductID</key>
  <integer>41144</integer>
</dict>
</plist>

Make sure to do a backup beforehand, and please note that you're doing any changes at your own risk.

@kikikkstudio
Copy link

kikikkstudio commented May 25, 2022

In your way, I have succeeded. Thank you very much!

@GetVladimir
Copy link
Author

GetVladimir commented May 25, 2022

@kikikkstudio you're very welcome! Thank you for the reply and I'm glad to hear that you got the display override working

@rohit267
Copy link

rohit267 commented Jun 7, 2022

@GetVladimir I tried the above steps, HDMI to HDMI, Mac Pro m1. Doesn't seem to be working. I have 27ml600s which is 1920 x 1080.

I added the xml at 8 places but after restart, only five places have that xml.

Another question: Should I perform it while the monitor is connected or disconnected ?

@TheeKuZu
Copy link

TheeKuZu commented Jun 7, 2022

Hi @GetVladimir!

Thanks a mil!

I had to do a bunch of troubleshooting to get my monitor to output RGB.

The displays file in /ByHosts was overriding the file in the normal /Preferences files. This seems to happen if you've fiddled with something like BetterDummy.

Deleted both files in both locations, redid the tutorial and it finally worked! (HDMI to HDMI).

This is for anyone reading this thread that might not have done this!

Again, thank you so much, the display looks a ton better now!

@rohit267 try what I mentioned here perhaps?

@rohit267
Copy link

rohit267 commented Jun 7, 2022

TheeKuZu

I don't think I have the /ByHosts
Screenshot 2022-06-07 at 5 09 41 PM

@GetVladimir
Copy link
Author

GetVladimir commented Jun 7, 2022

@rohit267 thank you for your comment. Please try in /Users/username/Library/Preferences/ByHost instead.

@TheeKuZu thank you so much for the suggestion and for helping. I think that might be the correct solution in this case

@TheeKuZu
Copy link

TheeKuZu commented Jun 7, 2022

@rohit267 it's under /users/YOURUSERNAME/Library/preferences/byhosts @GetVladimir mentioned it in his additional notes section.

I was having the same problem. So first, I deleted the same file found in "ByHosts" you can simply use the search and type in "display" should show a single file in that folder. Then delete that. Then in the normal /Library/Preferences - make the changes he mentions in his video. In my case the entire "LinkDescription" section was missing and I had to add it manually.

@rohit267
Copy link

rohit267 commented Jun 9, 2022

@rohit267 it's under /users/YOURUSERNAME/Library/preferences/byhosts @GetVladimir mentioned it in his additional notes section.

I was having the same problem. So first, I deleted the same file found in "ByHosts" you can simply use the search and type in "display" should show a single file in that folder. Then delete that. Then in the normal /Library/Preferences - make the changes he mentions in his video. In my case the entire "LinkDescription" section was missing and I had to add it manually.

Tried everything. None worked. Used betterDummy to reduce the resolution to 1504*846. Feels good now.

@april
Copy link

april commented Jun 9, 2022

This worked great for me. It's so dumb -- my Dell U2720Q worked great, but my U2720QM didn't.

Same exact monitor, same exact firmware, one came up as RGB and the other came up as YPbPr.

@GetVladimir
Copy link
Author

GetVladimir commented Jun 9, 2022

@april Thank you so much for your comment and I'm glad to hear that you got RGB color output working on both monitors

@Averyy
Copy link

Averyy commented Jun 10, 2022

@rohit267 thank you for your comment. Please try in /Users/username/Library/Preferences/ByHost instead.

Thank you so much, this has been driving me nuts.

I was trying everything and could not get it working despite following all steps. Then I saw this comment and after deleting the display file in there then the overrides finally applied and I was able to get it output in RGB.

@GetVladimir
Copy link
Author

GetVladimir commented Jun 10, 2022

@Averyy Awesome! Thank you so much for the comment and I'm glad that you got RGB color output working

@eramdam
Copy link

eramdam commented Jun 16, 2022

Thanks for this! I'm trying to apply it but my situation is a bit weird because my two displays (Dell S2722DC) end up in YCbCr after my M1 Pro MBP wakes up from sleep and when they're connected to my CalDigit USB-C hub with USB-C cables. Would the fix apply to my situation? If so, which one should I follow?
I'm trying to follow the solution that adds the LinkDescription section in the plist file but there are a lot of display sections in there and I'm having trouble telling which ones are actually used or not 😅

@TheeKuZu
Copy link

TheeKuZu commented Jun 16, 2022

@eramdam So the exact process I followed is the following, after unplugging the displays and plugging them back in, the RGB profile got set back to YCbCr.

So:

  1. Delete both files in the Library/Preferences and /users/YOURUSERNAME/Library/preferences/byhosts folder. Restart.
  2. There will be a new file in Library/preferences, in my case it was empty, so I followed what @GetVladimir's video said and did the rotation.
  3. If your file does not have the LinkDescription section - what I did is to add them to ALL of the external monitor's sections where it started with , however, of course not to the MacBooks display. For some odd reason, I also have a lot of them, even with a clean file.
  4. Restarted and bam, it got fixed.

Hope this helps!

@eramdam
Copy link

eramdam commented Jun 16, 2022

@eramdam So the exact process I followed is the following, after unplugging the displays and plugging them back in, the RGB profile got set back to YCbCr.

So:

1. Delete both files in the Library/Preferences and /users/YOURUSERNAME/Library/preferences/byhosts folder. Restart.

2. There will be a new file in Library/preferences, in my case it was empty, so I followed what @GetVladimir's video said and did the rotation.

3. If your file does not have the LinkDescription section - what I did is to add them to ALL of the external monitor's sections where it started with , however, of course not to the MacBooks display. For some odd reason, I also have a lot of them, even with a clean file.

4. Restarted and bam, it got fixed.

Hope this helps!

Thanks! It seems to have worked, I'll be sure next time I leave my Macbook asleep and wake it up hours later 👍

@GetVladimir
Copy link
Author

GetVladimir commented Jun 20, 2022

How to enable HiDPI on M1 based Macs on any resolution

I have some interesting news: I found a solution to enable HiDPI on M1 based Macs on any resolution, even on 1080p screens, without the need to use mirroring or other workarounds.

Here is an example of HiDPI running on a Dell U2415 monitor that only supports a maximum resolution of 1920x1200:
1200p HiDPI

What you need to do is to edit the com.apple.windowserver.displays.plist file located in
/Library/Preferences/com.apple.windowserver.displays.plist

and change the key <key>Scale</key> to have a value of 2.

This is an example of how the section in the displays plist file should look like after the change:

					<key>CurrentInfo</key>
					<dict>
						<key>Depth</key>
						<integer>8</integer>
						<key>High</key>
						<real>1200</real>
						<key>Hz</key>
						<real>60</real>
						<key>IsLink</key>
						<false/>
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>2</real>
						<key>Wide</key>
						<real>1920</real>
					</dict>

Make sure that you change only the Scale key for the monitor that you need, and nothing else.

You can follow the step-by-step video tutorial on how to make the changes in the displays plist file here:
https://www.youtube.com/watch?v=Z1EqH3fd0V4

After that, restart your Mac and you should get HiDPI and noticeably more crisp and anti-aliased text, and the high resolution macOS icons.

An easy way to confirm that the HiDPI changes work is by looking at the Safari icon on the dock. If the HiDPI version of the icon is enabled, it will have a lot more sections in the compass than the low resolution icon. It should look something like this:
Safari HiDPI

Please note that while this might make the image look better even on 1080p screens, they will still be running at 1080p resolution, so the change might not be as drastic as running on a higher resolution screen.

If you have any questions about the procedure, please feel free to contact me or comment below.

@keegandent
Copy link

keegandent commented Jun 25, 2022

For anybody having issues with the Dell S2721DGF or similar monitors, the procedure I finally got working was extremely tiresome, but I think all of the following is necessary. Make sure you keep "Smart HDR" set to "Desktop" in the OSD settings.

  1. Backup your /Library/Preferences/com.apple.windowserver.displays.plist and ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist as advised
  2. Delete the original copies in that folder and restart.
  3. Edit your display preferences to correctly align and manipulate displays how you want. This is the time to make any ordinary changes you want to keep.
  4. Enable High Dynamic Range for the S2721DGF. Everything will look washed out and terrible, but ignore it. At this point the display should still show as YPbPr on the OSD.
  5. Restart.
  6. At this point, follow the .plist editing instructions to change or add the LinkDescription setting. Also, if you see any setting for the S2721DGF where Depth is set to 7, change it to 8. It won't surprise me if it's not required, but I don't personally feel like testing this whole process again without it, and it doesn't hurt anything.
  7. Replace both plists with your edited & compiled copies and restart for hopefully the final time.
  8. When you log in again, the OSD should say RGB. Congratulate yourself on not doing a violence to computer hardware.

@GetVladimir
Copy link
Author

GetVladimir commented Jun 26, 2022

@keegandent Thank you so much for the detailed steps and I'm glad to hear that you got RGB color output working

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