How to match colours on two monitors?

I have two benq monitors on my pc (different models). The colours and brightness are slightly different and it is disconcerting to work with for long periods.

I have tried using the monitors’ own settings but it is fiddly and unsatisfactory

Is there any software that could help me to adjust the individual monitor’s settings to help me match them up?

This is called monitor calibration. And to do this via software would require additional hardware. This is then a device that is held up to the monitor and its “real” colores are recognized.

This is used for professional DTP programs to calibrate the color space of the monitor. But something like that isn’t exactly cheap.

I don’t know of any software that can do this better than the user sitting in front of the monitor.


You need to use a color calibration tool like those proposed by datacolor :
Then you will need packages like argyll, displaycal , Gnome-color-manager, xcalib… proposed in extra. Those software will guide you for the calibration of your monitors, then propose to modify some files and launch some program at startup.
Sorry for not being too much precise, but I did not made such calibration since long.

You can do that with xrandr. It requires x11 though.

On my KDE laptop I have to brighten the gamma colors on the native screen but tone the colors down in the Dell external monitor. So here is the example of how I use it on my 2 monitor setup:

xrandr --output VGA-1 --gamma .45:.50:.66

There are three gamma color values affecting the external monitor. On the native laptop monitor I use KDE monitor settings.

It is a shame KDE cannot calibrate values for the monitors separately.

1 Like

But now we’re probably on wayland :wink:

If I could find a utility like xrandr, that worked in Wayland, I would certainly try it.
it lists gammastep, light, brightnessctl, … but also wlr-randr (in extra) that is specific to Wayland. Just hoping it manages what you need.

I see several versions in the repo. I just downloaded one.

I see that gammastep offers several different methods of setting including xrandr and wayland.

Using the xrandr method I did this to set individual colors:

gammastep -l 40:74 -m randr -g 0.45:0.50:0.66

NOTE: The first argument must be in the command. It wants your lat and lon coordinates. :slight_smile:

The big snag is that it cannot set monitors individually like xrandr does.

Which, of course, was the point of the question. Thanks for trying

I have been playing with ddcutil and it can control the setting of the displays separately. E.g. to set brightness

ddcutil --display 1 setvcp 10 50

ddcutil --display 2 setvcp 10 40

I’ll play around but it seem promising.

Thnaks all for your input

Well now. You have my attention. But does it also allow for adjusting color gamma? That is what I really need.

the documentation implies it does

… the settable VCP feature x73 (Gamma) has a complex 2 byte encoding …

OTH there is no x73 in my ddcutil getvcp all

VCP code 0x02 (New control value ): No new control values (0x01)
VCP code 0x0b (Color temperature increment ): 3000 degree(s) Kelvin
VCP code 0x0c (Color temperature request ): Maximum retries exceeded
VCP code 0x10 (Brightness ): current value = 60, max value = 100
VCP code 0x12 (Contrast ): current value = 0, max value = 100
VCP code 0x14 (Select color preset ): User 1 (sl=0x0b)
VCP code 0x16 (Video gain: Red ): current value = 100, max value = 100
VCP code 0x18 (Video gain: Green ): current value = 100, max value = 100
VCP code 0x1a (Video gain: Blue ): current value = 100, max value = 100
VCP code 0x30 (Vertical Position (Phase) ): Maximum retries exceeded
VCP code 0x4a (Bottom Corner Flare ): Maximum retries exceeded
VCP code 0x52 (Active control ): Value: 0x10
VCP code 0x60 (Input Source ): HDMI-1 (sl=0x11)
VCP code 0x62 (Audio speaker volume ): current value = 30, max value = 100
VCP code 0x6c (Video black level: Red ): current value = 50, max value = 100
VCP code 0x6e (Video black level: Green ): current value = 50, max value = 100
VCP code 0x6f (Backlight Level: Green ): Maximum retries exceeded
VCP code 0x70 (Video black level: Blue ): current value = 50, max value = 100
VCP code 0x86 (Display Scaling ): Maximum retries exceeded
VCP code 0x88 (Velocity Scan Modulation ): Maximum retries exceeded
VCP code 0x8d (Audio Mute ): Unmute the audio (sl=0x02)
VCP code 0x98 (Window Position(BR_Y) ): Maximum retries exceeded
VCP code 0xa5 (Change the selected window ): Maximum retries exceeded
VCP code 0xac (Horizontal frequency ): 2464 hz
VCP code 0xae (Vertical frequency ): 60.00 hz
VCP code 0xb2 (Flat panel sub-pixel layout ): Red/Green/Blue vertical stripe (sl=0x01)
VCP code 0xb6 (Display technology type ): LCD (active matrix) (sl=0x03)
VCP code 0xc0 (Display usage time ): Usage time (hours) = 28777 (0x007069) mh=0xff, ml=0xff, sh=0x70, sl=0x69
VCP code 0xc6 (Application enable key ): 0x005a
VCP code 0xc8 (Display controller type ): Mfg: Mstar (sl=0x05), controller number: mh=0x00, ml=0x58, sh=0x00
VCP code 0xc9 (Display firmware level ): 3.10
VCP code 0xca (OSD ): OSD Enabled (sl=0x02)
VCP code 0xcc (OSD Language ): English (sl=0x02)
VCP code 0xd6 (Power mode ): DPM: On, DPMS: Off (sl=0x01)
VCP code 0xdb (Image Mode ): Maxi