Contribute
Register

[Guide] Add your custom retina / HiDPI resolution for your desktop display

Status
Not open for further replies.
You can enable pixel compression on a normal monitor to be able to visualize HDPi resolutions. In simple words, if your monitor has maximum resolution of 1920x1080, your HDPi correct resolution will be 960x540... nothing more, nothing less! By the way, you can achieve this by downloading Xcode and its Graphics Tools module. Open Quartz Debug and enable HDPi resolutions.
 
there's a script to generate the base 64 encoded EDID if you google genEDID.sh

or run this in a shell script

ioreg -l | grep IODisplayEDID | sed -e 's/\(^.*<\)\(.*\)\(>.*$\)/\2/' | xxd -r -p | openssl base64

Anyone know how to generate the resolutions, the tutorial doesnt make this clear at all.
I'd like the retina macbook resolutions for a 1080p probook.

thanks
 
Here are the details to force 1600x900 on TVs in which 1920x1080 might look to small

<?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>DisplayProductID</key>
<integer>49972</integer>
<key>DisplayVendorID</key>
<integer>13481</integer>
<key>IODisplayEDID</key>
<data>
AP///////wA0qTTDAQEBAQEWAQOARid4Ciw9pVRGmSUQR0o1boCBgEVZYVkxCgEBAQEB
AQEBZiFWqlEAHjBGjzMAuYghAAAeDh8AgFEAHjBAgDcAuYghAAAcAAAA/ABQYW5hc29u
aWMtVFYKAAAA/QAXTA9RDwAKICAgICAgAVwCAyhwUAcDFhIEEwUUEB8gAQIGERUmCQcH
FQdQgwEAAGcDDAAgAAAeAjqAGHE4LUBYLEUAuYghAAAeAR2AGHEcFiBYLCUAuYghAACe
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
/Q==
</data>
<key>scale-resolutions</key>
<array>
<data>
AAAGQAAAA4QAAAAB
</data>
</array>
</dict>
</plist>
 
If I use a HiDPI 1280x720 or 1600x900 resolution on a 1080p TV, can I still watch movies on it in true 1080p, or does it look the same as if I was watching 1080p on a 720p native display?
 
If the source of the movie is 1080p, then it will look better on TV with resolution 1600x900 than on a TV with lower resolution, for example 1366x768.

Of course it all depends if the TV is 1080p in the first place.
 
If the source of the movie is 1080p, then it will look better on TV with resolution 1600x900 than on a TV with lower resolution, for example 1366x768.

Of course it all depends if the TV is 1080p in the first place.

Yes, the TV is 1080p. I'm just not sure how the HiDPI thing works. Obviously if I set the TV to 720p, 1080p movies will not look as good. I'm wondering if the same is true with 720p HiDPI, or if it actually displays it at 1080p since it's a HiDPI resolution. Similar to how (I would assume at least) a 5k iMac would be able to play a 4k movie in true 4k, even though it's actually equivalent to a HiDPI 2560x1440 resolution. I just wanted to be able to watch movies in 1080p without sacrificing the ability to actually use the computer from the couch.
 
I don't know what HiDPI.
All I did is follow this guide to have a resolution that displays more pixels in my TV which I use as a secondary monitor.
 
Thanks JackBlack2006! it works perfectly :thumbup:
Now i have sharp ui at decent size

i just want to recap and make clear some point to who want to do this

Find the resolution:

  • find the maximum resolution your greaphic card (my is gtx 650 ti : 4096 x 2160)
  • get your monitor aspect ratio ( 2560 x 1440 -> 1.777.. )
  • divide graphic card resolution by 2 and adapt it (lowering) to your monitor aspect ratio. ( 4096 x 2160 / 2 = 2048 x 1080 -> lower heith to match aspect ratio : 1920 x 1080).
  • multiply back by 2 the res obtained in previus step: 1920 x 1080 * 2 = 3840 x 2160 // Tis the resolution i will put in configuration. Note: is lower than the max graphic card max res but higher than monitor res.

Get values to put in Xml file:
DisplayProductID [in my case 1033]
Code:
ioreg -l | grep DisplayProductID

DisplayVendorID [in my case 1138]
Code:
ioreg -l | grep DisplayVendorID

IODisplayEDID string to put in <data> [in my case "AP///////wA...BgAjg=="]
Code:
ioreg -l | grep IODisplayEDID | awk -F '<|>' '{print $2}' | xxd -r -p | base64

"scale-resolutions" array values
Code:
echo $(printf '%.8x%.8x%.8x' _WIDTH_ _HEIGHT_ 1) | xxd -r -p | base64
Obviusly replace _WIDTH_ and _HEIGHT_ with your values

I used as the first value the native resolution of my monitor [2560 x 1440] (for safty) and as the second one the calculated with method above [3840 x 2160]

Prepare the structure:

  • go in /System/Library/Displays/Overrides and create a folder named DisplayVendorID-XXX where XXX is DisplayVendorID in Hex
  • inside DisplayVendorID-XXX folder create a text file without extention named DisplayProductID-YYY where YYY is DisplayProductID in Hex

this two walues are the same that are present in the last part of the string returned by
Code:
 ioreg -l | grep IODisplayPrefsKey
in my case
"IODisplayPrefsKey" = "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG0@1/IOPP/PEGP@0/NVDA,Display-C@2/NVDA/display0/AppleDisplay-472-409"

So the file path is /System/Library/Displays/Overrides/DisplayVendorID-472/DisplayProductID-409

Create the Xml file:
As described in the original post by JackBlack2006 [ http://www.tonymacx86.com/graphics/...na-hidpi-resolution-your-desktop-display.html ] just create a plist file with values yiu calculated before

Here is my plist file for monitor Acer CB270HU
Code:
<?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>DisplayProductID</key>
    <integer>1033</integer>
    <key>DisplayVendorID</key>
    <integer>1138</integer>
        
    <key>IODisplayEDID</key>
    <data>AP///////wAEcgkE9N8QQx8YAQOAPCJ4KgzVqVVMoSUNUFS9SwDRANHAgYCVD5UAswCB
    wKlAVl4AoKCgKVAwIDUAVVAhAAAeAAAA/QAXTA9LHgAKICAgICAgAAAA/wBUMUVFRTAw
    MTQyMDAKAAAA/ABBY2VyIENCMjcwSFUKAVYCAyR0TwECAwUGBxAREhMUFRYfBCMJBweD
    AQAAZwMMABAAuDwCOoDQcjgtQBAsloBWUCEAABgBHYAYcRwWIFgsJQBWUCEAAJ4BHYDQ
    chwWIBAsJYBWUCEAAJ4BHQC8UtAeILgoVUBWUCEAAB6MCtCQIEAxIAxAVQBWUCEAABgA
    jg==</data>
    <key>scale-resolutions</key>
    <array>
        <data>
        AAAKAAAABaAAAAAB
        </data>
        <data>
        AAAPAAAACHAAAAAB
        </data>
    </array>
</dict>
</plist>
 
Problem with macbook pro 13.3 (mid 2010) GeForce 320M

I've created custom scale resolution 2560x1600 (1280x800 multiply x2) for LG 24" 1920x1200 monitor

But id doesn't work in switchresx - system only+invalid

What to do?
 
You may add this to the guide, it will display all necessary data at once:
Code:
ioreg -l | egrep -i 'DisplayVendorID|DisplayProductID|IODisplayPrefsKey|iodisplayedid' | egrep  -o '".*$'

or output to file:

ioreg -l | egrep -i 'DisplayVendorID|DisplayProductID|IODisplayPrefsKey|iodisplayedid' | egrep  -o '".*$' > displayinfo.txt
If you have two displays simply identify them by groups of info, easiest way is to unplug all, then plug in one at a time and see what new info shows up. The new info is the new connected display...
 
Status
Not open for further replies.
Back
Top