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

DDC commands fail on macOS but work on Windows #73

Open
quantumgolem opened this issue Aug 21, 2020 · 12 comments
Open

DDC commands fail on macOS but work on Windows #73

quantumgolem opened this issue Aug 21, 2020 · 12 comments

Comments

@quantumgolem
Copy link

quantumgolem commented Aug 21, 2020

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
Copy link
Author

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.

@marnovo
Copy link

marnovo commented Aug 27, 2020

@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.

@quantumgolem
Copy link
Author

Thanks for trying it out! Definitely a strange issue.

@wadimw
Copy link

wadimw commented Sep 16, 2020

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

@quantumgolem
Copy link
Author

@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.

@JBFUK
Copy link

JBFUK commented Oct 1, 2020

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?

@quantumgolem
Copy link
Author

@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

@KevinVladG
Copy link

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

@AngryKiller
Copy link

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.

@kfix
Copy link
Owner

kfix commented Jul 12, 2021

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.

@AngryKiller
Copy link

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 ✋🏻

@DanielYang59
Copy link

DanielYang59 commented Mar 26, 2023

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants