ddcutil

Announcements

22 July 2017

Release 0.8.4 primarily contains packaging changes to meet Fedora distribution standards.

For a complete list of changes and bug fixes, see Release Notes. Prior annoucnements can be found here.

17 May 2017

Release 0.8.2 contains minor enhancements, primarily to diagnostics in the environment and interrogate commands.

For a complete list of changes and bug fixes, see Release Notes. Prior annoucnements can be found here.

05 May 2017

Release 0.8.1 is a bugfix release that addresses a segfault that can occur when scanning for USB connected monitors.

For a complete list of changes and bug fixes, see Release Notes. Prior annoucnements can be found here.

01 May 2017

Release 0.8.0 contains new features intended to address issues with particular monitors and user environments, and to improve performance

The most significant changes visible to users are:

  • If there are multiple monitors and option --async is specified, initial monitor checks are performed in separate threads. Users with multiple monitors should see significantly better startup time.
  • If a display is specified by its I2C bus number (option --bus) and option --nodetect is specified, global display detection is skipped, improving performance.
  • By default, setvcp and loadvcp now read the VCP value after it has been set, to confirm that the monitor has made the change requested.
  • Command getvcp --terse now reports VCP settings in a form that is easily machine readable.
  • The C API has been extensively revised. Many names have changed for consistency and clarity.
    (Apologies to those of you who have written applications.)

For a complete list of changes and bug fixes, see Release Notes. Prior annoucnements can be found here.

29 April 2017

At some time in the recent past, the files for release 0.7.3 in the OpenSUSE Build Service were corrupted with files from the test system. Symptoms of this corruption include

  • Prefixing a VCP feature code number with "0x" causes a segfault, e.g. "ddcutil setvcp 0x10 50"
  • Command line option "--verify" is recognized

As of this morning, the production ddcutil project on OBS was restored to release 0.7.3.

Introduction

ddcutil is a Linux program for querying and changing monitor settings, such as brightness and color levels.

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

Other common uses include:

  • Switching monitor input
  • Controlling brightness

Restrictions:

  • ddcutil does not support laptop displays, which are controlled using a special API, not I2C.
  • Nvidia's proprietary video driver may require special configuration. See Special Nvidia Driver Settings.
  • Operation with AMD's proprietary video driver fglrx requires a specially built version of ddcutil. See Building with ADL Support.
  • Reading and writing Table type features is implemented but untested. See Table Features

Command Overview

ddcutil is a command line program. (A GUI user interface is planned.) ddcutil implements the following subcommands:

Subcommand Function
detect report monitors detected
capabilities report a monitor's capabilities string
vcpinfo (feature-code-or-group) list VCP features codes that ddcutil knows how to interpret
getvcp feature-code-or-group report a single VCP feature value, or a group of values
setvcp feature-code new-value set a single VCP feature value
dumpvcp filename save color related VCP feature values to a file
loadvcp filename restore color related VCP feature values from a file
environment explore the ddcutil installation environment (other than USB)
usbenv explore USB aspects of the ddcutil installation environment
probe explore the capabilities string and probe the features of a single monitor
interrogate collect maximal information for problem diagnosis
chkusbmon /dev/hiddevN used by udev rules to test if a USB device represents a monitor

There is an extensive set of options for tailoring ddcutil operation. Some are described in this documentation. For a full list of options and detailed documentation for each command, use the --help option or see the man page:

$ ddcutil --help
$ man 1 ddcutil

Monitor Selection

If more than one monitor is attached, the desired monitor can be specified using any of the following options:

--display <display number>
--bus <i2c bus number>
--adl <iAdapterNumber>.<iDisplayNumber>
--usb <usb bus number>.<usb device number>
--edid <256 character hex string>
--mfg <mfg code> --model <model name> and/or --sn <serial number>

Notes:

  • Monitors under control of AMD's proprietary driver (fglrx) are selected by adapter number and display number. These numbers are specified on the --adl option separated by a period, e.g. "--adl 1.0"
  • Any combination of manufacturer code, model name and serial number can be used together to identify a monitor. The first monitor to satisfy all the specified criteria is selected. (This behavior differs from releases prior to 0.7 where model name and serial number had to be specified together.)

To see a list of all attached monitors and their associated identifiers:

$ ddcutil detect

Examples

Installing ddcutil From Prebuilt Packages

Packages for recent Debian, Fedoray, openSUSE, and Ubuntu releases are available for download from the openSUSE Build Service. Unfortunately, there's not one clean link for downloading OBS packages, so here are several.

  • Add repository and download package ddcutil. This is all you will need if just installing the command line version of ddcutil.
  • All ddcutil packages Packages for both the command line and shared library version of ddcutil. Note that the development package is named libddcutil-devel on RPM based distributions (SUSE, Fedora) and libddcutil-dev on dpkg based distributions (Debian, Ubuntu).
  • File system view

For Ubuntu xenial, there's a PPA. To use it, add the following lines to /etc/apt/sources.list:

deb http://ppa.launchpad.net/rockowitz/ddcutil/ubuntu xenial main 
deb-src http://ppa.launchpad.net/rockowitz/ddcutil/ubuntu xenial main 

For other distributions, or if using AMD's proprietary fglrx driver, ddcutil must be built from source.

ddcutil Configuration

DDC/CI communication must be enabled on the monitor. This setting can only be changed using the monitor's on screen display.

ddcutil users require write permission to /dev/i2c-* devices. See /dev/i2c Permissions

If using an open source video driver, kernel module i2c-dev must be loaded. See Kernel Module Configuration

If using Nvidia's proprietary video driver, special settings may be necessary. See Special Nvidia Driver Settings

Installation Diagnostics

If ddcutil installs successfully but execution fails, command ddcutil environment can be used to probe the I2C environment and may provide clues as to the problem. For USB connected monitors, use command ddcutil usbenvironment.

Additional Topics

Author

Sanford Rockowitz rockowitz@minsoft.com