Skip to content

DDCutil Cheat Sheet

A compact but comprehensive reference for controlling external monitors using ddcutil. Includes detection, querying, setting values, troubleshooting, and advanced usage.

DDCutil communicates with monitors that implement the Monitor Control Command Set (MCCS) using the DDC/CI protocol on an I2C bus. Normally, the video driver for the monitor exposes the I2C bus as devices named /dev/i2c-n.

Alternatively, ddcutil can communicate with monitors that use USB to communicate MMCS, provided the monitors meet the USB Monitor Control Class Specification.

Install ddcutil on Gentoo Linux

echo "app-misc/ddcutil X usb-monitor user-permissions" > /etc/portage/package.use/ddcutil
emerge --ask app-misc/ddcutil

Files where edid is stored

cat /sys/class/drm/card0-HDMI-A-{1,2}/enabled
cat /sys/class/drm/card0-HDMI-A-2/dpms         
cat /sys/class/drm/card0-HDMI-A-2/enabled      
cat /sys/class/drm/card0-HDMI-A-2/status       
cat /sys/class/drm/card0-HDMI-A-2/connector_id 
cat /sys/class/drm/card0-DP-1/dpms             
cat /sys/class/drm/card0-DP-1/enabled          
cat /sys/class/drm/card0-DP-1/status           
cat /sys/class/drm/card0-DP-1/connector_id  

cat /sys/bus/i2c/devices/i2c-0/name            
cat /sys/bus/i2c/devices/i2c-3/name            
cat /sys/bus/i2c/devices/i2c-5/name    

cat /sys/class/drm/card0-DP-3/dpms             
cat /sys/class/drm/card0-DP-3/enabled          
cat /sys/class/drm/card0-DP-3/status           
cat /sys/class/drm/card0-DP-3/connector_id  
   
cat /sys/bus/i2c/devices/i2c-1/name 
cat /sys/bus/i2c/devices/i2c-2/name 
cat /sys/bus/i2c/devices/i2c-3/name 
cat /sys/bus/i2c/devices/i2c-4/name 
cat /sys/bus/i2c/devices/i2c-5/name 
cat /sys/bus/i2c/devices/i2c-6/name 

To allow non-root users access to the /dev/i2c-* devices

  • users to the i2c group: usermod -aG i2c $(whoami)
  • Restart the computer or reload the i2c-dev module to activate the new udev rule.
  • For more information read: http://www.ddcutil.com/i2c_permissions/
  • Running udev control --reload for reloading rules and databases ..
usermod -aG i2c $(whoami)

Show all VCP Features Codes

ddcutil getvcp known

Report VCP feature value(s)

ddcutil getvcp supportedi

Set VCP feature value

ddcutil setvcp <feature-code> [+|-] <new-value>

Write color profile related settings to file

ddcutil dumpvcp (filename)

Load profile related settings from file

ddcutil loadvcp <filename>

Store current settings in monitor's nonvolatile storage

ddcutil scs

Probe execution environment

ddcutil environment

Probe for USB connected monitors

ddcutil usbenv

Probe monitor abilities

ddcutil probe

Report everything possible

ddcutil interrogate

Check if USB device is monitor (for UDEV)

ddcutil chkusbmon

List traceable functions

ddcutil traceable-functions

DDCutil capabilities

Command ddcutil capabilities shows the capabilities sring reported by the monitor that ddcutil has identified as display number

Capabilities / Cache / DSA / Discard

Discard all capabilities

ddcutil discard all capabilities

Discard capabilities

ddcutil discard capabilities

Discard DSA data

ddcutil discard dsa

Discard cached data

ddcutil discard cache

!!! Example "VCP Info (General)

Show brief VCP info

ddcutil vcpinfo --brief

Show verbose VCP info

ddcutil vcpinfo --verbose

Show VCP info

ddcutil vcpinfo

Command ddcutil – Feature Information

Reports everything that ddcutil knows about a particular feature, including feature values.

VCP Info (Specific Features)

Verbose VCP info for code 60

ddcutil vcpinfo 60 --verbose

VCP info for code CF

ddcutil vcpinfo CF

Extract VCP codes using grep and awk

ddcutil vcpinfo|grep "VCP code"|awk 'OFS=":" {print $3}'

Verbose VCP info

ddcutil vcpinfo -v

Capabilities (Display-Specific)

Brief capabilities for display 4

ddcutil capabilities --brief --display 4

Show capabilities

ddcutil capabilities

Show brief capabilities

ddcutil capabilities --brief

Show verbose capabilities

ddcutil capabilities --verbose

Verbose capabilities for display 4 (short syntax)

ddcutil --dis 4 cap --verbose

Detecting Displays

Verbose display detection

ddcutil detect --verbose

Brief display detection

ddcutil detect --brief

Terse display detection

ddcutil detect --terse

Detect displays (default)

ddcutil detect -

USB Options

Enable USB support

ddcutil --enable-usb

Disable USB support

ddcutil --dosable-usb

DDC Checks

Set async minimum DDC checks

ddcutil detect --ddc-checks-async-min 3

Get VCP Values

Get VCP value for 'color'

ddcutil getvcp color

Get VCP values 10 and 12

ddcutil getvcp 10 12

Verbose capabilities for display 4

ddcutil --dis 4 cap --verbose

!!! Example "Set VCP Values

Set VCP 10 to 50

ddcutil setvcp 10 50

Set VCP 10 to hex 0x32

ddcutil setvcp 10 0x32

Set VCP 73 to hex x5304

ddcutil setvcp 73 x5304

Set VCP 60 to multi-byte value

ddcutil setvcp 60 01020304F1F2FEFF

Set VCP 10 to 85

ddcutil setvcp 10 85

Set VCP 10 to 85 without verification

ddcutil setvcp 10 85 --noverify

MCCS / Tables / Profiles

Show VCP info for MCCS 2.1

ddcutil vcpinfo --mccs 2.1

Show VCP info table

ddcutil vcpinfo table

Show VCP profile (terse)

ddcutil vcpinfo profile --terse

USB Monitor Check

Check USB monitor by device path

ddcutil chkusbmon /dev/usb/hiddev

Check USB monitor by index

ddcutil chkusbmon 3

Check USB monitor by device

ddcutil chkusbmon device

Check USB monitor by name

ddcutil chkusbmon name

Check USB monitor by hiddev

ddcutil chkusbmon hidev

Miscellaneous

Show SCS information

ddcutil scs

Get VCP 10

ddcutil getvcp 10

Show environment

ddcutil environment

Show USB environment

ddcutil usbenvironmen

Output Level Options

  • Options --terse (alt --brief) and --versbose decrease or increase the amount of output for many commands.
  • Multiple feature/new-value pairs can be given on a single setvcp command. For example:
ddcutil setvcp 10 50 12 75

Monitor Detection

List all detected displays

ddcutil detect

Presents a summary report of each detected display

ddcutil detect --brief

Show additional information, including the EDID

ddcutil detect --verbose

List displays with bus numbers

ddcutil detect --verbose
ddcutil detect --terse

Probe a specific I²C bus

ddcutil detect --bus=3

Query Monitor Capabilities

Dump all capabilities

  • Find mfg by: Manufacturer
ddcutil capabilities
ddcutil capabilities --display=1
ddcutil capabilities --mfg VSC 

List supported VCP codes

ddcutil vcpinfo
ddcutil vcpinfo --display=1
ddcutil vcpinfo --verbose

Show raw EDID

ddcutil get-edid
ddcutil get-edid --display=1
ddcutil get-edid --verbose

Read VCP Values

Read a single VCP code

ddcutil getvcp 10        # Brightness
ddcutil getvcp 12        # Contrast
ddcutil getvcp D6        # Input source

Read from a specific display

ddcutil getvcp 10 --display=1

Read multiple VCP codes

ddcutil getvcp 10 12 D6

Read all readable VCP values

ddcutil getvcp --all

Set VCP Values

Set brightness

ddcutil setvcp 10 50
ddcutil setvcp 10 100 --display=1

Set contrast

ddcutil setvcp 12 70

Set input source

Common values:

  • 01 VGA
  • 03 DVI
  • 0F DisplayPort
  • 11 HDMI 1
  • 12 HDMI 2
ddcutil setvcp D6 11        # HDMI 1
ddcutil setvcp D6 0F        # DisplayPort

Set multiple values in sequence

ddcutil setvcp 10 30 && ddcutil setvcp 12 60

Profiles & Bulk Operations

Load settings from a file

ddcutil loadvcp myprofile.txt

Save current settings

ddcutil savevcp current.txt

Apply settings to a specific display

ddcutil loadvcp profile.txt --display=2

Testing & Debugging

Test DDC communication

ddcutil test
ddcutil test --display=1

Enable debug output

ddcutil --debug getvcp 10

Check I²C permissions

ddcutil environment

Advanced Usage

Use a specific I²C bus

ddcutil --bus=4 getvcp 10

Force sleep between commands

ddcutil --sleep-multiplier=2 setvcp 10 80

Use USB‑C / docking station quirks

ddcutil --usb --display=1 getvcp 10

Disable MCCS checksum validation

ddcutil --noverify setvcp 10 40

Raw I²C command

ddcutil i2cget 0x37 0x10
ddcutil i2cset 0x37 0x10 0x64

Common VCP Codes (Quick Reference)

Code Meaning Notes
10 Brightness 0–100
12 Contrast 0–100
14 Select color preset sRGB, 6500K, etc
16 Red gain RGB calibration
18 Green gain RGB calibration
1A Blue gain RGB calibration
52 Audio volume Some monitors
60 Power mode On/Off/Standby
D6 Input source HDMI/DP/DVI

Example Workflows

Set brightness on all monitors

for d in $(ddcutil detect --terse | awk '{print $1}'); do
    ddcutil --display=$d setvcp 10 40
done

Switch all displays to DisplayPort

ddcutil setvcp D6 0F --display=1
ddcutil setvcp D6 0F --display=2

Backup and restore monitor settings

ddcutil savevcp backup.txt
ddcutil loadvcp backup.txt

Troubleshooting Tips

  • Add your user to the i2c group:

    sudo usermod -aG i2c $USER
    
  • Ensure kernel modules are loaded:

    sudo modprobe i2c-dev
    
  • Disable Wayland if DDC fails under GNOME.

  • Some monitors block DDC over USB‑C hubs; try direct DisplayPort.