Contribute
Register

Adding/Using HiDPI custom resolutions

Status
Not open for further replies.
I tried OPs solution but it didn't work for me.

I'm not really sure why. When using IOJones the only monitor that appears there is an Apple display which doesn't correspond with my Dell monitor. So I assume the problem is not having the correct model and vendor ID.


Anyway I found this other way of changing the DPI by using an Apple tool for developers:
http://www.idownloadblog.com/2016/02/03/quartz-debug-framemeter/

It works, although it only enabled HiDPI mode with doubling values, not intermediate values like OPs solution (eg: 1.25X or 1.5X).

Edit: using "ioreg -lw0" in the terminal and CMD+F to search for the values I found that for my Dell U2715H the vendor ID is 4268 and the model ID is 53349. I still don't see the resolutions I configured in the plist file which I'm pasting here in case anyone can see something wrong.

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>DisplayProductName</key>
	<string>Dell U2715H</string>
	<key>DisplayProductID</key>
	<integer>53349</integer>
	<key>DisplayVendorID</key>
	<integer>4268</integer>
	<key>scale-resolutions</key>
	<array>
		<data>AAAHgAAABDg=</data>
		<data>AAAGQAAAA4Q=</data>
		<data>AAAPAAAACHAAAAAB</data>
		<data>AAAMgAAABwgAAAAB</data>
	</array>
</dict>
</plist>

The final file is /System/Library/Displays/Overrides/DisplayVendorID-4268/DisplayProductID-53349
 
I tried OPs solution but it didn't work for me.

I'm not really sure why. When using IOJones the only monitor that appears there is an Apple display which doesn't correspond with my Dell monitor. So I assume the problem is not having the correct model and vendor ID.

All external monitors are identified by AppleDisplay in ioreg.
And internal monitors (eg. laptop displays) by AppleBacklightDisplay.

It is the class name of the object that represents the display in ioreg and has nothing to do with the manufacturer.

Anyway I found this other way of changing the DPI by using an Apple tool for developers:
http://www.idownloadblog.com/2016/02/03/quartz-debug-framemeter/

It works, although it only enabled HiDPI mode with doubling values, not intermediate values like OPs solution (eg: 1.25X or 1.5X).

To make it work you must have a resolution representing the native resolution of the display. And for each HiDPI resolution, one at the desired HiDPI resolution and one double that.

Note that the display overrides location is different for 10.11.
 
Can i use this guide for El Capitan ?
 
Very much hoping someone can help. I purchased and LG Ultrawide Monitor, 29UM58. The only inputs are HDMI. I have two mac laptops that I am having trouble connecting with the ideal resolution 2560x1080. Both laptops run El Capitan and have the most recent updates. I use a mini display port to hdmi converter for connecting the display.

When I have tried to download a Property List Editior I have been presented with automated audio warnings and display windows that I have put (one) of my laptops at risk. I have removed these files, and do not wish to download another.

What I am hoping is that someone can assist me in adding the appropriate line of data to the array that I can edit without a PList Editor.

<key>dmdg</key>

<data>

AAAAAg==

</data>

<key>IOGFlags</key>

<integer>4</integer>

<key>scale-resolutions</key>

<array>

<data>AAAEgAAAAtAAAAAB</data>

<data>AAAEAAAAAwAAAAAB</data>

<data>AAAEAAAAAoAAAAAB</data>

<data>AAAFAAAAAyAAAAAB</data>

<data>AAADIAAAAlgAAAAB</data>

<data>AAADIAAAAfQAAAAB</data>

<data>AAACgAAAAeAAAAAB</data>

<data>AAAC0AAAAeAAAAAB</data>

<data></data>

</array>

What further information would someone need in order to assist me in adding a data line for a 2560X1080 resolution to the above array and to the array for my other laptop???
 
When I have tried to download a Property List Editior I have been presented with automated audio warnings and display windows that I have put (one) of my laptops at risk. I have removed these files, and do not wish to download another.

Use Xcode (from Apple) or PlistEdit Pro.
 
First, of all I would like to thank anyone who made this thread, because I was able to successfully get HiDPI resolutions working on my machine. However, I have experienced such a peculiar issue after getting it working.

On my HP Spectre x360, I have tested many times and every single time the machine boots properly without a display override with any non-HiDPI default resolution in SysPrefs (1920x1080 is default) (actual display is 2560x1440). When I tried adding the display override and changed my display resolution to 1366x768 (HiDPI), I noticed that on some of the boots, it would end up going to second stage and the login (window server) would not appear. There would just be a cursor on the top left (black screen) and that's it.... I would wait for login window to appear and it never would. BUT, on some boots, it would boot right to the login window with my HiDPI resolution. In my window server's plist file DisplayResolutionEnabled is set to YES so it wouldn't be an issue with having HiDPI enabled. But just to be sure, I verified this with Xcode. This never happens when I do not have a display override and am running one of the default resolutions in SysPrefs, the login window would always appear on boot. This is what is perplexing, so this doesn't help me narrow down the issue. I can post a ASL Log and IOReg if needed. NOTE: I have a skylake machine running on 10.11.5

I don't suspect that there is a problem with my overrides file, but just if anyone wants to look at it... it is attached. My initial reaction would be that there is an ACPI related problem or something, not to get off topic
 
Last edited:
First, of all I would like to thank anyone who made this thread, because I was able to successfully get HiDPI resolutions working on my machine. However, I have experienced such a peculiar issue after getting it working.

On my HP Spectre x360, I have tested many times and every single time the machine boots properly without a display override with any non-HiDPI default resolution in SysPrefs (1920x1080 is default) (actual display is 2560x1440). When I tried adding the display override and changed my display resolution to 1366x768 (HiDPI), I noticed that on some of the boots, it would end up going to second stage and the login (window server) would not appear. There would just be a cursor on the top left (black screen) and that's it.... I would wait for login window to appear and it never would. BUT, on some boots, it would boot right to the login window with my HiDPI resolution. In my window server's plist file DisplayResolutionEnabled is set to YES so it wouldn't be an issue with having HiDPI enabled. But just to be sure, I verified this with Xcode. This never happens when I do not have a display override and am running one of the default resolutions in SysPrefs, the login window would always appear on boot. This is what is perplexing, so this doesn't help me narrow down the issue. I can post a ASL Log and IOReg if needed. NOTE: I have a skylake machine running on 10.11.5

I don't suspect that there is a problem with my overrides file, but just if anyone wants to look at it... it is attached. My initial reaction would be that there is an ACPI related problem or something, not to get off topic

Your issue seems unrelated to this thread (I suspect ACPI is setup incorrectly, or some other general snafu).

You need to use verbose boot to troubleshoot.

But in a separate thread.
 
I've tried to do this quite a few times. My 4540s has a 15" 1920x1080p monitor. Most of the time, I can work close enough to the display such that the text is not too small. But sometimes, it would be useful to work at 1600x900. Unfortunately, if you use a normal scaled resolution at 1600x900 the text is not as crisp. It would be great to use Apple's HiDPI tech to get better scaling.

Same thing goes for my Lenovo u430 with 1600x900 14" display. Sometimes it would be great to use 1440x810 instead. The result is not retina clarity, but it isn't bad... This post will use my Lenovo u430 as an example.

I've tried a number of methods as documented in the following threads, but they've always come up short and don't really work. The problem is they rely on SwitchResX to add the resolutions which is fairly buggy and will not add all resolutions consistently. SwitchResX works great for selecting modes not available in SysPrefs->Displays, but not so good for adding custom resolutions.

http://forums.macrumors.com/showthread.php?t=1568657
http://www.tonymacx86.com/graphics/...na-hidpi-resolution-your-desktop-display.html
http://www.insanelymac.com/forum/to...na-hidpi-resolution-for-your-desktop-display/

In addition, they have you extracting EDID and other unnecessary tasks...

The other day, I borrowed a friends MacBookPro11,2 with retina display. I did a little poking around, and in particular, I grabbed the display override plist for the built-in retina display. Looking at that file and experimenting with it gave me the information needed to add your own custom resolutions to our own display plist. There are some quirks, but it works...

First step is you must enable HiDPI mode:
Code:
sudo defaults write /Library/Preferences/com.apple.windowserver DisplayResolutionEnabled -bool YES
sudo defaults delete /Library/Preferences/com.apple.windowserver DisplayResolutionDisabled

Note: I did not have to do the second one.

Next, determine your vendor-id and product-id of your display. This is available from ioreg. Using IORegistryExplorer, look under your display under your graphics device:

View attachment 93897

Your ids are DisplayVendorID and DisplayProductID. The hex values here determine where in /System/Library/Displays/Overrides, you create the directory/plist file. If the file already exists, you should edit the existing file (copy it to your Desktop for editing).

In my case, the vendor-id is 0xdae, so I need to create a directory (it may already be present):
Code:
sudo mkdir /System/Library/Displays/Overrides/DisplayVendorID-dae

Next, create your plist file. I create it on my desktop and then copy it to the overrides folder later. the file name should be named after your product id. In my case the product-id is 0x1482, so the name will be DisplayProductID-1482.plist. I name it with extension plist to make it easy to open the file. The starting contents should look like this:
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>DisplayProductName</key>
    <string>Lenovo u430 Display</string>
    <key>DisplayProductID</key>
    <integer>5250</integer>
    <key>DisplayVendorID</key>
    <integer>3502</integer>
    <key>scale-resolutions</key>
    <array>
    </array>
</dict>
</plist>

The DisplayProductName can be whatever you like. Note that DisplayProductID and DisplayVendorID must be converted from hex to decimal for the plist.

Next step is to add your custom resolution(s). Open the plist that is now on your desktop in a plist editor (I use xcode), and then add your custom resolutions under scale-resolutions.

You must add two resolutions for each custom resolution you'd like. My native display on this laptop is 1600x900, so I'm going to add two custom resolutions 1366x768 and 1440x810. Note how the resolutions are carefully chosen to reflect a 16:9 aspect ratio. Custom resolutions are array entries under scale-resolutions that have type Data and have two 32-bit values. The values are in natural byte-order (big-endian/Motorola byte-order, not little-endian or Intel byte order). 1366x768 would be:
Code:
<00000556 00000300>

Note that the value you enter here are in hex. 0x556 is 1366 and 0x300 is 768.

In order to make it HiDPI capable, you must also add another scaled resolution at twice the custom resolution above, so... 2732x1536. Converted to Data hex format:
Code:
<00000aac 00000600 00000001>

With these two entries, it looks like this in the xcode plist editor:
View attachment 93898

You can test this plist now by copying it and rebooting:
Code:
cd ~/Desktop
sudo cp DisplayProductID-1482.plist /System/Library/Displays/Overrides/DisplayVendorID-dae/DisplayProductID-1482

Note that the destination in Displays/Overrides does not have a plist extension.

After that you can restart:
Code:
sudo reboot

You can now access the HiDPI resolution of 1366x768 in SysPrefs->Displays.

Curious things start to happen if you add multiple new HiDPI resolutions. There seems to be some filtering going on in SysPrefs->Displays. Resolutions which are 'close' to each other are filtered out and only one is shown if they are close (eg. 1366x768 either/or 1440x810).

On the Probook (1080p native), if you add 1440x810, it will override the 1366x768, but on the Lenovo u430 (900p native), the 1366x768 seems to override 1440x810:
View attachment 93900

If you run SwitchResX with both installed you'll be able to select either one and activate it even though both are not available in SysPrefs->Displays. SysPrefs->Displays is filtering the resolutions in a way that SwitchResX is not. Note that using SwitchResX to add these resolutions does not work most of the time. You must edit the plist directly.

On my 4540s I was able to add both 1600x900 and 1440x810 (or 1366x768). In that case, the system showed both 1600x900 and the 1440x810 (or 1366x768) but not the 1440x810 and 1366x768 at the same time. Thus why I say the system is filtering resolutions that are close to each other.

Just for clarification, this is what my plist looks like (in text) for both 1366x768 and 1440x810 (Data values are encoded base64):
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>DisplayProductName</key>
    <string>Lenovo u430 Display</string>
    <key>DisplayProductID</key>
    <integer>5250</integer>
    <key>DisplayVendorID</key>
    <integer>3502</integer>
    <key>scale-resolutions</key>
    <array>
        <data>AAALQAAABlQ=</data>
        <data>AAAFoAAAAyo=</data>
        <data>AAAKrAAABgA=</data>
        <data>AAAFVgAAAwA=</data>
    </array>
</dict>
</plist>

Adding custom HiDPI resolutions should prove very useful for screens which have very high resolution (retina class) or even moderate resolution on small screens (1080p on 13" or under).

You will notice some performance degradation when running a scaled resolution like this. This is because the system is rendering to the high-resolution frame buffer (at twice the size), then scaling down to the native resolution of the display (that part is probably done in hardware).

Automatic tool

I have not tried this tool, but there is a web based program that can generate a display override plist for you.

Refer to the post (#222) in this thread for a link: http://www.tonymacx86.com/threads/adding-using-hidpi-custom-resolutions.133254/page-23#post-1271885

no work on x1 carbon 2014
build-in monitor is 2560x1440

my plist is
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>1049</integer>
    <key>DisplayProductName</key>
    <string>x1c 2014-3</string>
    <key>DisplayVendorID</key>
    <integer>12516</integer>
    <key>IODisplayEDID</key>
    <data>
    AP///////wAw5BkEAAAAAAAXAQOgHxF4AkKVoVpXlCcNUFQAAAABAQEBAQEBAQEBAQEB
    AQEB5FwAoKCgEVAwICMANq4QAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBMRyBEaXNw
    bGF5CiAgAAAA/gBMUDE0MFFIMS1TUEIxALw=
    </data>
    <key>scale-resolutions</key>
    <array>
        <data>
        AAAFAAAAAtAAAAABACAAAA==
        </data>
    </array>
</dict>
</plist>

and my plist file is put in
/System/Library/Displays/Contents/Resources/Overrides/DisplayVendorID-30e4/ (this folder is not exist before)
because /System/Library/Displays/Overrides is empty

after reboot the system-display config still don't have 1280x720 candidate.

if using SwitchResX, the hidpi 1280x720 is in the choosn list but there is no effect after click (even don't have a screen flicker..). 1280x800 in hidpi takes effect but will cause the bottom of the screen flicker and left and right side of the screen black.

any advice please?
 
Status
Not open for further replies.
Back
Top