LinuxCommandLibrary

ddcutil

Control monitor settings from the command line

TLDR

List all compatible displays

$ ddcutil detect
copy

Change the brightness (option 0x10) of display 1 to 50%
$ ddcutil [[-d|--display]] [1] setvcp [10] [50]
copy

Increase the contrast (option 0x12) of display 1 by 5%
$ ddcutil [[-d|--display]] [1] setvcp [12] [+] [5]
copy

Read the settings of display 1
$ ddcutil [[-d|--display]] [1] getvcp [ALL]
copy

SYNOPSIS

ddcutil [global-options] command [command-options] [command-args]

PARAMETERS

--bus NNN
    Specifies I2C bus number (e.g. --bus 5)

--display NNN
    Selects monitor by display number from detect (e.g. --display 1)

--edid
    Shows EDID data for the monitor

--force-slave-address AAA
    Forces DDC slave address (hex, 3 digits)

--help
    Displays help for command or global options

--id ID_SPEC
    Selects display by identifier (bus/display)

--noverify
    Skips verification after setvcp operations

--output-format FORMAT
    Sets output to table|csv|json|yaml (default table)

--quiet
    Suppresses non-essential output

--terse
    Minimizes all extraneous output

--usb
    Uses USB HID channel (ddcutil 1.4.0+)

--version
    Shows ddcutil version information

DESCRIPTION

ddcutil is a versatile command-line tool for Linux that enables users to interact with monitors supporting the DDC/CI (Display Data Channel / Command Interface) protocol via the I2C bus. It allows querying monitor status, retrieving EDID information, detecting capabilities, and adjusting settings such as brightness (feature 10), contrast (12), volume, color presets, luminance, and more.

The utility excels in multi-monitor setups, supporting selection by bus, display number, or ID. Commands like detect list connected displays, capabilities enumerate supported VCP features, getvcp and setvcp handle value retrieval and modification, while watch monitors changes in real-time. Output formats include table, CSV, JSON for scripting.

ddcutil is invaluable for automation, like dynamic brightness control or integration with tools like redshift. It requires the i2c-dev kernel module and proper permissions. Compatibility depends on monitor firmware; not all features are writable across models. Recent versions add USB HID support for broader hardware compatibility.

CAVEATS

Requires i2c-dev module and i2c group membership or root. Monitor support varies; some features read-only. Settings may reset on power cycle. Use --verify for setvcp confirmation.

COMMON COMMANDS

detect: Detects monitors.
getvcp 10: Gets brightness.
setvcp 10 75: Sets brightness to 75.
capabilities: Lists VCP features.
watch: Monitors feature changes.

SETUP

Install: sudo apt install ddcutil (Ubuntu).
Enable: sudo modprobe i2c-dev.
User: sudo adduser $USER i2c; relogin.

HISTORY

Developed by Gary Hook starting 2018 as a robust, user-friendly replacement for legacy tools like ddcprobe and ddccontrol-db. Actively maintained; version 2.1.7 (2024) adds USB support, JSON output, improved multi-monitor handling.

SEE ALSO

i2cdetect(8), ddccontrol(1), read-edid(1)

Copied to clipboard