ddcutil 2.2.0 Release Notes

For libddcutil changes, see Shared Library Changes for Release 2.2.0.

For ddcui changes, see ddcui Release Notes

For notes on releases prior to 2.2.0, see Notes for Releases 2.1.4 and Earlier.

2.2.0

17 February 2025

Release 2.2.0 contains some enhancements, particularly for display change detection, numerous small changes, and a large number of bug fixes.

DisplayLink devices, using the evince driver, are supported.

Raspberry Pi

  • Fix display not found and DDC communication failure on Raspberry Pi. Do not rely on sysfs attributes that do not exist for ARM devices. Resolves github issues 403, 413.
  • Miscellaneous changes to allow for building on raspbian.

User Defined Features

  • Add feature type XNC (Extended Non-Continous). This is like simple NC, but the SH byte is also reported. Provides a solution to the primary problem raised in github issue 403. Note that this feature type was created for use in user defined feature definitions; there are no features of this type defined in the Monitor Control Command Set specification.
  • Allow SNC (Simple Non-Continuous) as alternative name for NC (Non-Continuous).
  • Report user defined features as part of parsed capabilities.
  • Commands recognizing user defined features now fail if there's an error loading a user defined feature file. The commands are capabilities, setvcp, dumpvcp, and probe.
  • Fix error msg when nothing follows VALUE in user defined feature file.
  • When processing a user defined feature file, recognize any whitespace character (e.g. tab), not just space.

Command detect

  • Only show details about DDC communication errors if option --verbose is in effect.
  • Provide a clearer message if slave address x37 is inactive:
    • "Monitor does not support DDC" instead of generic "DDC_commnication failed"
    • If option --verbose is in effect, emit an additional message to check the monitor's OSD.
  • Report the Monitor Model Id in the --verbose output.
  • Report the connector id and DRM connector name in --verbose output

Command setvcp

  • Do not report "Interpretation may not be accurate." when the VCP version cannot be determined. This message is irrelevant for setvcp, which does not interpret feature values. Partially addresses github issue 454.

Commands interrogate and environment --verbose

  • Force settings --disable-cross-instance-locking, --disable-dynamic-sleep.
  • When probing DRM, recognize bus types DRM_BUS_PLATFORM, DRM_BUS_HOST1X, reported as "platform", "host1x".
  • The simple getvcp test was not reporting the bytes of the response packet.
  • If no device with class x03 was found, the user's home directory was dumped. Addresses github issue 413.
  • Remove "-i" option on get-edid command. Does not exist on some versions.

Udev rules

  • /usr/lib/udev/rules.d/60-ddcutil-i2c-rules:
    • Also give logged on user r/w access to /dev/dri/cardN, needed to allow the logged on user to probe connectors using DRM.
  • Do not install /usr/lib/udev/rules.d/60-ddcutil-usb.rules, delete it if previously installed. Addresses github issues 405, 428, 437. The UDEV rule in the file checks whether a /dev/hiddev device might possibly be used for VCP communication, and if so grants the logged on user RW access to the device. It is relevant only in the case of monitors that use USB instead of I2C to communicate with the monitor's Virtual Control Panel, and whose usage conforms to the USB Monitor Control Class Specification. Such monitors have proven to be extremely rare.

Parser changes

  • Add alternative option names for symmetry with other options:
    • --discard-capabilities-cache is an alias for --discard-cache capabilities
    • --discard-sleep-cache is an alias for --discard cache dsa
    • --discard-dsa-cache is an alias for --discard cache dsa
  • Eliminate --enable-dsa-cache as alias for --enable-dynamic-sleep-cache.
  • Improve handling of --verify/--noverify, error if both specified
  • Add --enable-flock and --disable-flock as aliases for --enable-cross-instance-locks and --disable-cross-instance-locks.

Minor Bug Fixes and Changes

Debugging and Tracing

  • Improve use of syslog. Prepend messages with thread id.
  • Additional trace groups CONN for functions related to detecting display connection events, and SYSFS for functions querying /sys.
  • Optionally maintain thread-specific traced function stacks for debugging. Activated by option --enable-traced-function-stack.

Building ddcutil

  • As an aid to development, the build date and time are normally embedded in the ddcutil and libddcutil executables. This is reported using command ddcutil --version --verbose. libddcutil reports this to the system log. If reproducible builds are required, use configure option --disable-build-timestamp.
  • configure options --enable-x11/--disable-x11 are restored. The default is --enable-x11. The X11 RandR API works on Wayland as well as X11, and is used for display change detection.
  • Changes for portability:
    • Use printf() formats %jd and %zd to portably print variables of type ssize_t, and time_t, so as to build unchanged on architectures such as armel, armhf.
    • Avoid a possible warning messages (dependant on compiler configuration) when a switch() construct is used. Replaced with if/else if/else. Resolves github issue 458:Fix build with -Werror=format-security and GCC 14.2.1
  • Additional compiler warnings to tighten code, specified in automake variable AM_CFLAGS.