Skip to content

Instantly share code, notes, and snippets.

@GetVladimir
Last active September 10, 2024 15:03
Show Gist options
  • Save GetVladimir/c89a26df1806001543bef4c8d90cc2f8 to your computer and use it in GitHub Desktop.
Save GetVladimir/c89a26df1806001543bef4c8d90cc2f8 to your computer and use it in GitHub Desktop.
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 used in the video

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



The step-by-step procedure on how to force RGB Color Output on M1 and M2 based Macs with Terminal commands

  1. Open Terminal and use this command to make Finder select the displays plist file:
    open -R /Library/Preferences/com.apple.windowserver.displays.plist

  2. Drag and drop the com.apple.windowserver.displays.plist file to Desktop manually. Don't use the cp command, as it won't add your current user with writing privileges.

  3. Convert the file to XML:
    plutil -convert xml1 ~/Desktop/com.apple.windowserver.displays.plist

  4. Open the converted file with the default plain text editor (avoid using the built-in TextEdit app if possible, since it might modify the file and make it unreadable by the system)
    open -t ~/Desktop/com.apple.windowserver.displays.plist
    or
    open -a CotEditor.app ~/Desktop/com.apple.windowserver.displays.plist

  5. Copy and paste the missing LinkDesription Key under the current display (check the screenshot below for an example of how it should look like):

				<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>
  1. Save the file and then convert it to binary again:
    plutil -convert binary1 ~/Desktop/com.apple.windowserver.displays.plist

  2. Check if the plist file is valid:
    plutil -lint ~/Desktop/com.apple.windowserver.displays.plist

  3. Open the /Library/Preferences/ folder again:
    open /Library/Preferences/

  4. Drag and drop the updated com.apple.windowserver.displays.plist file from Desktop to the Library folder manually. Don't use the cp command, as it won't add your current user with writing privileges.

  5. Right Click on the com.apple.windowserver.displays.plist file in the Library folder and click on Get Info

  6. Check the boxes for Stationery and Locked.

  7. Reboot the Mac.

That's it!



(Alternative) Terminal commands to force RGB Color Output on M1 and M2 based Macs and workaround for losing RGB color after waking up from sleep

  1. Open Terminal

  2. Paste the following commands to edit the User's displays plist file com.apple.windowserver.displays.[UUID].plist using the built-in PlistBuddy function in macOS:

/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "set DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth 8" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:EOTF integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:PixelEncoding integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:Range integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
  1. Reboot your Mac

(Workaround) If your Mac loses RGB color after waking up from sleep mode, either Reboot your Mac (recommended) or use this Terminal command to stop the WindowServer and login again (not recommended):

sudo killall -HUP WindowServer



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

How to Edit plist files using defaults and PlistBuddy
https://ss64.com/osx/defaults.html
https://github.com/mathiasbynens/dotfiles/blob/master/.macos

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

@GetVladimir I've also created a Shortcut to Force RGB Color Output using the built-in Shortcuts app.
You can find how to create the Shortcut here: https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8?permalink_comment_id=4531552#gistcomment-4531552

@entropyconquers has created a script based on this method written in Phyton that automates the steps, makes a backup and checks for duplicate files.
You can find more info about it here: https://github.com/entropyconquers/Force-RGB-Color-on-M1-M2-Mac-Script

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

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.

(Optional) Lock the plist file and set it as stationary
After the macOS Ventura 13.3 update, the plist file seems to get overwritten on reboot.

After you make the edits in the file, you can try setting the file /Library/Preferences/com.apple.windowserver.displays.plist as Stationery pad and Locked, so that it doesn't get overwritten on every reboot

Stationery Pad Locked

To do this, right click on the plist file, click on Get Info and check the boxes next to Stationery pad and Locked

This requires further testing and might cause some issues, like not being able to remember new resolutions or display settings. Please note that you're making any changes at your own risk.

Updates regarding macOS 14 Sonoma Beta

USB-C to DisplayPort
The macOS 14 Sonoma seems to outputs RGB color by default when using USB-C to DisplayPort cable.

HDMI to HDMI
The macOS 14 Sonoma seems to outputs YCbCr color by default when using HDMI to HDMI cable.

  • Forcing RGB Color Output still seems to work with the original procedure of modifying the plist files

  • Modifying the display plist files still works with the alternative version

  • After the plist files are modified, putting the Mac to sleep and waking it, it seem to keep the RGB Color output (this seems to be fixed at least on a M1 Mac mini)

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

@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

@xilopaint
Copy link

@GetVladimir ok, I think I feel comfortable with the colors now. Thanks for all the the fast and kind answers!

@GetVladimir
Copy link
Author

@xilopaint not a problem, glad if it helps and I'm happy to hear that you got RGB color output working

@sarabveer
Copy link

sarabveer commented Nov 20, 2022

Currently on Ventura 13.0.1. I tested my Dell S2721QS with a USB-C to DP cable. It defaults to 60Hz (not Variable which causes flickering) and the color mode shows RGB in the OSD. Seems like the issue has been fixed.

@GetVladimir
Copy link
Author

@sarabveer Awesome, thank you for the details and for the confirmation that RGB color output works on Ventura 13.0.1 with USB-C to DisplayPort cable

@skorphil
Copy link

Ventura 13.0 + Macbook Air 2020 M1 + DELL S2722QC + USB-C cable

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

Not working. After restart i still get ycbcr input format in monitor OCD and default of 40-60hz in monitor settings in MacOs

@GetVladimir
Copy link
Author

@skorphil Thank you for your comment and the info.

Could you tell me more about the connection? Is it a direct USB-C to USB-C cable or are there any docks/adapters?

@skorphil
Copy link

@skorphil Thank you for your comment and the info.

Could you tell me more about the connection? Is it a direct USB-C to USB-C cable or are there any docks/adapters?

It’s a direct connection usb-c to usb-c cable. This connection also used for charging macbook via monitor and to communicate with stuff connected to usb port inside monitor

@skorphil
Copy link

skorphil commented Nov 23, 2022

@GetVladimir i don't know the major reason why i were able to set up RGB mode, but it seems like setting up USB(in monitor OSD) to prioritise "high resolution" over "high speed data transfer" allowed my MBA M1 to use RGB mode.

So now i have RGB mode selected in monitor OSD, but i sacrificed the speed of usb ports in my monitor - now they are usb 2.0 instead of 3.1

My hypothesis is that usb-c connection is not ideal and there is not enough bandwidth to transfer RGB and data(usb 3.1) simultaneously. And ycbcr use less bandwidth than RGB

@GetVladimir
Copy link
Author

@skorphil thank you so much for the update and the details regarding the solution.

So when selecting to prioritize High Resolution on the OSD of the monitor, it allows for RGB color output over USB-C to USB-C cable.

Otherwise, if high speed data transfer is selected, it compression the color output to YCbCr instead.

That is very interesting and it kinda makes sense. Good to know there is a solution for that specific monitor.

Thanks again for your comment and I'm glad to hear that you got RGB color output working

@skorphil
Copy link

skorphil commented Nov 23, 2022

@GetVladimir thank you for creating and maintaining this space. Seems like it's the largest collection of information regarding to this issue with YCBCr. I had problems with flickering and noisy image on some yellowish colors(Night shift mode on mac or warm preset on monitor) and now they are solved with rgb mode. This page helped a lot.

I checked one more time - ycbcr used with "high speed data transfer" mode and rgb - with "high resolution" mode.

I'm wondering why ycbcr have such bad quality... seems like bug. I believed ycbcr is like more "advanced" way to transfer video data and surprised it is performing worse than old rgb. Is it just bad Dell's implementation

UPD: Nah, my Dell monitor still flicker sometimes during night shift (at particular temperature), but anyway its much better with RGB. For future me - don't buy dell monitors anymore! )

@GetVladimir
Copy link
Author

@skorphil thank you so much! I'm glad if it's useful

@kadepig
Copy link

kadepig commented Dec 6, 2022

@GetVladimir I have a monitor Gigabyte m28u which supports 4K 144Hz, and my MacBook is 2015 pro 13 inch which supports 4K 60Hz through a mini dp to dp cable.

But when I use m28u as my external monitor, I only get 4K 24Hz(by mini dp to dp cable), and 4K 30Hz(by Hdmi to Hdmi cable) . The monitor was recognized as a 61 inch monitor when connected by mini dp to dp cable.

I follow your method in youtube ("color on M1 Mac") and try to modify the resolution and refresh rate in com.apple.windowserver.plist(I can only find this file in Catalina 10.15.7 while ......displays.plist doesn't exist). But after the modifications and reboot, I found nothing changed and the resolution and refresh rate in the file of com.apple.windowserver.plist recovered to before.

I also tried the method in patch-edid.md, it indeed changed, but made my resolution to only 1920*1080 FHD. I had tried many ways to recover from that resolution but all failed. Then I had to recover the system using TimeMachine.

Would you like to tell me have to fix the resolution and refresh rate to 4K 60Hz when I connect macbook to my monitor? Many thanks.

@GetVladimir
Copy link
Author

@kadepig thank you for your comment.

Please note that this works only on M1/M2 based Macs. The plist file is not being generated on x86 based Macs and the EDID patch with displays override works better for them.

Regarding your specific use case, you might want to try a different cable or try installing macOS Mojave, which had support for a bit more devices that were later removed from macOS.

@kadepig
Copy link

kadepig commented Dec 6, 2022

@GetVladimir Thanks for your reply.

I try a lot of cables(mini dp to dp) as well as macOS higher than Catalina, and all get the same results.

Is there a solution by modified the certain system files which can determine the real resolution and refresh rates?

Thanks for your suggust of macOS Mojave, I'll try that.

@GetVladimir
Copy link
Author

@kadepig not a problem, glad if it helps.

Only the display override files seems to work for x86 Macs. I'm don't know if any other system files can be modified to make better changes.

Are you certain that the MacBook supports 4K 60Hz? I know that the Mac mini late 2014 doesn't seem to support more than 4K 30Hz with similar specifications.

If you can test also, it might be worth to try installing Windows via Bootcamp, just to check if it can detect and drive the monitor at 4K 60Hz

@kadepig
Copy link

kadepig commented Dec 6, 2022

@GetVladimir Thanks for your kind help.

I saw some posts about macbook 2015 pro, and they said it support 3840x2160 @ 60 Hz via a mini dp to dp cable or up to 4K 30Hz via hdmi to hdmi cable.

see:
https://apple.stackexchange.com/questions/314891/can-i-do-4k60hz-with-my-early-2015-macbook-pro-retina
and https://forums.macrumors.com/threads/enable-4k-60hz-on-2015-macbook-pro-13.1991196/

My specific case is that the resolution is only up to 4K 24Hz via mini dp to dp which refresh rate is even less than that via hdmi to hdmi cable. It's very strange, and I think this is due to the poor compatibility of the monitor m28u with old macbook.

I'll take your advise and see whether win10 via Bootcamp can support 4K 60Hz.

@GetVladimir
Copy link
Author

@kadepig you're very welcome. Thank you for the reply and for the details.

Let us know how it goes with Bootcamp if you try it.

Also, please check on your Monitor's built-in menu if you need to enable DisplayPort 1.4 manually (in case it's set to an older DisplayPort version for compatibility).

Another alternative would be to try MiniDP-to-HDMI cable instead

@joevt
Copy link

joevt commented Dec 7, 2022

@kadepig use AllRez to determine if the connection to the display is a full HBR2 x4 instead of HBR2 x2.
https://github.com/joevt/AllRez (for Intel Macs)
zip the result and attach to a post.
Depending on the results, a solution might be to connect a DisplayPort 1.4 MST hub between the Mac and the display.

@kadepig
Copy link

kadepig commented Dec 7, 2022

@GetVladimir I installed macOS Mojave, and found the resolution and refresh rate was the same as before 3840*2160(UI Looks like: 1920 x 1080 @ 24 Hz), and it took a long time to recovery by Time machine. And I will try Bootcamp soon.

I tried MiniDP-to-HDMI cable before, and it was all the same as the HDMI to HDMI one.

My monitor have the options for Type-C compatibility(on or off) and HDMI Version(2.1 or 2.0), but I don't find an option for DisplayPort compatibility.

@kadepig
Copy link

kadepig commented Dec 7, 2022

@joevt Thanks for your help.

I don't know how to use AllRez, and just double clicked it, then it run in the terminal. I copied the text result to a text file, and zip it, but it can't be attached to the post for it only supports GIF, JPEG, JPG,MOV......

So I Forked from your githubjoevt/AllRez and upload it as a file. Please see the link below

https://github.com/kadepig/AllRez/blob/e051729d615d92f9368a0d4548108ba8d0728de7/AllRezResult.txt.zip

The result is too long, and thanks for your reading.

@GetVladimir
Copy link
Author

GetVladimir commented Dec 7, 2022

@joevt thank you so much for the suggestion and for the app! This is pretty useful.

@kadepig thanks for the update and the info on Mojave and MiniDP-to-HDMI.

Let us know how it goes with the suggestion from @joevt or with Bootcamp if you decide to test it

@kadepig
Copy link

kadepig commented Dec 7, 2022

@GetVladimir Thanks. I now try to use "windows to go" to install win10 on an external u disk, so that the disk of my mac won't be changed. However it will takes a long time to create windows to go usb drive.

@joevt Thanks for the advise. Would you like to tell me what is "a DisplayPort 1.4 MST hub"? Does the hub contains HDMI or mini DP port in one side when having DP 1.4 male port in the other side? And I have tried the mini DP to DP 1.4 cables which gives the same resolution 4K and 24Hz before.

@kadepig
Copy link

kadepig commented Dec 7, 2022

@GetVladimir I just installed win10, via mini dp to dp cable, win10 supports up to 4K 60Hz, and via hdmi to hdmi, up to 4K 30Hz.

It seems the macOS can't recognize the right information of the monitor via mini dp to dp cable.

@GetVladimir
Copy link
Author

@kadepig that is awesome! Thanks for the info and good to know that it supports 4K 60Hz.

macOS always seemed to have issues with detecting monitors properly and setting the correct color output, resolution and refresh rate.

If they can't get it to work, they should just allow all this to be set manually in the System Settings, without arbitrary restrictions

@joevt
Copy link

joevt commented Dec 8, 2022

@kadepig I don't think an MST hub will help in your case since the display is accepting 4 lanes of HBR2 which should be sufficient for 4K60.

The AllRez output shows two displays connected to your Intel MacBook Pro 2015.

Monitor[0] is the built-in display (DisplayVendorID, DisplayProductID, DisplayProductName), it has dimensions (dims) 2560x1600, is 60Hz with pixel clock 268.500MHz (DetailedTimingInformation), and connects as HBR (LINK_BW_SET) x4 (LANE_COUNT_SET). The connector doesn't have timing limits (Hz and kHz are unbounded IOFBTimingRange) except pixel clock max is 348MHz. The Intel GPU (Monitor[0] path) doesn't support DSC (IOFBTimingRange).

Monitor[1] is the GIGABYTE M28U. It has:
macOS accepted scaled modes up to 6720x3780.
macOS accepted resolutions up to 3840x2160 (look at the (not scaled) modes)
macOS accepted refresh rates up to 143.853Hz for 1920x1080 (326.62 MHz).
macOS accepted refresh rates up to 119.879Hz for 2560x1440 (486.29 MHz).
macOS accepted refresh rates up to 24Hz for 3840x2160 (297 MHz which is a HDMI 1.4 timing). This is a problem.
None of the modes use DSC since the Intel GPU doesn't support DSC.

The display is connected with HBR2 x4 using 2560x1440@119.875Hz. It supports HBR3 (02201h MAX_LINK_RATE).
It has DSC support with all the color formats and bits per component, 8 slices at 340 Mp/s = 2720MHz possible and 2560 pixels per slice = 20K width. DSC_MAX_BITS_PER_PIXEL is 0. Maybe that means there's bpp limit? macOS usually always uses 12bpp for DSC.
IOFBTimingRange says the connector supports up to 540MHz pixel clock (normal for Intel DisplayPort 1.2 GPUs). A 4 lane HBR2 connection should support up to 720MHz for 8bpc and 576MHz for 10bpc but 540MHz should be sufficient for 4K60 using CVT-RB timing (533MHz).

edid-decode can be used to decode the EDID (IODisplayEDIDOriginal).

One problem I see in the EDID is that the 3840x2160@60Hz mode uses a pixel clock of 567MHz. To achieve 4K60 for this display connected to an Intel DisplayPort 1.2 GPU in macOS, you'll need to use SwitchResX to create a custom timing that macOS and the Intel GPU will accept (use CVT-RB timing). I don't think 567MHz should be a problem for Apple Silicon Macs since those support HBR3.

EDID says the max refresh is 144Hz and the max pixel clock is 1340 MHz. It says the min & max horizontal refresh rate is 246kHz which needs to be ignored. Hopefully macOS is ignoring this. SwitchResX has options to override the ranges.

The EDID has 144MHz modes for 1080p (326.62Mhz), 1440p (594.88MHz), and 4K (324kHz, 1270.08MHz).

It's got VRR from 48 to 144Hz. If you have a GPU that supports VRR on macOS, then you should see a VRR option for any accepted resolution that has an accepted 144Hz refresh rate. macOS won't let you use VRR for a mode that has a max refresh rate that is less than the max VRR refresh rate.

Besides the Detailed Timings (already discussed), Established Timings, and Standard Timings, the display also has these CTA-861 timings:

    VIC   3:   720x480    59.940060 Hz  16:9     31.469 kHz     27.000000 MHz
    VIC   4:  1280x720    60.000000 Hz  16:9     45.000 kHz     74.250000 MHz
    VIC  47:  1280x720   120.000000 Hz  16:9     90.000 kHz    148.500000 MHz
    VIC  16:  1920x1080   60.000000 Hz  16:9     67.500 kHz    148.500000 MHz
    VIC  63:  1920x1080  120.000000 Hz  16:9    135.000 kHz    297.000000 MHz
    VIC  97:  3840x2160   60.000000 Hz  16:9    135.000 kHz    594.000000 MHz
    VIC 118:  3840x2160  120.000000 Hz  16:9    270.000 kHz   1188.000000 MHz
    VIC  93:  3840x2160   24.000000 Hz  16:9     54.000 kHz    297.000000 MHz
    VIC  32:  1920x1080   24.000000 Hz  16:9     27.000 kHz     74.250000 MHz

So you see where the 4K 24Hz option is coming from. It's the only 4K timing with a pixel clock less than the 540MHz accepted by the macOS Intel GPU driver for your MacBook Pro 2015.

@kadepig
Copy link

kadepig commented Dec 8, 2022

@GetVladimir Thanks! I total agree with you that macOS should not set so many restrictions to an external monitor.

@kadepig
Copy link

kadepig commented Dec 8, 2022

@joevt Many Thanks!

AllRez is so powerful that all the information about compatibility between M28u and MacBook is output! Thanks for your careful reading!

I just download the SwitchResX app, and try to create a custom resolution with 38402160 and UI look likes 19201080 @ 60Hz scaled. Would you like to tell me whether the options "Use simplified settings" and "Interlaced" should be selected? Before reboot, I saved from "File"-"save settings", but the status is "Not installed". I don't know why and after reboot, I can't see HiDP 1920*1080 on the "Current Resolutions".

image

image

@kadepig
Copy link

kadepig commented Dec 8, 2022

@joevt I find the status of the custom resolutions is always "not installed". After I click "Activate immediately", it said "Display configuration modified.......All unsaved preferences are thus invalid and have been discarded." I have tried SwitchResX 4.12.2 and 4.10.0.

image

@joevt
Copy link

joevt commented Dec 9, 2022

@kadepig Your settings look correct for the custom resolution. Interlaced is for old TVs. CVT-RB is usually correct for LCDs. GTF is for old CRTs. CVT is also mostly for CRTs. Did you register SwithResX? If not then you may be limited in the number of resolutions you can add. You don't need the scaled modes for now. Just include your custom 3840x2160@60Hz timing. Instead of Activate Immediately you can try just disconnecting and reconnecting the display.

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