ddcctl icon indicating copy to clipboard operation
ddcctl copied to clipboard

Address monitors by edid.name or edid.serial instead of display number

Open christophberger opened this issue 4 years ago • 3 comments

Hi,

First of all, this project is awesome and saves me a lot of daily hassle. I use two different external monitors on a Macbook, and one of them cannot remember its brightness. ddcctl, together with some automation, reminds the monitor to brighten up :)

However, every once in a while, when the Mac wakes up, it flips the display numbers. The monitor that used to be no. 1 is now no. 2 and vice versa. When this happens, any script of the form ddcctl -d <number> accesses the wrong monitor.

So it would be great if ddcctl gets an option for addressing monitors by their edid.name or edid.serial value, rather than their (volatile) display number.

Examples: ddcctl -d 9X2VY5C410UL (passing edid.serial) ddcctl -d "DELL U2515H" (passing edid.name)

I haven't touched ObjC or Apple libraries/API's since a decade or so, hence I am not in the best position to contribute a PR, but maybe someone else can?

christophberger avatar Nov 03 '20 08:11 christophberger

Workaround found:

  • Query display #1
  • Test the edit.name value
  • Set a shell variable to the appropriate display #
  • call ddcctl using that variable

Sample function for the Fish shell:

function bright
    set monitor (ddcctl -d 1 -b '?' | awk 'BEGIN{ FS=": "} /edid.name/{ print $3 }')
    if test $monitor = "IPS1506UHDR"
        set display 1
    else
        set display 2
    end
    ddcctl -d $display -b 38 
end

Would be awesome to have sth like ddcctl -d "IPS1506UHDR" -b 38 as a solution

christophberger avatar Nov 04 '20 09:11 christophberger

there's a couple of PRs I want to get merged first, but we could support a string expression.

You seem to be lucky in that your Dell has a serial number, but who knows how unique that really is with another Dell of the same model.

there's also some chatter about how we could grab a persistent GUID for a particular display: https://stackoverflow.com/a/48450870.

If that really holds up across reboots and incorporates Model-Vendor-Serial, using those UUID's might be the way to go.

kfix avatar Nov 26 '20 06:11 kfix

I have only one Dell, the other display is a different brand, so for me there is no risk of identical serial numbers. But I see the point. Let's hope the persistent GUID's have all properties required to solve the problem.

christophberger avatar Nov 26 '20 23:11 christophberger