Last Updated or created 2023-02-15
I wanted to control the input of my monitors, these are my findings.
DDC – Display Data Channel
I2C – (Inter-Integrated Circuit, eye-squared-C), alternatively known as IIC, is a synchronous, multi-master/multi-slave (controller/target) bus
Getting monitor information with the ddccontrol -p command
##### PART OF THE OUTPUT ##### Detected monitors : - Device: dev:/dev/i2c-9 DDC/CI supported: Yes Monitor Name: VESA standard monitor Input type: Digital (Automatically selected) - Device: dev:/dev/i2c-7 DDC/CI supported: Yes Monitor Name: VESA standard monitor Input type: Digital - Device: dev:/dev/i2c-6 DDC/CI supported: Yes Monitor Name: VESA standard monitor Input type: Digital Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-9... I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/AOC2490.xml"
ddcutil -b 7 setvcp 0x60 0x11 # 7 is Second monitor (starts with 6), 0x60 is the input register (see below) and 0x11 is HDMI ddcutil -b 6 setvcp 0x60 0x0f # First monitor DP (Displaylink) alternative command ddccontrol -r 0x60 -w 15 dev:/dev/i2c-7
List the control registers
ddccontrol -d dev:/dev/i2c-6 ddccontrol version 0.6.0 Copyright 2004-2005 Oleg I. Vdovikin (firstname.lastname@example.org) Copyright 2004-2006 Nicolas Boichat (email@example.com) This program comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of this program under the terms of the GNU General Public License. Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-6... I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/AOC2490.xml" Document not parsed successfully. EDID readings: Plug and Play ID: AOC2490 [VESA standard monitor] Input type: Analog =============================== WARNING =============================== There is no support for your monitor in the database, but ddccontrol is using a basic generic profile. Many controls will not be supported, and some controls may not work as expected. Please update ddccontrol-db, or, if you are already using the latest version, please send the output of the following command to firstname.lastname@example.org: LANG= LC_ALL= ddccontrol -p -c -d Thank you. =============================== WARNING =============================== Controls (valid/current/max) [Description - Value name]: Control 0x02: +/1/2 C [New Control Value - No changes] Control 0x04: +/0/1 C [Restore Factory Defaults] Control 0x05: +/0/1 C [Restore Brightness and Contrast] Control 0x08: +/0/1 C [Restore Factory Default Color] Control 0x10: +/90/100 C [Brightness] Control 0x12: +/50/100 C [Contrast] Control 0x14: +/5/13 C [???] Control 0x16: +/50/100 C [Red maximum level] Control 0x18: +/50/100 C [Green maximum level] Control 0x1a: +/50/100 C [Blue maximum level] Control 0x60: +/772/4 C [Input Source Select (Main)] Control 0x62: +/17/100 C [Audio Speaker Volume Adjust] Control 0x6c: +/50/100 C [Red minimum level] Control 0x6e: +/50/100 C [Green minimum level] Control 0x70: +/50/100 C [Blue minimum level] Control 0xac: +/6750/65535 [???] Control 0xae: +/6000/65535 [???] Control 0xb2: +/1/8 [???] Control 0xb6: +/3/8 C [???] Control 0xc8: +/5/65302 C [???] Control 0xc9: +/8/65535 C [???] Control 0xcc: +/4/255 [???] Control 0xd6: +/1/4 C [DPMS Control - On] Control 0xdf: +/513/65535 C [???] Control 0xfe: +/4/255 [???]
Setting volume (reg 0x62) of monitor 2
ddcutil -b 7 setvcp 0x62 0x01
AOC monitor PROBLEM
You can’t switch from an input which is not active!
So my workstation is connected via DP, and i can switch to HDMI.
Now i HAVE TO use the hdmi to switch back to DP.
A solution could be to ssh into the machine connected with HDMI (passwordless login) and switch back to DP.
I made a mqtt button sending a topic that was read by the two machines using the mqtt python program elsewhere on this site.
(Rotary Mqtt Volume control)