Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MonitorControl not working on Apple Silicon (M1) Macs #323

Closed
3 tasks done
htmlarson opened this issue Nov 18, 2020 · 230 comments
Closed
3 tasks done

MonitorControl not working on Apple Silicon (M1) Macs #323

htmlarson opened this issue Nov 18, 2020 · 230 comments
Assignees
Labels
Priority: Major Issue is major (e.g. A lot of things broken…) Status: Done Work on this issue is complete. Will be available on next release Type: Bug Issue is a bug (e.g. Crash, …)

Comments

@htmlarson
Copy link

htmlarson commented Nov 18, 2020

Checklist

  • I have searched for existing issues
  • I have looked through the wiki
  • I have updated MonitorControl to the latest version

Describe the bug

Installing MonitorControl on a MacBook Air with Apple Silicon will show no monitors connected. I am using the same setup as I previously used with my intel-based system.

To Reproduce
Attempt normal use using a MacBook Air with an Apple M1 Processor

Expected behavior
Displays should register and allow for display controls

Environment Information (please complete the following information):

  • macOS version: 11.0
  • MonitorControl version: 2.1.0, Build 721
  • Monitor(s): DELL S2319NX
@htmlarson htmlarson added the Type: Bug Issue is a bug (e.g. Crash, …) label Nov 18, 2020
@ameetmadan
Copy link

+1 on this, was working before I updated to Big Sur. Seems to be more of a Big Sur problem, as I have an Intel Mac where it was working before.

@alexclst
Copy link

+1 with the M1 Mac mini. I have both USB-C to DisplayPort and HDMI monitors attached, neither shows in MonitorControl. May well be Big Sur problem, as my old Intel Mac is stuck at Catalina.

@htmlarson
Copy link
Author

htmlarson commented Nov 18, 2020 via email

@ben-xD
Copy link

ben-xD commented Nov 18, 2020

I have MacOS Big Sur 11.0.1 (20B28), and its working fine for me (hackintosh). Thanks again for working on this lovely project.

@fredeil
Copy link

fredeil commented Nov 19, 2020

Working for me
image

@cgaff91
Copy link

cgaff91 commented Nov 19, 2020

+1 with MacBook Air M1, 8-core GPU model. Replaced my 2020 13" Intel MacBook Pro, using the exact same setup (LG UltraWide USB-C Monitor), MonitorControl now just says "No supported display found"

Everything works 100% when connecting my Intel MacBook Pro, both on the latest released version of Big Sur, 11.0.1

Love this app, keep up the great work!! Thank you!

@ameetmadan
Copy link

+1 on this, was working before I updated to Big Sur. Seems to be more of a Big Sur problem, as I have an Intel Mac where it was working before.

@JoniVR
Copy link
Member

JoniVR commented Nov 19, 2020

Yeah it's definitely an M1 issue, not Big Sur.

We haven't done any release officially supporting it yet either.

My guess is that Rosetta 2 either doesn't really work well on translating DDC.Swift or DDC.swift needs to get updated for it to work.

@davidkrmela
Copy link

Yes, I can confirm that is M1 issue – it's working on my Intel macbook with Big Sur but not with M1 macbook.

Today I tried to compile MonitorControl on M1 (with removing OSD.framework - not compatible with arm) and successfully run it natively (activity monitor shows "Apple" architecture, not "Intel"), but get same result as Intel version running under Rosseta 2: "No supported display found"

So I guess that's not a problem with Rosetta 2.

@baumhoto
Copy link

baumhoto commented Nov 21, 2020

Seems to be a bug in AppKit Framework on M1. NSScreenNumber is set to 1 instead of the actual id

Following program outputs

import AppKit
import Foundation

for screen in NSScreen.screens {
    let name = screen.localizedName ?? NSLocalizedString("Unknown", comment: "Unknown display name")
    print(name, screen.deviceDescription.description)
}

on M1:
output m1

on Intel:
intel

NSScreenNumber is 1 on M1 thus DDC Framework will set Monitor to be Not DDC Compatible.
MonitorControl

.

@alexclst
Copy link

alexclst commented Nov 21, 2020

@baumhoto, if this is indeed a bug in AppKit, and just testing the code on my M1 Mac gets the same output, you should report it to Apple using the Feedback Assistant app (where they want bug reports sent in these days). Attach a Playground that exhibits it for them. It seems this app will not be fixed until the OS itself gets that bug fixed. Indeed, the app isn't broken in all likelihood, just the API in AppKit is. Or if you're uncomfortable reporting it to Apple I could. But you're the one who pointed this out, so if you want to please do report it to Apple.

@baumhoto
Copy link

baumhoto commented Nov 22, 2020

@alexclst just reported it to Apple using the Feedback assistant: FB8912103

Tried to avoid the issue by hardcoding my monitor values but the DCC Framework doesn't find my monitor even if I pass in the correct displayid. So there seems to be an issue with that as well.

@JoniVR JoniVR added the Priority: Major Issue is major (e.g. A lot of things broken…) label Nov 22, 2020
@JoniVR JoniVR changed the title MonitorControl not working with M1 MacBook Air MonitorControl not working on Apple Silicon Macs Nov 22, 2020
@Flipsoo
Copy link

Flipsoo commented Nov 22, 2020

+1 for me, not to ignore that I love your app and normally everything works fine (on every other Big Sur system) !!!

@hstriepe
Copy link

+1 for me MacBook Pro 12" M1 with USB-C Dell UW38 running 11.1b1

@ghost
Copy link

ghost commented Nov 25, 2020

Same issue here with the new MacBook Air running the M1 chip.

@ZeroPie
Copy link

ZeroPie commented Nov 25, 2020

I can reproduce it.
Works on my MBP13(10th Intel) BigSur 11.0.1
Does not work on MBP13 M1 Big Sur 11.0.1
Does it make sense to submit additional Bug Reports or is @baumhoto report enough?

@aednichols
Copy link

I think we’ve established the problem is legit and reproducible 😄 I suspect the most productive move would be to file dupes referencing FB8912103 to vote our issue up in Apple’s bug backlog.

@JoniVR
Copy link
Member

JoniVR commented Nov 25, 2020

I agree with @aednichols, I'd also like to remind everyone to please avoid just "+1" comments, if you're going to add a comment, try to add value to the discussion so we don't all get spammed with "+1" comments, in that case just give a 👍 , I know everyone does this with the best intentions but it doesn't add much value to the discussion and actually makes it harder to find important information.

Personally I'm not planning on upgrading to an M1 machine soon (just bought a 16" a year ago) but I'd be happy to move the project forward through merging PRs and doing what I can to help.

@alexclst
Copy link

I just reported it: FB8917354. I attached to it the following playground that illustrates the problem:
M1MonitorBug.playground.zip. I also referenced @baumhoto feedback ID, as well as this issue.

@aednichols
Copy link

I submitted another Feedback duping FB8912103.

@JoniVR I'm a developer with an M1 so if we hear from Apple about a fix I can test on my machine.

Thanks for the great app!

@ghost
Copy link

ghost commented Nov 27, 2020

Is there a time frame for removing this issue?

@dschuler
Copy link

dschuler commented Nov 30, 2020

I just reported it: FB8917354. I attached to it the following playground that illustrates the problem:
[M1MonitorBug.playground.zip]

On 11.0.1 (20B29) with an M1 Mac mini, .localizedName isn't nil for me and returns the correct monitor string: "DELL U2718Q". That's what should be happening, right? The main project calls .displayName, which does return nil, because IOIteratorNext(servicePortIterator) doesn't return anything. That seems to be a problem, but I could live without the name being populated.. so then I tried to see if I can get a DDC object, but that always returns nil here.

That would be required to make this work, right? Does it make sense to file a separate issue for this, or are the name and the DDC object being nil related @alexclst?

@alexclst
Copy link

alexclst commented Dec 2, 2020

That would be required to make this work, right? Does it make sense to file a separate issue for this, or are the name and the DDC object being nil related @alexclst?

Honestly I don't know, @dschuler. I've never helped write this, or any other, app that handles monitors. I just ran into this problem as a user, and being a developer could test the possible AppKit bug in a Playground. So I'm not knowledgeable enough to answer your questions.

@aednichols
Copy link

@dschuler it seems to me that the problem is with the numerical ID always returning 1. Rather than any of the strings, which are used cosmetically.

@waydabber
Copy link
Member

Beta8 is now out.

https://github.com/MonitorControl/MonitorControl/releases/tag/v3.0.0-beta8

@hstriepe
Copy link

hstriepe commented Aug 15, 2021 via email

@simonmcl
Copy link

Beta 8:

  • Machine: M1 Mac Mini
  • Monitor: LG 49WL95C-WE
  • Cable: USB-C

Initially the volume slider was hidden. Had to enable it via the menu, started working once I closed the menu. Brightness and volume work as expected using keyboard controls.

If I put my mac to sleep, when it re-opens I loose all functionality from MonitorControl. I have to close and reopen the app to get it back working

@MaikD77
Copy link

MaikD77 commented Aug 16, 2021

Beta 8:

  • Machine: MacBook Pro M1
  • Monitor: DELL U3219Q
  • Cable: USB-C

The volume control is displayed on the on-screen display, but it does not work. The brightness, on the other hand, works flawlessly - on both displays.

@waydabber
Copy link
Member

Beta 8:

  • Machine: M1 Mac Mini
  • Monitor: LG 49WL95C-WE
  • Cable: USB-C

Initially the volume slider was hidden. Had to enable it via the menu, started working once I closed the menu. Brightness and volume work as expected using keyboard controls.

If I put my mac to sleep, when it re-opens I loose all functionality from MonitorControl. I have to close and reopen the app to get it back working

Hi,

was it like this with previous betas as well?

There is about a 5 second waiting period after sleep until things start to work after sleep. Are you sure it doesn't work afterwards?

@simonmcl
Copy link

@waydabber ah didn't know about the initial delay. Did some testing and yes you are correct, if I wait long enough it does wake back up by itself. Seems to be all fine on my setup then, thanks!

@waydabber
Copy link
Member

@waydabber ah didn't know about the initial delay. Did some testing and yes you are correct, if I wait long enough it does wake back up by itself. Seems to be all fine on my setup then, thanks!

Ok, thanks. The delay is there for displays that very long time to recover. I might decrease it a bit but that might cause issues with some units (like those which have CCFL backlights or slow firmwares).

@simonmcl
Copy link

Configurable in an advanced menu might be good too. I'd be fine with playing around with it once to figure out what my monitor needs and then just leaving the setting like that forever

@waydabber waydabber self-assigned this Aug 20, 2021
@waydabber waydabber added the Status: Done Work on this issue is complete. Will be available on next release label Aug 20, 2021
@waydabber
Copy link
Member

Hi all, we released 3.0.0 RC1 with Apple Silicon support. Please let us know if you have any issues by opening a new issue or share your feedback under the release discussion. I'll close this issue now. Thank you all for the help, testing and feedback during the betas!

https://github.com/MonitorControl/MonitorControl/releases/tag/v3.0.0-rc1

@JoniVR JoniVR unpinned this issue Aug 21, 2021
@Blackspell01
Copy link

Unfortunately my benq monitor (HDMI) is still not recognized, while my secondary screen (Displayport) works now...

@waydabber
Copy link
Member

H @Blackspell01i, if you are trying to control a display using the HDMI port of the M1 mini, it won't work as for some reason DDC communication is blocked on the HDMI port (both on the 2018 Intel mini and the M1 mini). There is no known way to get around this limitation. You can use software mode on such a display to control brightness.

@Blackspell01
Copy link

why is it blocked? On my older Mac mini which I sold recently it worked flawlessly via HDMI...

@waydabber
Copy link
Member

On older macs it works. There is probably no real valid reason behind it, it might simply be a bug either in hardware or software design, but Apple does not regard DDC communication as a supported feature so they don't care and offer zero support regarding this. :(

@jordanwan
Copy link

jordanwan commented Sep 15, 2021

I have an M1 Mac Mini and drive two external monitors, both Dell U2713H. Unfortunately the monitors while capable of displaying a 2560x1440 resolution will always downscale the output to 1080 when using HDMI rather than DisplayPort.

Of course, the M1 Mac Mini will only support up to a single monitor from a USB-C > DisplayPort adapter, but a practical workaround for me has been to also connect an active HDMI > DisplayPort adapter that I have (Cable Matters to DisplayPort Adapter) which manages to feed a DisplayPort signal (from the Mac Mini HDMI output) to my secondary monitor while supporting its full 2560x1440 resolution.

However, despite this monitor receiving a DisplayPort signal its control method from MonitorControl is limited to software only mode.

Is this a real limitation of my configuration, where a DDC signal is simply not capable of being sent through the HDMI > DisplayPort adapter path?

Thank you.

@jordanwan
Copy link

jordanwan commented Sep 15, 2021

I had previously reported an issue with an active HDMI > DisplayPort adapter which I suspect may not be solvable. I have another issue regarding volume control of the other monitor (direct USB-C > DisplayPort) and am entering it here as a separate issue since it does not involve the HDMI > DisplayPort adapter.

My primary monitor is a Dell U2713H connected via DisplayPort. This monitor does not have built-in speakers from the factory but Dell sells a soundbar add-on separately which connects to a power output on the back of the monitor as well as a 3.5mm analogue audio output also provided by the monitor.

The way that MacOS sees this is that the monitor is a DisplayPort audio device and can be selected. With my previous Intel MacBook Pro, Monitor control was able to adjust the volume of this device using the keyboard volume buttons and the OSD would reflect any volume change.

With my new M1 Mac Mini and Monitor Control 3.0 this no longer works. What occurs instead is that the OSD display indicates a volume change but the actual volume level output from the speaker remains unchanged. In addition to this the native MacOS volume slider (available from the menubar) remains unchanged and in "locked" mode at 100%.

Thank you.

@waydabber
Copy link
Member

You can try m1ddc to see if it can control the display as it has no any artificial block. Also you can simply remove lines 275-277 here and build the app:

if ioregService.transportDownstream == "HDMI", ioregService.serviceLocation == 1, modelIdentifier == "Macmini9,1" {

@Blackspell01
Copy link

Ok i understand, very sad, why would apple do this?
Can someone tell me if this adapter would solve my problem? So I would connect both monitors to the adapter and can use ddc?

@jordanwan
Copy link

jordanwan commented Sep 15, 2021

You can try m1ddc to see if it can control the display as it has no any artificial block. Also you can simply remove lines 275-277 here and build the app:

if ioregService.transportDownstream == "HDMI", ioregService.serviceLocation == 1, modelIdentifier == "Macmini9,1" {

Thanks for the suggestion @waydabber but unfortunately it wasn't successful. Removing lines 275-277 and then disabling software only mode simply results in the display not changing brightness at all.

This wasn't completely unexpected, as I assume if DDC is not being sent to the HDMI port on a hardware level then an active HDMI > DisplayPort adapter won't make it appear from nothing.

@waydabber
Copy link
Member

@Blackspell01 - if this adapter can handle multiple displays connected at the same time then internally it uses DisplayLink which is not supported. :( . If not, then you won't be able to use more than one port at the same time I am afraid.

@waydabber
Copy link
Member

https://www.delock.com/produkt/63929/pdf.html?sprache=en

"Only one monitor can be used on the adapter."

@YiquanGu
Copy link

Beta 8:

  • Machine: MacBook Pro M1
  • Monitor: DELL U3219Q
  • Cable: USB-C

The volume control is displayed on the on-screen display, but it does not work. The brightness, on the other hand, works flawlessly - on both displays.

Same problem here. Have you found a solution? Thanks.

@korzhan
Copy link

korzhan commented Oct 25, 2021

Beta 8:

  • Machine: MacBook Pro M1
  • Monitor: DELL U3219Q
  • Cable: USB-C

The volume control is displayed on the on-screen display, but it does not work. The brightness, on the other hand, works flawlessly - on both displays.

Same problem here. Have you found a solution? Thanks.

No. The error was never corrected.

@YiquanGu
Copy link

Beta 8:

  • Machine: MacBook Pro M1
  • Monitor: DELL U3219Q
  • Cable: USB-C

The volume control is displayed on the on-screen display, but it does not work. The brightness, on the other hand, works flawlessly - on both displays.

Same problem here. Have you found a solution? Thanks.

No. The error was never corrected.

Thanks for the update!

Is the difficulty due to DELL's implementation of the technology and hence a hardware issue?

@nick-sturrock
Copy link

Same issue:

MonitorControl v4.02
Machine: MacBook Pro M1
Monitor: DELL S2719DC
Cable: USB-C

@kitsudog
Copy link

kitsudog commented Mar 25, 2022

Same issue:

MonitorControl v4.02 - 6965
Machine: MacBook Pro M1 MAX
Monitor: LG 27UN880
Cable: USB-C is ok
Cable: HDMI - buildin not work
Cable: UBC-C dock + HDMI is ok

@MonitorControl MonitorControl locked as resolved and limited conversation to collaborators Mar 25, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Priority: Major Issue is major (e.g. A lot of things broken…) Status: Done Work on this issue is complete. Will be available on next release Type: Bug Issue is a bug (e.g. Crash, …)
Projects
None yet
Development

Successfully merging a pull request may close this issue.