My company got me a new Dell U2515H which is pretty neat but does not have a 4K resolution. It comes with a 2560x1440 resolution and a miniDisplayPort to DisplayPort cable.
As I am using a MacBook Pro mid 2015 with El Capitan and my first thought was: “Let’s hook it up to the thunderbolt port and it should work!”. Well I was a little disappointed since the font was very blurry and everything was quite small. Changing font smoothing didn’t help either. So what is the reason the picture is that bad?
The reason why it is blurry is, that the Dell Monitor doesn’t run in HiDPI mode as your MacBook’s Retina display does.
When I say HiDPI, I mean the pixel-doubling a Retina display does to get this super awesome smooth and sharp picture. Enabling HiDPI will not lead to optimal results, since the monitor should have a 4k or 5k resolution, but it will improve the picture a litte.
Forcing a HiDPI Resolution on Dell U2515H
So coming from Windows and just recently switched to mac I thought: “I will just have to scale the fonts a little like I do on Windows with 150% or so….”. After some intense clicking around in the monitor settings and some googling the sad reality caught up with me. There is no such thing to easily achieve HiDPI resolutions on an external Monitor.
Ok - I have to admit - there are some tools like SwitchResX or QuickRes - which are great - but they cost money and beeing a Geek it is embarassing to admit not beeing able to teach macOS how to do this on your own. So if you want the easy way out, get SwitchResX or QuickRes and stop reading since it will get very technical from here on.
Alright! So there must be some config file somewhere to tell macOS to do what I want it to do!
Coming across RehabMans post in the awesome tonymacx86.com forum about how to actually write a config file to tell macOS what resolutions you wanna have - which includes converting stuff from integer to hex and then combine stuff and convert it to Base64 to finally write a XML file - I thought: “Isn’t there any easy and free way to do this?”.
There isn’t! Being a senior rockstar frontend developing space cowboy, my mind came up with “I can write some browser tool to do this and it will be awesome!”. Approximately 32 cappuccini later I finished coding a working React application that generates and parses ProperyList Files for Custom Scaled Resolutions. Check it out:
Getting down to business!
First I will explain how the PropertyFile’s scale resolution’s base64-Strings need to be interpreted.
Let’s start by looking at the final file that will enable HiDPI on the Dell U2515H:
You can open files with *.plist with Xcode which looks like this for the above file:
Since we don’t speak jibberish let’s pick the first resolution entry and explain it step by step.
The first resolution is represented as base64 String like this:
When you decode the base64 String you get four 8-Bit hex blocks
shell:<00000a00 000005a0 00000001 00200000>
Now you need to know that the two last blocks are fixed values to flag the resolution as HiDPI.
The first two blocks represent the actual resolution which you get when you convert the hex values to decimal values. a00 becomes 2560 and 5a0 becomes 1440. Summarized it means 2560x1440 HiDPI.
The tool PropertyList Parser and Generator will do all that for you. When you scroll down on the tool page you will see detailed instructions you can use if you have a different monitor.
Forcing 1920x1080 HiDPI
I will simplify the procedure from here on, if you want to know the whole process read the step-by-step tutorial on thePropertyList Parser and Generator page.
I want 1920x1080 as HiDPI resolution so I will use the file above (which already contains the right resolutions) and copy it to the right destination which in my case for the Dell U2515H is:
shell:sudo cp ~/Downloads/DisplayProductID-d06e.plist /System/Library/Displays/Contents/Resources/Overrides/DisplayVendorID-10ac/DisplayProductID-d06e
After a restart of my MacBook I can use 1920x1080 HiDPI resolution. (If you also have El Capitan you will not be able to copy something to /System. You need to disable System Integrity Protection first.)
Now download and install RDM to actually be able to select the resolution.
Now you can change the resolution to 1920x1080 HiDPI on Display 1 in RDM and it will look like this:
Note that the OSD displays 2560x1440 which indicates that the Monitor is running its native resolution and is NOT interpolating but actually using “pixel-doubling” (exactly 1.3 times) to display 1920x1080 in HiDPI mode.
The picture is now more pleasing to my eyes. For some people now everything might be too big - you can try different resolutions and tell me what worked best for you.