Frequently Asked Questions

ddcutil can't communicate with a monitor when it's plugged into a docking station.

ddcutil does work when the monitor is plugged directly into the laptop. The problem affects DisplayPort, DVI, and HDMI connectors on the dock.

This is a problem with newer docking stations that implement DisplayPort Multi Stream Transport, and appears to be a bug in the DRI driver code.

For the gory details, see this thread on the Intel-gfx developers list.

I'm using Nvidia's proprietary driver. ddcutil doesn't seem to be be working.

Symptoms include "DDC communication failed" on ddcutil detect, and lots of "Maximum retries exceeded" errors on command ddcutil getvcp known.

You may need the Nvidia secret handshake. See Special Nvidia Driver Settings.

The capabilities command reports the MCCS (aka VCP) version, but elsewhere ddcutil says the version is unknown.

DDC/CI has two ways of reporting the the MCCS version:

  • As part of the capabilities string returned in response to a DDC Capabilities Request.
  • As the response to a VCP Feature Request for feature xDF (VCP Version).

Sometimes they disagree.

Command ddcutil capabilities reports the response to the DDC Capabilities Request. However, ddcutil regards this output as purely informational. It does not use the capabilities string when formulating commands and interpeting responses. This is for multiple reasons:

  • A DDC capabilities request requires multiple I2C exchanges, making it both slow and unreliable. Because of its complexity, it is particularly vulnerable to I2C errors. On monitors with paticularly poor I2C implementations it sometimes fails because the maximum number of I2C retries is exceeded.

  • There is no capabilities request defined in the programming interface for USB connected monitors. ddcutil simulates a capabilities response by looking at what USB HID reports exist for feature codes.

  • The response to the DDC capabilities API request may be incorrect. For example, the capabilities response from the HP LP2480zx monitor does not list VCP feature code x10 (brightness) as supported. However, feature code x10 is in fact supported. The only way to know for sure if a monitor implememts a VCP feature code is to try it.

ddcutil therefore relies on VCP feature code xDF to determine the VCP version. (For USB connected monitors, it queries HID usage x00800004.) It is possible that feature code xDF is unsupported, even though the capabilities response specifies a version.

ddcutil detect --verbose reports that both I2C address x50 (EDID) and x37 (DDC) are responsive, but DDC communication fails.

There can be any number of reasons for this situation.

The same DisplayPort connected monitor appears twice the output of ddcutil detect.

Sometimes the same DisplayPort connected monitor is detected at 2 different I2C bus numbers. ddcutil detect reads the EDID at on both buses, but DDC communication succeeds on only 1 bus. The other bus is regarded as an invalid display. The invalid bus appears to be related to the DisplayPort multistream facility. You can ignore the invalid entry.

The detect command reports different EDIDs depending on how the monitor is connected to the video card.

Strange as it may seem, a monitor can have more than one EDID. The EDID for a VGA connection will have a different video input definition (byte x14) than that for a digital connection. The VGA version of the EDID will have timing information.

The detect command reports that I2C bus address x30 (EDID block number) is inactive.

EDID version 1.4 allows for addtional 128 byte EDID blocks. I2C bus address x30 specifies which block to read. These blocks generally contain extended timing information. ddcutil is interested only in the contents of the first EDID block. The check of bus address x30 is purely informational.

configure complains that a required package does not exist, but it is installed on my system.

When building ddcutil, error messages from pkg-config (which is called by configure) can be misleading. If configure complains that a package is not found but it seems to be installed, it's likely that what's missing is the associated development package (with a suffix like "-dev").