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

@dangh has created an alernative script for fishshell.
You can find more info about it here: https://github.com/dangh/force-rgb.fish

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


Please note that you'll need to have administrator privileges in order to modify the file in /Library/Preferences. Thanks goes to @keegandent and @StrategicalIT for pointing this out.

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

@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

@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

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

@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

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

@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

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

@poenagit
Copy link

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

@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

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

You're my best

@GetVladimir
Copy link
Author

@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

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

@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

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 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

Copy link

ghost 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

@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

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

@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

@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

@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

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

@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

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

@kikikkstudio
Copy link

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

@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

@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

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

@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

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

@GetVladimir
Copy link
Author

@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 ?

Copy link

ghost 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

@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

Copy link

ghost 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

@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

@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 😅

Copy link

ghost 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

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

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

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

@Hr46ph
Copy link

Hr46ph commented Jul 7, 2022

Hello, I tried your guide several times on my Macbook Pro M1 with Montery. I use its HDMI output to an Iiyama G-Master ultrawide but it doesn't seem to do anything? Nothing changes visually. The image does look grainy and washed out. Also, some light gray shades look yellowish. Weird thing also is that when I configure the hdmi input range on the monitor to 'limited' instead of 'full' it acutally looks a little better. I'm not sure what the problem is but looks horrible and I am really hoping there is a fix. Can you help? Thanks!

@keegandent
Copy link

@Hr46ph Can you try (backing up and then) deleting the two *.plist files and restarting to reset your display settings to factory? Then make sure you disable HDR for that monitor.

@StrategicalIT
Copy link

Hi @GetVladimir thanks for all your amazing work on this. I'm trying to get this working on my setup but I have a question please:
M1 Mac Mini (MacOS 12.3.1) HDMI -> HDMI using a Dell U4320Q.

My problem is I have a basically blank windowserver.display.plist file, even after trying the rotation trick.

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>DisplayUUIDMappings</key>
	<dict>
		<key>C6509A39-06DF-B92D-0F93-5A69417CA049</key>
		<string>7F878A30-4357-4DFD-8BF0-1E5CF9BC123A</string>
	</dict>
</dict>
</plist>

So from your notes I've read about having to manually add the LinkDescription, but given I don't even have a CurrentInfo section I don't really know were/how to add this.

Any advice appreciated. Cheers :-)

@keegandent
Copy link

@StrategicalIT I had a issues with that file not getting updated from settings changed in System Preferences, and the solution was usually to just do a reboot.

@GetVladimir
Copy link
Author

@StrategicalIT Thank you so much for your comment!

Yes, if the file doesn't get generated right away, it's best to try a reboot as @keegandent suggested.

If that doesn't work, you can try to AirPlay to another device (like an Apple TV) or add an iPad as a second screen (Sidecar). This should generate the file.

If nothing else works, you can test the example plist file and replace the resolution, refresh and placeholder UUIDs with your own (Fully at your own risk, I don't recommend using this):

<?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">
<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>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>1</real>
						<key>Wide</key>
						<real>1920</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>0283FB79-6CDA-45AC-9193-C57F848688E5</string>
					<key>UnmirrorInfo</key>
					<dict>
						<key>Depth</key>
						<integer>4</integer>
						<key>High</key>
						<real>1</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>1</real>
						<key>Wide</key>
						<real>1</real>
					</dict>
				</dict>
			</array>
		</array>
		<key>Orientations</key>
		<dict>
			<key>0283FB79-6CDA-45AC-9193-C57F848688E5</key>
			<integer>0</integer>
		</dict>
		<key>Underscan</key>
		<dict>
			<key>0283FB79-6CDA-45AC-9193-C57F848688E5</key>
			<real>1</real>
		</dict>
		<key>Version</key>
		<integer>1</integer>
	</dict>
	<key>DisplayUUIDMappings</key>
	<dict>
		<key>975F020A-2B06-A110-0F93-5A69417CA049</key>
		<string>0283FB79-6CDA-45AC-9193-C57F848688E5</string>
	</dict>
</dict>
</plist>

That being said, there was an issue with certain older macOS versions and generating the display files. You might want to update to macOS 12.4 or 12.5 if you haven't done that already.

@keegandent Thank you so much for the reply and for the useful suggestions! I appreciate them a lot

@StrategicalIT
Copy link

@keegandent and @GetVladimir thank you both so much for you fast response. I had tried a reboot, but I hadn't done an MacOS update, so updating to 12.4 now and will try again. Cheers :-)

@GetVladimir
Copy link
Author

@StrategicalIT Awesome! Let us know how it goes.

@StrategicalIT
Copy link

@StrategicalIT Awesome! Let us know how it goes.

SUCCESS :-)

So post update (MacOS 12.4) and reboot I tried the rotate trick and sidecar (mirror) to my iPad (via USB) and neither had the desired result of adding info to the windowserver.display.plist file.

At this point I wondered if it might be a user/permission type problem... the user account I use on my Mac has no admin privledges, so I logged out and logged in with my admin account, did the rotation trick and success, fully populated windowserver.display.plist file.

I copied the new plist file to a shared folder were my standard user could access it, logged out admin and login as standard user.

Run through the steps above including having to manually add the LinkDescription section (as per HDMI -> HDMI notes) and I now have RGB colour space.

Thanks again for all your help @GetVladimir & @keegandent

@keegandent
Copy link

@GetVladimir Could you add a note to the gist saying that admin is required? I think for those not used to *nix systems it might not be obvious.

@GetVladimir
Copy link
Author

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

@GetVladimir
Copy link
Author

GetVladimir commented Jul 20, 2022

@keegandent Thank you for pointing this out! Good suggestion, I've added it to the gist under Additional Notes (with credit, hope that is ok)

@StrategicalIT
Copy link

@keegandent Thank you for pointing this out! Good suggestion, I've added it to the gist under Additional Notes (with credit, hope that is ok)

No problem. Glad I was able to help.

@dangh
Copy link

dangh commented Jul 21, 2022

If anyone use fishshell, I have a script to patch the plist files here https://github.com/dangh/force-rgb.fish

@GetVladimir
Copy link
Author

@dangh Nice work! Thank you for creating and for sharing the script.

I've added it to the Apps based on this method section in this gist with a link to your profile.

I've looked over the code, but I'm not sure what happens when there is a plist file in /Library/Preferences/, but no file found in ~/Library/Preferences/ByHost/. Does it skip the second one and continues?

@dangh
Copy link

dangh commented Jul 21, 2022

@GetVladimir yes it will proceed with existing files only.

@n1trousx
Copy link

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?

This worked for me on my M1 Pro 16". Thank you so much!!!

@aurimasniekis
Copy link

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?

This worked for me on my M1 Pro 16". Thank you so much!!!

Did same just now, with all the possible tips here, but I can't get any of the monitors to go into RGB mode on M1 Pro 16" :(

@dangh
Copy link

dangh commented Aug 10, 2022

@aurimasniekis did you check the plist files after reboot? For me after patching the files using script, I had to copy the file to desktop, and copy it back for macOS to stop overriding my changes. Then I have to log out, then shutdown for it to work. A normal restart doesn't do it for me.

@aurimasniekis
Copy link

@dangh I have checked after reboot, and nothing has changed, but I haven't tried logout and then restart

@aurimasniekis
Copy link

aurimasniekis commented Aug 10, 2022

Okay, the logout and reboot didn't help, but I figured it out in the end. So even changing plist file in /Library/Preferences which after reboot did nothing (even with deleted all window files), I managed to get it work with trying to edit also the ~/Library/Preferences/ByHost file and it worked

EDIT: I know now the reason it didn't work, the RGB only works with Native resolution enabled (Most space). Tried all other scalings and none of them worked, only with native resolution 3840x2160

@dangh
Copy link

dangh commented Aug 10, 2022

@aurimasniekis it works for me. I delete the file in ~/Library/Preferences/ByHost, change the /Library/Preferences after I set the scale to 5k for my 4k monitor.

@okarin001
Copy link

okarin001 commented Aug 12, 2022

apparently, if you close your MBP m1's lid and use the external monitor as standalone display. The RGB thing doesn't work but the HiDPI ( Scaled 2 ) trick is working and I can finally see things properly in this external display!!

Edit: Never mind it's fixed.

What you need to do is, after macOS finishes overwriting your file when you close the lid. Add the codes shown here once again to the same file under the newly added display settings also change the scaled to 2. and it's done.

@GetVladimir
Copy link
Author

Thank you for the comment and the info, and I'm glad to hear that you got RGB color output and HiDPI working

@GetVladimir
Copy link
Author

@JO-KENNEDY thank you for your comment and the details.

From what you've posted, it seems that you have done everything correctly.

I saw that you have multiple UUID entries in the plist file, which might make things more complicated.

What I can suggest is to do a backup of the displays plist file and delete it. Then do a restart of the Mac, so that it will generate a fresh displays plist file.

Usually, direct USB-C to USB-C connections don't need any modifications to work.

If that doesn't work, you might want to check if any options are enabled on the monitor itself, like HDR or cool blue filter.

If none of that works, you might want to connect the monitor to a different device, just to make sure whether the issue is with the Mac or with the Monitor.

@GetVladimir
Copy link
Author

@JO-KENNEDY thank you for the update.

Try disabling HDR in the macOS settings and see if that helps.

Other than that, you might need to start the Mac in safe mode and see if that will make any difference: https://support.apple.com/en-ie/guide/mac-help/mh21245/mac

Still worth to try connecting the Monitor to a different device to check if it still shows the same

@GetVladimir
Copy link
Author

@JO-KENNEDY It's very likely an issue with the Monitor or the Monitor built-in settings.

If it has an HDMI or DisplaysPort, try connecting to it instead. But if not, you might need to call in the warranty

@MarkusMangold
Copy link

I have bought a Mac Mini M1. One of my monitors showed a greenish picture. It's connected via HDMI. I started the Python script and afterwards everything is allright. That's great! My question is: I am still on Big Sur, when I update to Monterey will the change still be applied or do I have to fiddle again with the terminal?

@GetVladimir
Copy link
Author

@MarkusMangold thank you for your question and I'm glad to hear that you got RGB color output working.

Usually, the changes will be persistent between updates, so you can upgrade to Monterey or Ventura.

Please note that the plist file might be overwritten if you change the resolution though.

To be safe, you can just make a backup of the displays plist file located in /Library/Preferences so that you can easily restore it in the future if needed

@MarkusMangold
Copy link

@GetVladimir; Thanks for your answer. Now I feel rather stupid ... 🙂 Of course I can just backup the plist file ... 🤦‍♂️

@GetVladimir
Copy link
Author

@MarkusMangold No worries about it :) The important thing is that you got RGB color output working.

Thank you for the reply

@bombjoke
Copy link

bombjoke commented Oct 8, 2022

My new 14in 2021 M1 MBP displays an inch black border all around my new samsung UJ59 monitor.
im using samsung recommended hdmi cable.
works great, but the diagonal is 28.5in instead of 31.5in. annoying!

with my old 2018 MBP the monitor displays perfectly, filling whole screen, with no black border.
I've tried all the Monterey preferences, and the hardware monitor menu settings. cannot find anyone else complaining about this in apple forums, samsung, or amazon reviewers.
do you have any guidance?

@GetVladimir
Copy link
Author

@bombjoke Thank you for your question.

From what you've posted, if you've already tried all the settings and the procedure above, and you're sure there is no underscan setting, your next option would be to check with an USB-C to DisplayPort cable to connect to this specific monitor

@bombjoke
Copy link

bombjoke commented Oct 9, 2022

thanks for reply! i just bought that cable and it works. my monitor doesn't not a have an over/underscan control, and it seems that the control has also been removed from Monterey. https://discussions.apple.com/thread/253364474
so, your suggestion is the best, and you helped me understand the situation rapidly as someone who has been away from display tech for over a decade.
i guess there MAY be a way to manually change the underscan value in a plist file, but you would have suggested it.

@GetVladimir
Copy link
Author

GetVladimir commented Oct 9, 2022

@bombjoke thanks for the reply! Awesome, glad to hear that you got it working properly.

The underscan slider in System Preferences only seemed to show on older versions if you have very specific resolutions selected (like 1080p) and the monitor is being detected as a TV. Getting it to show and work wasn't always reliable.

Either way, don't regret getting the USB-C cable, as it solved the issue and it might have solved other issues as well, now that it detects the monitor properly

@MarkusMangold
Copy link

@GetVladimir
Okay, now I upgraded to macOS Monterey. As I feared, my old monitor again shows the greenish and purple color. Unfortunately nothing helped. I copied the plist file and used the Python script again. But the one display doesn't show the correct colors anymore. I hope I can go somehow back to Big Sur.

@GetVladimir
Copy link
Author

@MarkusMangold thank you for the update.

You usually don't need to make any changes after the update. Just copy over your backup plist file and make sure there is no duplicate plist file in the ByHost folder

@MarkusMangold
Copy link

@GetVladimir Yes, that is what I've done (in the first place). I think I know what the problem is, it seems when booting the resolution is different than before. Anyway I could solve it, but this only works for me. Since my monitor has a DVI input I am now using a HDMI-to-DVI cable. I learned that DVI is RGB only. And what shall I say: it now works flawlessly without changing anything. 🙂
It was a bit of fiddling since there are three computers sharing the monitors but it works and I coudn't be happier. Let's hope Ventura does not change anything here.

@GetVladimir
Copy link
Author

@MarkusMangold You're right, DVI is RGB only, so that's a good solution.

Funny thing how an older technology saves the day and works better with the M1. Glad to hear that you got it working

@danielgbr
Copy link

danielgbr commented Oct 17, 2022

I'm using an external HDMI DELL display on MacOS 12.6 Macbook Pro 16" M1 and editing the plist hasn't worked. From what I understand my plist is registering multiple formats of my display. I was able to identify which display is which by maintaining orintation to 90º. Even so, I was unable to get it working. Here's how my Plist is currently:

`

DisplayAnyUserSets Configs CurrentInfo Depth 8 High 1117 Hz 120 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 2 Wide 1728 Rotation 0.0 UUID 37D8832A-2D66-02CA-B9F7-8F30A301B230 UnmirrorInfo Depth 4 High 1 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1 CurrentInfo Depth 8 High 1920 Hz 60 IsLink OriginX -1080 OriginY -1080 Rotation 0 Scale 1 Wide 1080 LinkDescription BitDepth 8 EOTF 0 PixelEncoding 0 Range 1 PixelEncoding 0.0 Range 1 Rotation 0.0 UUID 8BCACC85-9FA3-4E52-89E2-DB9743795D49 UnmirrorInfo Depth 4 High 1 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1 CurrentInfo Depth 8 High 1117 Hz 120 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 2 Wide 1728 LinkDescription BitDepth 8 EOTF 0 PixelEncoding 0 Range 1 Rotation 0.0 UUID 37D8832A-2D66-02CA-B9F7-8F30A301B230 UnmirrorInfo Depth 4 High 1 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1 CurrentInfo Depth 8 High 720 Hz 60 IsLink OriginX 1728 OriginY 0.0 Rotation 0 Scale 1 Wide 1280 Rotation 0.0 UUID 7B3CCC39-7B95-4000-B05C-BD1BAF887A8B UnmirrorInfo Depth 4 High 1 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1 CurrentInfo Depth 8 High 1117 Hz 120 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 2 Wide 1728 Rotation 0.0 UUID 37D8832A-2D66-02CA-B9F7-8F30A301B230 UnmirrorInfo Depth 8 High 1117 Hz 120 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 2 Wide 1728 CurrentInfo Depth 4 High 921 Hz 60 IsLink OriginX 1728 OriginY 0.0 Rotation 0 Scale 1 Wide 1228 Rotation 0.0 UUID 377CA1AA-88C6-4855-ACFD-C2B9D4A43BBB UnmirrorInfo Depth 4 High 921 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1228 Orientations 377CA1AA-88C6-4855-ACFD-C2B9D4A43BBB 0 37D8832A-2D66-02CA-B9F7-8F30A301B230 0 7B3CCC39-7B95-4000-B05C-BD1BAF887A8B 0 8BCACC85-9FA3-4E52-89E2-DB9743795D49 90 Underscan 377CA1AA-88C6-4855-ACFD-C2B9D4A43BBB 1 37D8832A-2D66-02CA-B9F7-8F30A301B230 1 7B3CCC39-7B95-4000-B05C-BD1BAF887A8B 1 8BCACC85-9FA3-4E52-89E2-DB9743795D49 1 Version 1 DisplayUUIDMappings 25DD932C-22DE-4153-0F93-5A69417CA049 377CA1AA-88C6-4855-ACFD-C2B9D4A43BBB 9B603E2E-98E1-E840-0F93-5A69417CA049 E5C091A1-93C3-45B5-9AC4-B3826E516DF9 B42D5FF6-E50E-D8A2-0F93-5A69417CA049 7B3CCC39-7B95-4000-B05C-BD1BAF887A8B FA8FEBE2-00C2-6D27-0F93-5A69417CA049 8BCACC85-9FA3-4E52-89E2-DB9743795D49 `

@GetVladimir
Copy link
Author

@danielgbr thank you for the comment and the details.

Can you tell me more how is the connection to the Dell monitor? Is it using a direct USB-C to HDMI cable or goes through an adapter/dock?

If it's using a direct connection, please check if there is a duplicate plist file in /Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist that needs to be edited or deleted (after making a backup)

@danielgbr
Copy link

@danielgbr thank you for the comment and the details.

Can you tell me more how is the connection to the Dell monitor? Is it using a direct USB-C to HDMI cable or goes through an adapter/dock?

If it's using a direct connection, please check if there is a duplicate plist file in /Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist that needs to be edited or deleted (after making a backup)

Im using HDMI - HDMI and the /ByHost/ doesn't exist

@GetVladimir
Copy link
Author

@danielgbr that's very interesting, thank you for the reply. I would have expected the HDMI to HDMI connection not to cause such issues.

Please make a backup and delete the display plist file. Then reboot the Mac and it should recreate a new file. Apply the procedure on it again and RGB color output should work.

Let me know if it starts to show multiple UUIDs again on the newly created plist file.

@danielgbr
Copy link

danielgbr commented Oct 17, 2022

I just deleted the plist file. When I restart it is showing multiple UUIDs again (a total of 5 UUIDs) after I rotate the extended external monitor. What should I do?

@GetVladimir
Copy link
Author

@danielgbr you can try to repeat the steps as you did before and change/add the PixelEncoding to the UUID of the external monitor.

Be careful and please know that you're doing any changes at your own risk.

@rodogd
Copy link

rodogd commented Oct 25, 2022

image

I receive the following error after converting the file back to binary1. I'm using a MacBook Air M2. Copied and pasted the whole LinkDescription section

Using mac OS Ventura

@GetVladimir
Copy link
Author

@rodogd Thank you for your comment.

Please try to edit the plist file with another plain text editor and make sure there are no missing characters.

You can use the free and open source CotEditor that is available on the Mac App Store.

@rodogd
Copy link

rodogd commented Oct 25, 2022

@GetVladimir Thanks for the quick response. It worked using CotEditor. However, when I changed the resolution to 4k, the issue came up again and I'm still not able to fix it. Will try switching back to 1080p and will let you know

@m1norgb
Copy link

m1norgb commented Oct 25, 2022

Since macOS Ventura (final version) this doesn't work any more, unfortunately. Even when LinkDescription etc. is present for all displays in all relevant com.apple.windowserver.displays.plist files, it switches back to YPbPr as soon as the MacBook comes back from standby. Only after rebooting it goes back to RGB, but on first standby and wake it's back to YPbPr. This didn't happen in Monterey. Any ideas?

@GetVladimir
Copy link
Author

@rodogd Great, glad to hear that you got it working.

If you change the resolution, it overwrites the plist file. Set the resolution that you want to use and modify the plist file afterwards.

Once you get it working, make a backup of the working plist file so that you can easily restore it

@GetVladimir
Copy link
Author

GetVladimir commented Oct 25, 2022

@m1norgb thank you for your comment. Awesome username BTW :)

I've tested it on the public release on Ventura yesterday and the procedure still works. When the Mac goes to sleep and wakes, it seems to keep the RGB color output.

Can you check if there is a duplicate plist file in the ByHosts folder? Or are there more UUID entries that need to have the LinkDescription after waking from sleep?

@m1norgb
Copy link

m1norgb commented Oct 25, 2022

@GetVladimir : There's no duplicate plist file in the ByHosts folder (I created one there manually, but that didn't help either, so I removed it again). The problem is the main /Library/Preferences/com.apple.windowserver.displays.plist file. Whenever the Macbook comes back from sleep, the LinkDescription section gets removed there and the monitor is back to YPbPr. That wasn't the case in Monterey.

I've now ordered a CalDigit Thunderbolt Dock and plan to connect the Macbook to the dock and the dock to the monitor via Displayport. Maybe this will finally solve the problem.

@GetVladimir
Copy link
Author

@m1norgb thank you for the update and for the details.

I'm not sure whether or not the dock will solve the issue. Let us know how it goes

@m1norgb
Copy link

m1norgb commented Oct 25, 2022

@GetVladimir I'll report back on the dock. If it doesn't solve the problem I'm going to send it back.

I just hope that Apple will soon fix this bug. Apparently it's been reported to Apple already more than a year ago.

I also wonder whether the Apple Studio Display does have this issue as well?

@gavingt
Copy link

gavingt commented Oct 30, 2022

I'm on Ventura. I've tried everything recommended here, deleting all possible duplicate plist files. I've also done a search that includes system files and found no other duplicates.

My Dell S3221QS monitor correctly displays in RGB mode at the MacOS login screen, but as soon as I log in it switches back to YPbPr. The /Library/Preferences/com.apple.windowserver.displays.plist file gets overwritten at login time.

EDIT: I got it working! The key was not to delete the ByHosts version of the file, but to modify it in the same way as the Library/Preferences file.

@GetVladimir
Copy link
Author

@gavingt Thank you so much for your comment and for the updated solution! I'm glad to hear that you got RGB color output working

@m1norgb
Copy link

m1norgb commented Oct 30, 2022

@gavingt : Is it still in RGB mode when you put your Mac to sleep and wake it again? That's where it switches back to YPbPr for me.

@GetVladimir
Copy link
Author

GetVladimir commented Oct 30, 2022

@gavingt Yes, for me on M1 Mac mini it keeps it RGB after going to sleep and wake up.

However, other users have reported that on MacBook and on Ventura 13.0 it might revert back to YPbPr after waking up.

A real fix need to be added in future Ventura updates.

A suggested workaround was either to prevent the Mac from going to sleep when the display goes to sleep, or to lock only the displays plist file in ByHost from editing, but I haven't tested this myself and I can't recommend it.

Locking it might cause issues, so please note that you'll be doing any changes fully at your own risk.

@gavingt
Copy link

gavingt commented Oct 30, 2022

@m1norgb Unfortunately, it did revert to YPbPr upon waking from sleep.

@xilopaint
Copy link

Hey @GetVladimir, I'm thinking about purchasing this monitor. Could you tell me if I would have any problem getting it to work on macOS Ventura?

@GetVladimir
Copy link
Author

@xilopaint thank you for your question.

From what I could find from the LC49RG90SSLXZD model number, it seems to be an Ultrawide 1440p resolution 144Hz monitor.

While this resolution might be great for gaming, it's very likely for macOS to have scaling, font clarity and refresh issues with it.

However, this is just based on the technical specifications I could find. I haven't used or tested this monitor myself, so I can't really tell how well it will work

@xilopaint
Copy link

@GetVladimir thanks for your fast reply! As you understand I would need this "Force RGB" hack to make it working on macOS Ventura and the new MacBook Pro M2?

@GetVladimir
Copy link
Author

@xilopaint you're very welcome, glad if it helps.

Yes, you will need that if you use HDMI-to-HDMI connection or a dock/adapter.

If you use an USB-C to DisplayPort cable, you might not need to make any modifications

@xilopaint
Copy link

xilopaint commented Nov 2, 2022

@GetVladimir my MacBook Pro M2 doesn't have HDMI ports, only two thunderbolt/USB-C ports so I have this hub. Will I need the hack if I use it with a HDMI cable?

@GetVladimir
Copy link
Author

@xilopaint Yes, if you use HDMI and a dock, it's very likely M2 will not recognize it properly and you'll need to force RGB color output manually

@xilopaint
Copy link

@GetVladimir the reason why I need a big monitor is for day trading (good resolution to avoid eye strain and more space for multiple charts) so before purchasing such a pricey monitor I just want to make sure I won't have any big issues with my M2 Mac that I can't fix. What's your opinion?

@GetVladimir
Copy link
Author

@xilopaint If static text is important to you, you're probably better off looking for a 4K resolution monitor that can scale properly with HiDPI.

As to which specific monitor to recommend, it would be better to ask other users or check reputable online reviews that have personal experience with them.

@xilopaint
Copy link

@GetVladimir at the moment I have two old 23" 1920 x 1080 @ 60 Hz monitors. Do you think the text will look worse in this pricey 49" 5,120 x 1,440 @ 120 Hz than it looks in my old monitors?

@GetVladimir
Copy link
Author

@xilopaint I don't really know that. Could be if it doesn't scale right. It's best to try it in store first if possible

@xilopaint
Copy link

@xilopaint I don't really know that. Could be if it doesn't scale right. It's best to try it in store first if possible

@GetVladimir unfortunately it's not possible as I found the monitor in an online promotion on Samsung website.

Could you just tell me if this 3 min video proves the monitor will scale properly on macOS and I won't have problems with the text looking?

Sorry for bugging btw, I'm just planing to take advantage of a nice promotion that ends today.

@ChangHyun-Yoo
Copy link

I'm now using Mac mini(M1) and One 4K monitor with USB-C to C and other one 4K monitor with HDMI to HDMI,
before update to Ventura, I can get RGB with HDMI to HDMI thanks to this write.

But after update to Ventura, I tried all PixelEncoding to 0 and all Range to 1 and even Preferences, ByHost.
But only YPbPr shown

How can i overcome this problem..?

@GetVladimir
Copy link
Author

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

Other users also reported similar issue on Ventura 13.0 when using 2 monitors and when waking up from sleep.

There seems to be some bugs in macOS Ventura 13.0.

If possible, please make a backup of the working plist and try it again on Ventura 13.1 when it's released

@GetVladimir
Copy link
Author

@xilopaint If you can't try it and can't find other users/reviews with that specific model, it's best not to buy it. Seems like looking for trouble. The choice and risk is ofcourse yours

@xilopaint
Copy link

@GetVladimir in my country we have a 7-day guarantee to cancel any purchase made online and return the product. I just asked if the YouTube video I linked seems to address the scaling issue you talked about. I have very poor knowledge about displays. :(

@somogyi-ede
Copy link

somogyi-ede commented Nov 15, 2022

Hello @GetVladimir, once again I confirm that the solution for macOS Ventura works, tested on two separate Dell monitors, one HDMI and one USB-C. Kudos and thank you!

@GetVladimir
Copy link
Author

@somogyi-ede Thank you so much for testing this and for the confirmation that it works on macOS Ventura too!

@jackson-57
Copy link

jackson-57 commented Nov 16, 2022

I may be wrong, but it seems as if the issue might be properly fixed in the latest macOS Ventura patch (as in, no workarounds needed). I tried plugging my laptop into a DVI monitor I've never used before and it worked immediately. I tried two more HDMI monitors (one of which I had modified the plist for) and RGB mode seemed to persist across display setting changes.

@GetVladimir
Copy link
Author

GetVladimir commented Nov 16, 2022

@jackson-57 Thank you so much for the update.

From my testing, I did a clean install on Ventura 13.0 and updated to 13.0.1, but the issue with HDMI doesn't seem to be fixed. It still requires the displays plist modifications.

That being said, DVI only seems to support RGB color, so it might be forcing the Mac to output properly to it.

When you connected the Mac again after the DVI to an HDMI monitor, you might have achieved the Dual-cable method to Force RGB Color on M1 Mac described here: https://gist.github.com/GetVladimir/ed6b7daa09b1092608fee82fd0559098

Let me know if that is the case

@jackson-57
Copy link

I'm not exactly sure what's going on, but I don't think the dual-cable workaround is at play. I only had one external display connected at a time to my MacBook Air, and whether or not I unplugged my USB-C hub between tests didn't seem to change anything.

I deleted the plist files and restarted, and tested everything again. It seems to always work on my 1080p HDMI monitor, but not on my 4K HDMI monitor. If I set the 4K monitor to 30hz, it uses RGB mode. I then retested the plist workaround (which thankfully is working again), so I imagine the reason the 4K monitor worked initially was that I had the plist modified. As for why my 1080p monitor works, I have no idea, maybe it uses DVI internally?

I know that previously, one DVI monitor I tested refused to work at all on 13.0 unless I messed with the plist, which got promptly reverted the moment the machine went to sleep. I haven't had the opportunity to test with that monitor on 13.0.1. My other DVI monitor seems to work perfectly, but I don't know if it worked on 13.0, because I never tested it. I'll have to check tomorrow whether both DVI monitors are working properly on 13.0.1.

Thank you for looking into this. It's definitely a confusing problem.

@GetVladimir
Copy link
Author

@jackson-57 thank you for the detailed explanation. That is indeed interesting.

There might be some older monitors that don't have support for YCbCr color at all, so that might also force the M1 Mac to output properly in RGB color.

Let us know if you find out what exactly is causing this, or if you need anything tested on another setup.

Either way, great find and thank you so much for sharing this.

@csergiu
Copy link

csergiu commented Nov 16, 2022

Thanks so much for this! The difference is night and day.

@GetVladimir
Copy link
Author

@csergiu you're very welcome! Thank you so much for your comment and glad to hear that you got RGB color output working

@ahuse
Copy link

ahuse commented Nov 17, 2022

I can sadly confirm, the editing of the plists worked for me (M1 MacBook Air, Dell P3421W) until i recently updated to Ventura. Now it is resetting the plist every time i plug in my USB-C cable. I have to copy the modified plist to /Library/Preferences and reboot to restore RGB.

Has anyone tested 13.1 Beta?

@GetVladimir
Copy link
Author

@ahuse thank you for your comment.

Yes, other users also reported that the plist gets deleted after waking from sleep on Ventura 13.0.1

It seems to affect Macs that don't have/don't use the built-in HDMI port.

The workaround at the moment is to create a backup of the working displays plist so that you can easily restore it, and to disable sleep (which is not ideal)

We'll see if it gets fixed in the next macOS update

@somogyi-ede
Copy link

somogyi-ede commented Nov 17, 2022

Hello @GetVladimir, @ahuse,
as I mentioned in my previous comment, it used to work for me initially as well, but I just noticed that it did indeed revert to YCbCr after waking from sleep/restarting.
Unfortunately it does affect the built-in HDMI ports as well as the monitor in question is connected via HDMI to an M1 Mac Mini. (I also have another monitor connected via the USB-C port, that one continues to be fine). None of the monitors have been disconnected physically, the only change that happened on my end was a couple of sleeps / restarts.

I have to mention that I didn't immediately notice that the monitor was reverted to YCbCr as it looks pretty much the same, no immediately visible artifacts on my end (aside from font smoothing, which sucks on macOS anyway and it doesn't seem to look better on RGB either).

I'm on Ventura 13.0.1.

@GetVladimir
Copy link
Author

@somogyi-ede Thank you for the update and the details.

I can't seem to replicate the issue on my end with an HDMI-to-HDMI connection on M1 Mac mini and Ventura 13.0.1

It seems to continue outputting in RGB color even after sleep/wake and restart.

I only have one modified displays plist file in /Library/Preferences and use only one monitor

@jackson-57
Copy link

I was able to test with my first DVI monitor (the one requiring plist editing on 13.0). On 13.0.1, it still doesn't work without plist editing, and the changes still don't persist properly. I think I jumped to conclusions too soon when I suggested that 13.0.1 fixed the problem, because now that I've tested more monitors, 13.0.1's behavior doesn't seem to be any different than 13.0, as far as I can tell. At least one takeaway from my testing is that not all monitors are affected by the issue. It doesn't seem to matter whether the monitor is using HDMI or DVI, some work and some don't. Same goes with whether the plist changes persist. As an example, I applied the fix just once to my 4K monitor, and it's kept working across reboots and sleep.

I do however have a potential workaround for the plist getting overwritten. I don't know if this works for all affected monitors (and it might not be practical in some scenarios), but what has worked for me is unplugging my monitor (or USB-C hub) before I close the lid on my laptop. That way, after the laptop resumes from sleep, I can just plug the monitor back in and it'll work.

I hope I haven't confused anyone too much with all of this! I'm certainly looking forward to a proper fix from Apple.

@GetVladimir
Copy link
Author

@jackson-57 thank you so much for testing this in detail and for the results!

Also, great find regarding removing the monitor/dock before sleep to prevent the plist overwriting on Ventura. This could help in finding a more persistent workaround

@csergiu
Copy link

csergiu commented Nov 19, 2022

Hmm, it seems that if I disconnect the cable (USB-C <-> USB-C), and then plug it back in, it resets to YPbPr and I have to edit the plist file again. Anyone have any idea how to force it to stay in RGB? I'm on Monterey 12.4. Thanks!

@GetVladimir
Copy link
Author

@csergiu thank you for your comment.

As a workaround, you can make a backup of the working displays plist file, so that you can restore it more easily when needed.

You can also check if it assigns a different UUID each time you connect the cable, which might also be causing the issue

@xilopaint
Copy link

Hey @GetVladimir I just received my new monitor. How can I check if my M2 Mac is outputting RGB color to the monitor?

@GetVladimir
Copy link
Author

GetVladimir commented Nov 19, 2022

@xilopaint thank you for the question and congrats on the new Mac!

The most reliable way is if there is a On-Screen Display menu (OSD) on the monitor itself where it shows the color output.

If it doesn't have the feature, then you can also tell from your Mac by going into Settings > Display and check the Color profile drop-down menu.

When you open the drop-down menu, if there is a color profile with the name starting with SD 170M-A close to the very top of the list, then your Mac is most likely outputting YCbCr color.

If the SD 170M-A profile is all the way down on the list, then it's most likely outputting correctly in RGB color.

@xilopaint
Copy link

xilopaint commented Nov 19, 2022

When you open the drop-down menu, if there is a color profile with the name starting with SD7xxx close to the very top of the list, then your Mac is most likely outputting YCbCr color.

@GetVladimir the first option is my monitor's model name and the second one is SD 170M-A. What does it indicate?

@GetVladimir
Copy link
Author

@xilopaint thanks for checking. Yes, that means it outputs in YCbCr color.

When the Mac outputs RGB color, you will just see the monitor name on top above the line. The SD 170M-A color profile will be way down on the list.

I'll update the correct name in the original comment.

@xilopaint
Copy link

@GetVladimir choosing Generic RGB Profile is not enough for fixing the issue?

@GetVladimir
Copy link
Author

@xilopaint good question. That only changes the color profile, but not the actual color output of the Mac. It still outputs in YCbCr even if you select that profile. The colors might be even less accurate in that case

@xilopaint
Copy link

@GetVladimir now I see I don't have the SD 170M-A option if I choose 100Hz as refresh rate instead of 120 Hz. Also, the colors seem to improve. Is there any other way (maybe some file I can check) to make sure my Mac outputs RGB using 100 Hz? I don't see anything like that on the display's built-in menu.

@GetVladimir
Copy link
Author

@xilopaint it's very likely that your Mac outputs in RGB color when you no longer see the SD 170M-A profile near the top. You can also notice the color difference right away, as you've said.

Except those 2 ways, there is no other easy method (that I know of) that confirms RGB color output