usr-sse2 / RDM

Easily set Mac Retina display to higher unsupported resolutions
1.16k stars 77 forks source link

M1 cannot activate HiDPI #26

Open dubefab opened 3 years ago

dubefab commented 3 years ago

If you find the way please tell us ... sudo defaults write /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled -bool true does nothing. ioreg -lw0 | grep -i "IODisplayEDID" displays nothing.

JonnyTech commented 3 years ago

Have you tried disabling SIP?

dubefab commented 3 years ago

Yes.

jnooree commented 3 years ago

Try to clone this repository and install the HEAD version. If that does not work, then it could take more time because I only have an intel mac.

pinpins commented 3 years ago

Still no luck, any update on this?

dubefab commented 3 years ago

I saw this: https://www.iphoneincanada.ca/news/fix-m1-mac-wide-display-issue/

jnooree commented 3 years ago

I think this would be the fix. Please wait for the next Big Sur update, and check if it works (hopefully).

usr-sse2 commented 3 years ago

try 2.5

turiguiliano88 commented 3 years ago

unfortunately, it still doesn't work on Mac mini M1 with monitor Philips 245E1 in my case at least. No lightning indicator shows in any resolutions.

usr-sse2 commented 3 years ago

@turiguiliano88 Please show what it has generated in /Library/Displays/Contents/Resources/Overrides folder

coolaj86 commented 3 years ago

I'm on the MacBook Air w/ Big Sur, latest updates. I've also downloaded the latest Quartz Debug and made sure that the HiDPI setting is turned on.

ls -lah /Library/Displays/Contents/Resources/Overrides
total 8
drwxr-xr-x  4 root  wheel   128B Jan  6 11:27 .
drwxr-xr-x  3 root  wheel    96B Jan  6 11:20 ..
drwxr-xr-x  3 root  wheel    96B Jan  6 11:20 DisplayVendorID-610
-rw-r--r--  1 aj    staff   861B Jan  6 11:27 Icons.plist

I've added these settings for my Thunderbolt Display:

Screen Shot 2021-01-06 at 11 27 28 AM

And I get no Lightning bolts in the menu:

Screen Shot 2021-01-06 at 11 23 17 AM

I am using v25.0

Screen Shot 2021-01-15 at 4 30 19 PM

I also did a full reboot, just to be sure. No dice.

phipz commented 3 years ago

Hi, I am having the exact same issue on the M1 Mac. I have the newest version 2.5 and added a custom resolution. Disabled SIP and did several reboots. The custom resolution does not show up. However, interestingly the name and icon changes are in effect.

Bildschirmfoto 2021-01-07 um 17 42 45

Bildschirmfoto 2021-01-07 um 17 43 21

usr-sse2 commented 3 years ago

@coolaj86 @phipz Please attach the generated plists here.

coolaj86 commented 3 years ago

@usr-sse2 Could you give me the path of the specific plist you'd like?

usr-sse2 commented 3 years ago

/Library/Displays/Contents/Resources/Overrides/DisplayVendorID-<your display vendor ID>/DisplayProductID-<your display product ID>

phipz commented 3 years ago

@usr-sse2 There you go Overrides.zip

coolaj86 commented 3 years ago

DisplayProductID-9227.gz

<?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>37415</integer>
    <key>DisplayProductName</key>
    <string>Thunderbolt Display</string>
    <key>scale-resolutions</key>
    <array>
        <data>
        AAAMgAAABwg=
        </data>
        <data>
        AAAKAAAABaA=
        </data>
        <data>
        AAAMgAAABwgAAAAJACAAAA==
        </data>
        <data>
        AAAKAAAABaAAAAAJACAAAA==
        </data>
    </array>
    <key>target-default-ppmm</key>
    <real>10.01</real>
</dict>
</plist>
usr-sse2 commented 3 years ago

@phipz I don't know if the GPU is capable of 6016x3384, it's rather large. Does something like 1680x945 (which becomes 3360x1890) work?

turiguiliano88 commented 3 years ago

Here is mine. I can't use any tools to generate the plist file directly from Mac mini M1 so I plug it to Intel Mac to generate it and copy over Mac mini M1. /Library/Displays/Contents/Resources/Overrides/DisplayVendorID-410c

<?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>PHL 245E1</string>
  <key>DisplayProductID</key>
  <integer>49675</integer>
  <key>DisplayVendorID</key>
  <integer>16652</integer>
  <key>scale-resolutions</key>
  <array>
    <data>AAAKAAAABaAAAAABACAAAA==</data>
    <data>AAAFAAAAAtAAAAABACAAAA==</data>
    <data>AAAPAAAACHAAAAABACAAAA==</data>
    <data>AAAHgAAABDgAAAABACAAAA==</data>
    <data>AAAMgAAABwgAAAABACAAAA==</data>
    <data>AAAGQAAAA4QAAAABACAAAA==</data>
    <data>AAAKAgAABaAAAAABACAAAA==</data>
    <data>AAAKrAAABgAAAAABACAAAA==</data>
    <data>AAAFVgAAAwAAAAABACAAAA==</data>
  </array>
</dict>
</plist>
phipz commented 3 years ago

@phipz I don't know if the GPU is capable of 6016x3384, it's rather large. Does something like 1680x945 (which becomes 3360x1890) work?

The monitor is connected via a DisplayLink 6950 USB adaptor. Interestingly, the monitor natively supports full 4K resolution, which is offered by the system. Also 1080p HiDPI is offered. But the HiDPI resolutions in between are missing, that‘s the reason why I‘d like to add them manually.

The same monitor connected natively, supports all HiDPI resolutions in between without problem. So, adding the resolutions with the tool should generally not overwhelm the M1 chip.

2BDF372F-942F-4D69-A734-BE8A01677EEA BB17D67E-291C-4638-9AB2-3E8EA8D361FE

usr-sse2 commented 3 years ago

@phipz I don't know if the GPU is capable of 6016x3384, it's rather large. Does something like 1680x945 (which becomes 3360x1890) work? ...

@phipz DisplayLink is a virtual GPU, so the adapter may be the problem because it should support 6016x3384 for this to work. Please check whether: • adding resolutions on a directly connected display works (add something that is not yet present), • adding lower resolutions on DisplayLink works (for example, 1680x945)

Sent with GitHawk

phipz commented 3 years ago

Please check whether: • adding resolutions on a directly connected display works (add something that is not yet present), • adding lower resolutions on DisplayLink works (for example, 1680x945)

@usr-sse2 Checked the two, with interesting results:

1) The mac / RDM recognizes the external display as the same display, independent whether it is connected directly or via DisplayLink. That means, after saving RDM settings on the DisplayLink-connected display, the same settings appear if the display is then connected directly. 2) The RDM edits lead to no effect when connected via DisplayLink. 3) The RDM edits become available, if the Display is connected directly.

RDM Displaylink RDM Directly
usr-sse2 commented 3 years ago

Please check whether: • adding resolutions on a directly connected display works (add something that is not yet present), • adding lower resolutions on DisplayLink works (for example, 1680x945)

@usr-sse2 Checked the two, with interesting results:

  1. The mac / RDM recognizes the external display as the same display, independent whether it is connected directly or via DisplayLink. That means, after saving RDM settings on the DisplayLink-connected display, the same settings appear if the display is then connected directly.

Yes, it's the expected behavior, because the vendor and device ID of display characterize the display itself, not the GPU it's attached to.

  1. The RDM edits lead to no effect when connected via DisplayLink.
  2. The RDM edits become available, if the Display is connected directly.

So RDM is working on M1, but DisplayLink driver ignores the override plists and uses only what it gets from the display EDID.

usr-sse2 commented 3 years ago

Here is mine. I can't use any tools to generate the plist file directly from Mac mini M1

Why can't you use RDM 2.5 to generate the plist file directly on Mac mini M1?

so I plug it to Intel Mac to generate it and copy over Mac mini M1. /Library/Displays/Contents/Resources/Overrides/DisplayVendorID-410c

<?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>PHL 245E1</string>
  <key>DisplayProductID</key>
  <integer>49675</integer>
  <key>DisplayVendorID</key>
  <integer>16652</integer>
  <key>scale-resolutions</key>
  <array>
    <data>AAAKAAAABaAAAAABACAAAA==</data>
    <data>AAAFAAAAAtAAAAABACAAAA==</data>
    <data>AAAPAAAACHAAAAABACAAAA==</data>
    <data>AAAHgAAABDgAAAABACAAAA==</data>
    <data>AAAMgAAABwgAAAABACAAAA==</data>
    <data>AAAGQAAAA4QAAAABACAAAA==</data>
    <data>AAAKAgAABaAAAAABACAAAA==</data>
    <data>AAAKrAAABgAAAAABACAAAA==</data>
    <data>AAAFVgAAAwAAAAABACAAAA==</data>
  </array>
</dict>
</plist>

The plist looks like what RDM 2.4 generates without manually duplicating resolutions, which is necessary. To get 1280x720 HiDPI, for example, you need to specify 2560x1440 (non-HiDPI) and 1280x720 HiDPI. RDM 2.5 does it automatically, so that each HiDPI resolution gets its counterpart in the plist.

turiguiliano88 commented 3 years ago

Here is mine. I can't use any tools to generate the plist file directly from Mac mini M1

Why can't you use RDM 2.5 to generate the plist file directly on Mac mini M1?

so I plug it to Intel Mac to generate it and copy over Mac mini M1. /Library/Displays/Contents/Resources/Overrides/DisplayVendorID-410c

<?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>PHL 245E1</string>
  <key>DisplayProductID</key>
  <integer>49675</integer>
  <key>DisplayVendorID</key>
  <integer>16652</integer>
  <key>scale-resolutions</key>
  <array>
    <data>AAAKAAAABaAAAAABACAAAA==</data>
    <data>AAAFAAAAAtAAAAABACAAAA==</data>
    <data>AAAPAAAACHAAAAABACAAAA==</data>
    <data>AAAHgAAABDgAAAABACAAAA==</data>
    <data>AAAMgAAABwgAAAABACAAAA==</data>
    <data>AAAGQAAAA4QAAAABACAAAA==</data>
    <data>AAAKAgAABaAAAAABACAAAA==</data>
    <data>AAAKrAAABgAAAAABACAAAA==</data>
    <data>AAAFVgAAAwAAAAABACAAAA==</data>
  </array>
</dict>
</plist>

The plist looks like what RDM 2.4 generates without manually duplicating resolutions, which is necessary. To get 1280x720 HiDPI, for example, you need to specify 2560x1440 (non-HiDPI) and 1280x720 HiDPI. RDM 2.5 does it automatically, so that each HiDPI resolution gets its counterpart in the plist.

Thank you, I wasn't aware that I can generate plist file directly from RDM. Btw I did it and here is the plist file /Library/Displays/Contents/Resources/Overrides/DisplayVendorID-410c:<?xml version="1.0" encoding="UTF-8"?>

<?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>SM</string>
        <key>scale-resolutions</key>
        <array>
                <data>
                AAAPAAAACHA=
                </data>
                <data>
                AAAPAAAACHAAAAALAKAAAA==
                </data>
        </array>
        <key>target-default-ppmm</key>
        <real>10.01</real>
</dict>
</plist>

I want only 1920x1080 hidpi so I generate only that resolution. However RDM shows different resolutions. Is there anything wrong here? I tried to restart, check/uncheck those Unknown 1, Unknown 2, Unknown 3 options in RDM though. Screenshot 2021-01-13 at 18 15 15

coolaj86 commented 3 years ago

@usr-sse2 Did you see my reply with my config file? Do you have any thoughts as to why I'm not seeing any HiDPI options?

paulktemple commented 3 years ago

Hi everyone, just wanted to also add that I'm experiencing this same issue with my MacBook Air M1 with using a DisplayLink Adapter with a 4K monitor. No lightening icon (HiDPI) for the resolution I want, which is 2560x1440. I'm getting the same exact results as @phipz has posted earlier.

Screen Shot 2021-01-26 at 10 26 09 AM
coolaj86 commented 3 years ago

I've gone back and forth with Apple support acsupportcase@apple.com for a couple of weeks and they've escalated me up the chain from Support to Senior Engineer to guys-you-dont-talk-to-directly-but-your-senior-engieer-talks-to-for-you and what I got back is that the OS-level support for Apple Thunderbolt Displays lacks HiDPI (it sounded like you can't just hack the plist file to do what you want).

The same probably applies to other displays mentioned here.

SwitchResX, which is a paid alternative to RDM, also supports these on Catalina on a Intel Mac but doesn't support them on Big Sur on an M1.

Call Apple Support

Since everyone here has a new computer that still has the complementary Apple support, I'd say give them a call and let them escalate it for you. I imagine that if enough people make noise about this, it'll get patched, or added to macOS 12.

mbeaudru commented 3 years ago

SwitchResX, which is a paid alternative to RDM, also supports these on Catalina on a Intel Mac but doesn't support them on Big Sur on an M1.

I contacted the developer behind SwitchResX and he explained to me that Apple with the M1 chip applies the following constraints:

In other words, if you are like me and have a 1440p screen you are basically screwed, since 1080p HiDPI = 4k resolution, which is well above the 1440p native resolution of the screen.

If you have an external 4k screen you should have ways to tweak the scaling to your needs.

This is pretty sad, especially considering that both Windows and Linux handle the scaling pretty well.

jnooree commented 3 years ago

I contacted the developer behind SwitchResX and he explained to me that Apple with the M1 chip applies the following constraints:

  • You can define a custom scaled resolutions for external displays, though this is limited to resolutions smaller than native (native meaning your external display native resolution)
  • HiDPI will not enable on external monitors that aren't 4K

Apple, again? So disappointing.

usr-sse2 commented 3 years ago

This is pretty sad, especially considering that both Windows and Linux handle the scaling pretty well.

What? Linux doesn't handle the scaling 'pretty well': it applies the scaling to all displays, so it's impossible to work on a FullHD or less laptop with an external 4K monitor.

tosziro commented 3 years ago

This is pretty sad, especially considering that both Windows and Linux handle the scaling pretty well.

What? Linux doesn't handle the scaling 'pretty well': it applies the scaling to all displays, so it's impossible to work on a FullHD or less laptop with an external 4K monitor.

Well its not the true anymore. Ubuntu just released their new version 21.04 and it perfectly support hidpi scalling per display. So yeah, now the only OS where scaling sucks is macOS. So congratulations to Apple...

anthonysetiadi commented 3 years ago

Hi everyone, I've been playing around with RDM and M1 Macbook Air and my external LG 49" external monitor to try and get a decent HiDPI setting. No luck though.

Now, however, my default Macbook Air resolutions have gone missing and only show these two resolutions. I can still add the default resolution via RDM but Is there a way to revert back to default settings?

I'm guessing I should remove the plist files that were added, could anyone help me with the command line I should enter into terminal?

image
maximebories commented 3 years ago

This is pretty sad, especially considering that both Windows and Linux handle the scaling pretty well.

What? Linux doesn't handle the scaling 'pretty well': it applies the scaling to all displays, so it's impossible to work on a FullHD or less laptop with an external 4K monitor.

Well its not the true anymore. Ubuntu just released their new version 21.04 and it perfectly support hidpi scalling per display. So yeah, now the only OS where scaling sucks is macOS. So congratulations to Apple...

Yeah it took some time for Linux but they do it on their free time and the result is really good. Actually any distribution with gnome runs faster on my Macs than macOS itself.... Fractional scalling or not...

sudo rm -rf /Library/Displays/Contents/Resources/Overrides
sudo reboot now
maximebories commented 3 years ago

If you find the way please tell us ... sudo defaults write /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled -bool true does nothing. ioreg -lw0 | grep -i "IODisplayEDID" displays nothing.

The one has nothing to do with the other.

sudo defaults read /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled probably reads 1, am I right ?

The thing with Apple Silicon is that you can't use something like Roseta for drivers, you need to rewrite them so we are in uncharted territory here. This grep thing everybody is using is quite ugly. Here is how you can see your display(s) with the new drivers and a proper syntax:

ioreg -c AppleCLCD2

There is tons of information, what you are looking for is was EDID sent back to the Mac, most of it is in "DisplayAttributes", but there are also constrains such as maximum source width... I am still going through that mess.

waydabber commented 3 years ago

There is a way to add any number of HiDPI resolutions on M1 even on sub-4K displays without using a hardware HDMI dummy or an other physical 4K display to mirror the screen from (tested on a 24" QHD display connected to an M1 Mini running Monterey):

https://github.com/waydabber/BetterDummy

Hope this helps.

coolaj86 commented 3 years ago

Confirmed that this works on Big Sur as well. Woohoo!

  1. Option ⌥ click-n-drag the Dummy onto the Thunderbolt (to mirror 2 of 3 displays) Screen Shot 2021-10-25 at 5 53 30 PM
  2. Select "Optimize for Dummy 16:9" Screen Shot 2021-10-25 at 5 57 23 PM
  3. Verify that the mirrored display is scaled to the BetterDummy display Screen Shot 2021-10-25 at 5 54 21 PM