Does Apple support DDC/CI for 3rd party displays via Apple's Thunderbolt to DVI adapter
I had a Dell 21.5" monitor, which was previously connected to a Windows PC via its DVI port, which has no problem with DDC/CI which allowed me to control brightness and Contrast of the attached display via Windows.
My question is: through Apple's adapter, can I control a non-Apple display within System Preferences?
I wish it were possible too, but the short answer is no, you can't use System Preferences to control the brightness of an external display via DDC/CI.
It might be feasible to write a program that can adjust the brightness of your external display, but it's by no means a sure thing. Read on if you want the gory details…
After doing a fair bit of research, I'm pretty sure that Apple doesn't use DDC/CI to control the brightness of displays, either internal or external.
The brightness of Apple Cinema Displays can only be adjusted when the USB interface is plugged in. With DDC/CI this would not be necessary.
-
Apple provides (though apparently does not document) an interface to display brightness through their IOKit library, specifically in ioGraphicsLib:
- http://mattdanger.net/2008/12/adjust-mac-os-x-display-brightness-from-the-terminal/
…but this interface does not seem to work reliably for external displays:
- http://njr.sabi.net/2006/06/20/setting-display-brightness-updated-tool/
( I read up on this a few years ago and while I can't now find a supporting link, I seem to recall that display brightness (at least for internal displays) may be delegated to Apple's System Management Controller (SMC), which has responsibility for all power-related functions: fan speed, monitoring battery level, etc. I wouldn't be surprised if Apple had implemented their own I²C control interface between the SMC and the internal display - but this is pure speculation on my part. )
-
It is possible to communicate with/control external displays using DDC/CI and custom software, but support for this has been broken more than once in the OS X era. DDC/CI support is also dependent on the graphics chipset and drivers used.
From http://update.necdisplay.com/spectraview/readmemac_v1_1_12_1.html:
As of Mac OS 10.8.0, support for monitor connunications[sic] via DDC/CI is not functioning on some Macs, including systems with DVI video outputs, and when using a miniDisplayPort to DVI cable or adapter. NEC is working with Apple to fix this issue in a future Mac OS update.
-
DDC/CI works over I²C. Apple's IOKit library includes an I²C interface which should make it possible to write a display control program, but there are a few reports that this does not work reliably (specifically, values can be written to the monitor but not read, so you can't tell what the current brightness is):
- http://lists.apple.com/archives/colorsync-users/2011/Feb/msg00026.html
- http://lists.apple.com/archives/darwin-dev/2012/Jul/msg00019.html
- https://stackoverflow.com/questions/11561623/i2c-communication-in-iokit-on-mac-os-x
So that's about the size of it, as far as I can tell.
If you are (or you know) an Objective-C developer, I did find a project on GitHub that you could have a look at tinkering with – however as mentioned above, even assuming the code is OK, it might not work for your combination of monitor, Mac and display drivers.
Disclaimer: I compiled this app myself(although I'm not the author). It may freeze your machine.
You can also try this app: https://github.com/superduper/BrightnessMenulet, though it allows to adjust brightness only on main display(one where menu bar appears).
I've tested it on my MacBook Pro + Dell U2412M, worked fine.
Apple software doesn't support any means to control PC monitors beyond sleeping them.
The hardware adapters will pass DDC commands through if you can send them by other means.
I use many DisplayPort/Thunderbolt to DVI adapters as well as USB-to-VGA with my ddcctl program.
Try running ddcctl -d 1 -b ?
to test whether your 1st monitor's brightness can be polled.
Then to increase the 1st monitor's brightness by 5 "ticks" (the scale varies from monitor mfg/model):
$ ddcctl -d 1 -b ? -b 5+
2015-06-19 11:46:14.081 ddcctl[39871:4302046] I: found 2 displays
2015-06-19 11:46:14.081 ddcctl[39871:4302046] I: polling display 1's EDID
2015-06-19 11:46:14.102 ddcctl[39871:4302046] I: got edid.name: LG ULTRAWIDE
2015-06-19 11:46:14.103 ddcctl[39871:4302046] D: command arg-pair: d: 1
2015-06-19 11:46:14.103 ddcctl[39871:4302046] D: command arg-pair: b: 5+
2015-06-19 11:46:15.108 ddcctl[39871:4302046] D: querying VCP control: #16 =?
2015-06-19 11:46:15.212 ddcctl[39871:4302046] I: VCP control #16 = current: 42, max: 100
2015-06-19 11:46:15.213 ddcctl[39871:4302046] D: relative setting: 42 + 5 = 47
2015-06-19 11:46:15.213 ddcctl[39871:4302046] D: setting VCP control #16 => 47
It's an old topic, but I'll still post it here, just in case.
I'm not sure about specific details of TB-to-DVI adapter, but in general you CAN control quite a lot of monitors. There's a great little free program called MonitorControl by the0neyouseek, it gives you option to control brightness, contrast, and even volume on external monitors.
I personally tested it with Samsung P2450, AOC G2460F, Dell S2240M, and even old 4:3 Samsung 710n VGA via adapter, and it worked without problems at all.