ddcutil and ddcui

Announcements

15 June 2023

Release candidates ddcutil 2.0.0-rc1 and ddcui 0.4.0-rc1 are now available for testing as branches with those names on the github ddcutil and ddcui repositories.

ddcutil 2.0.0 is a major release. It provides significant performance improvements by caching information queried from displays across program invocations, and by dynamically adjusting the sleep-multiplier time. It also should work "out of the box", without the need for post-installation configuration.

The libddcutil API has been both extended and simplified. Because certain important changes broke backward compatibility, I took the opportunity for a major API cleanup. Unneeded functions were removed, including many that were previously deprecated. Most client programs should build with minimal changes. The new SONAME is libddcutil.so.5. For backwards compatibility, libddcutil.so.4 from ddcutil 1.4.1 will continue to be available as a separate package.

ddcui 0.4.0-rc1 is built to work with the updated API in ddcutil 2.0.0-rc1.

Preliminary release notes are available at Notes for the Next ddcutil Release (Draft), Shared Library Changes for the Next Release (Draft), and Notes for the Next ddcui Release (Draft). Changes are also summarized in the CHANGELOG.md files in the respective source trees.

17 January 2023

ddcutil release 1.4.1 fixes a critical bug in release 1.4.0. The default sleep-multiplier value was 0 instead of 1. As a result, commands that did not have an explcit --sleep-multiplier option would fail. All users of release 1.4.0 should upgrade. Thanks to github users copysiper (Oleg Tsvetkov) and fionnb for their help in quickly identifying and resolving this bug.

13 January 2023

ddcutil release 1.4.0 contains the following changes of general interest:

  • ddcutil installation now creates a udev rule file that gives the logged on user read/write access to I2C devices associated with video monitors. Use of group i2c for granting permission to non-root users is, in general, no longer needed.
  • Use of driver i2c-dev's file io interface (read()/write()), removed in release 1.3.0, has been restored. When i2c-dev's ioctl() interface is used the the Nvidia proprietary driver, depending on how the driver was built, it is possible for display detection to fail. If the Nvidia failure is detected, ddcutil switches to using the read()/write() interface for the Nvidia driver. In this case option --force-slave-address may be needed to handle EBUSY errors. For all other video drivers, the ioctl() interface is used and --force-slave-address has no effect.

For a detailed description of ddcutil changes and bug fixes, see Release Notes.

Prebuilt packages for several Linux distributions and machine architectures can be found in the usual locations.

Prior announcements can be found here.

Introduction

ddcutil is a Linux program for managing monitor settings, such as brightness, color levels, and input source. Generally speaking, any setting that can be changed by pressing buttons on the monitor can be modified by ddcutil.

ddcutil primarily uses DDC/CI (Display Data Channel Command Interface) to communicate with monitors implementing MCCS (Monitor Control Command Set) over I2C. Normally, the video driver for the monitor exposes the I2C channel as devices named /dev/i2c-n. Alternatively, there is support for monitors (such as Eizo ColorEdge displays) that implement MCCS using a USB connection. See USB Connected Monitors.

A particular use case for ddcutil, and the one that inspired its development, is as part of color profile management. Monitor calibration is relative to the monitor color settings currently in effect, e.g. red gain. ddcutil allows color related settings to be saved at the time a monitor is calibrated, and then restored when the calibration is applied.

Restrictions:

  • ddcutil does not support laptop displays, which are controlled using a special API, not I2C.
  • Generally speaking, ddcutil can be built in a virtual machine, but will not run in a VM. This is because the virtual video drivers do not implement I2C. However, if the VM is connected to a separate video card and is running a non-virtualized driver for the card in passthru mode, then ddcutil will work.
  • Nvidia's proprietary video driver may require special configuration. See Special Nvidia Driver Settings.
  • Reading and writing Table type features is implemented but untested. See Table Features

ddcutil is released under the GNU Public License, V2 (GPLV2). The source is hosted on Github.

General support questions are best directed to the issue tracker on Github. Use of that forum allows everyone to benefit from individual questions and ideas. For details, see Technical Support.

ddcui

ddcui is a graphical user interface to ddcutil, built using Qt. For further information, see ddcui Overview.

ddcui is released under the GNU Public License, V2 (GPLV2). The source is hosted on Github.

ddcui questions should also be directed the to the ddcutil issue tracker on Github.

Topics

Using ddcutil:

Commands and Options:

Installation and Configuration:

Other:

Packaging Status In Distribution Repositories

For packages maintained by ddcutil, see Installing ddcutil and ddcui from Prebuilt Packages

ddcutil Status

ddcutil packaging status

ddcui Status

ddcui packaging status

Author

Sanford Rockowitz rockowitz@minsoft.com