ddcctl icon indicating copy to clipboard operation
ddcctl copied to clipboard

DDC commands fail on macOS but work on Windows

Open quantumgolem opened this issue 4 years ago • 12 comments

So here is a peculiar issue that I have been having. I have a $20 USB C hub that contains an HDMI port, and a $150 docking station which contains two HDMI ports. (Update: it's the "TierGrade" USB 3.1 Gen 2 docking station)

When I connect my display via HDMI through the USB C hub (MacBook Pro — USB C Hub — HDMI to HDMI — Dell U2415), DDC commands work fine and all is well.

When I connect my display via HDMI through the docking station (MacBook Pro — USB 3.1 Gen 2 cable — USB C docking station — HDMI to HDMI — Dell U2415), things start going awry. I get a DDC failed error:

D: NSScreen #724068817 (1920x1200 0°) 94.00 DPI
I: found 1 external display
I: polling display 1's EDID
I: got edid.serial: XXXXXXXXXXXX
I: got edid.name: DELL U2415
D: action: b: ?
D: querying VCP control: #16 =?
E: No data after 10 tries!
E: DDC send command failed!
E: VCP control #16 (0x10) = current: 0, max: 0

I largely attributed this to the docking station not supporting DDC. However, I tried something recently which changed my mind.

I used a Windows laptop with USB C and attached it to the docking station. I then tried to control the brightness with Dell Device Manager, and to my surprise, it worked! I could control brightness, contrast, color temperature, color profiles, and even set up automatons to control the color profile based on the app that was in the foreground.

I then disabled DDC using the monitor'd HUD to test if it was using DDC or some other protocol to change these settings. Sure enough, it stopped working and DDM could no longer control the monitors settings.

So it seems as though the docking station supports DDC commands after all, and it works on Windows but does not work with ddcctl. Any ideas why this might be the case? I would really love to use this docking station to control the brightness!

quantumgolem avatar Aug 21 '20 11:08 quantumgolem

I found some more information on Dell's website confirming that Dell Device Manager commands are sent through DDC:

This package contains the software application that allows users to configure their Dell monitor settings such as Brightness, Contrast and Preset Modes. This application requires Display Data Channel Command Interface (DDC/CI) to work. Dell monitors support DDC/CI on VGA, DVI, DP and HDMI inputs. DDC/CI is not supported on USB connection.

So that means my docking station must support DDC commands because I can use Dell Device Manager on Windows with no issues! But ddcctl doesn't work through the docking station. Very interesting. Can anyone think of some explanation for that? I wonder how I could debug this.

quantumgolem avatar Aug 21 '20 16:08 quantumgolem

@sn0wyfall similar issue here (same output), with a slight different experience:

  • Had it working on both macOS and Linux while connecting through a given USB hub (monitor -> DP to USB-C cable -> Thunderbolt port from USB Hub 1 -> Computer(s)
  • Now using a new Hub with a few ports (2x HDMI, 1x DP, 1x VGA) and it stopped working on macOS, still have to try Linux/Windows… Take it with a grain of salt for now, but from here and a few other issues in projects that rely on the same lib as https://github.com/fnesveda/ExternalDisplayBrightness and https://github.com/MonitorControl/MonitorControl it might some specific incompatibility given how OSes deal with SST/MST and how pins/internals of Hubs pass/don't pass the DDC, potentially affecting hub with more than one display input. Will try to test more and learn about it.

marnovo avatar Aug 27 '20 09:08 marnovo

Thanks for trying it out! Definitely a strange issue.

quantumgolem avatar Sep 10 '20 01:09 quantumgolem

Can confirm what @marnovo says, I have the same issue on MBP 15" 2019 over Dell WD15 dock with Philips 243V7QDSB/00. MonitorControl works fine when connecting through Unitek V300A USB-C Hub instead.

ddcctl says:

D: NSScreen #1127219889 (1920x1080 0°) 93.00 DPI
I: found 1 external display
I: polling display 1's EDID
I: got edid.name: PHL 243V7
I: got edid.serial: UHB1824022505
D: action: b: ?
D: querying VCP control: #16 =?
E: No data after 10 tries! 
E: DDC send command failed!
E: VCP control #16 (0x10) = current: 0, max: 0

wadimw avatar Sep 16 '20 18:09 wadimw

@wadimw Thank you for your feedback on this issue.

I would like to provide a couple of updates.

I have circumvented this issue as follows: use a USB C to USB A cable. Connect the USB C end to the TG dock (that doesn't support DDC commands to Mac). Then, connect the USB A end to the USB C hub. Then, connect the HDMI directly to the hub (since it supports DDC). Connect the USB C hub finally to your Mac.

This WILL limit your bandwidth to 5 Gbps which may be less than ideal. To circumvent, use Anker's (or someone else's) 10 Gbps hub, or maybe even a TB3 hub, and connect the dock to the hub using an appropriate cable which provides that much bandwidth.

Advantages:

  • If you're trying to solve this issue, it will take only $20-40 for a hub, or $60 if you want to go with 10Gbps speeds.
  • It's easy and doesn't require fiddling.

Disadvantages:

  • If you want 10Gbps it's a bit on the expensive side but if you want TB3, then it'll take probably over $100, which may be kind of expensive and you might be better off buying a more compatible dock.
  • The dock won't power your laptop anymore, so it becomes a one-cable solution
  • The series goes kind of like this: MacBook Pro — USB C hub — Some appropriate USB connection to dock & HDMI Cable — USB C docking station & Monitor — Dell U2415.
  • All monitors need go through your hub (except in very special circumstances where your hub & cable support video through USB or via MST or whatever).

Basically, this constellation is less than ideal and kind of ugly in all honestly.


I got the Anker PowerElite docking station. Yes, it's hella expensive at $300 but it's for $240 on Amazon right now, and this makes it cheaper than the CalDigit at $250 (although that one was at $210 for quite a while). The Anker's HDMI port supports DDC commands right out the box, which is nice. It also looks pretty nice. I would highly recommend anyone reading this to go with a cheaper dock however, You can get CalDigits for under 200 on eBay.

quantumgolem avatar Sep 17 '20 00:09 quantumgolem

I have a Dell D6000 docking station with three Dell S2721DGF monitors attached. All three are detected by ddcctl but I can only act upon display 1 which is the display connected via HDMI. The other two displays are connected to the dock via DisplayPort and I get the error 'Failed to poll display!'.

I don't know whether this is helpful here or should I open a new issue?

JBFUK avatar Oct 01 '20 00:10 JBFUK

@JBFUK That's interesting and might be related! Please feel free to open a new issue just in case it's not related. We can always close and issue and reference another one

quantumgolem avatar Oct 07 '20 17:10 quantumgolem

I have a D600 DisplayLink dock with TB3, with 3 additional monitors 2 of which does support DDC (sceptre 27"). however, when changing the input to this monitor I get "E: Failed to acquire framebuffer device for display" it detect all 3 monitors but only one of the 2 DDC supported displays change input with ddcctl -d 1 -i 17 command

KevinVladG avatar Jun 17 '21 15:06 KevinVladG

Can confirm what @marnovo says, I have the same issue on MBP 15" 2019 over Dell WD15 dock with Philips 243V7QDSB/00. MonitorControl works fine when connecting through Unitek V300A USB-C Hub instead.

ddcctl says:

D: NSScreen #1127219889 (1920x1080 0°) 93.00 DPI
I: found 1 external display
I: polling display 1's EDID
I: got edid.name: PHL 243V7
I: got edid.serial: UHB1824022505
D: action: b: ?
D: querying VCP control: #16 =?
E: No data after 10 tries! 
E: DDC send command failed!
E: VCP control #16 (0x10) = current: 0, max: 0

Same issue with the WD15, fails on macOS but works on Windows.

AngryKiller avatar Jul 11 '21 18:07 AngryKiller

Sorry, but i don't own any (of these) docks.

Just one mobile usb-c hub with a single hdmi port and it works, as has been pointed out.

kfix avatar Jul 12 '21 01:07 kfix

Sorry, but i don't own any (of these) docks.

Just one mobile usb-c hub with a single hdmi port and it works, as has been pointed out.

I understand. If I can do anything to help you troubleshoot this issue, I'm here ✋🏻

AngryKiller avatar Jul 12 '21 13:07 AngryKiller

I might have been too late for the party. But I wish to share some of my knowledge in docks, please let me know if I'm wrong as I'm not an expert in this area.

Docks nowadays to the best of my knowledge come into three categories:

  1. Single-Stream Transport (SST) dock: It's the most basic type of dock, where a single channel of video signal is "pass-through" from the dock directly to the monitor.
  2. Multi-Stream Transport (MST) dock: It's a more fancy dock where a single video stream is unbundled by the dock and send to multiple monitors. more info here Sadly, M1 Macs dropped support for MST, and thus many docks could only mirror the same image for multiple monitors.
  3. DisplayLink dock: It's a dock with a DisplayLink chip builtin, and could support extending multiple monitors on M1 Macs. For example the Dell D6000 dock mentioned by @JBFUK is a DisplayLink dock. However for M1 Macs the DisplayLink driver is required.

DanielYang59 avatar Mar 26 '23 05:03 DanielYang59