ddcutil
Control monitor settings from the command line
TLDR
List all compatible displays
Change the brightness (option 0x10) of display 1 to 50%
Increase the contrast (option 0x12) of display 1 by 5%
Read the settings of display 1
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)


