digitaltrails / vdu_controls

VDU controls - a control panel for monitor brightness/contrast/...
GNU General Public License v3.0
103 stars 4 forks source link

No reliable display ID #42

Closed digitaltrails closed 1 year ago

digitaltrails commented 1 year ago

When issuing ddcutil commands, vdu_controls addresses each monitor by it's DDC display number (which is 1..M). If the current display-1 is turned off, the current display-2 (if any) is reassigned to be display-1. There is no event generated when this happens, vdu_controls remains unaware of the switch and it's controls for will now be altering display-2. When faced with this issue the user can press the refresh-button which will sort things out.

I have considered using other ID's, such as the EDID, but not even the EDID can be guaranteed to be unique (see https://www.ddcutil.com/release_notes/#multiple-monitors-having-the-same-edid).

So pending some fast (non-polling) what to detect monitors being powered on/off I'm not sure this issue can be addressed.

digitaltrails commented 1 year ago

Maybe EDID should be used until it is detected to be ambiguous, in which case fall back to display ID.

Note this is primarily about what is passed to ddcutil. Internally, within vdu_controls, a set of heuristics is applied to determine a unique text-id (which might have different, but similar issues).

digitaltrails commented 1 year ago

The hacky way forward...

  1. On the GUI view, the Display number and Model+Serial-Number will continue to be the visible identifiers.
  2. Internally the display number will be mapped to an EDID. But internally we'll fall back to the display number if the EDID isn't unique (e.g. the user has two identical monitors made at the same date, with duplicate EDID's).
  3. When executing ddcutil the --edid identifier will be passed. Again falling back to passing --display if the EDID is not unique.
  4. Presets will use the existing naming Model+Serial-Number naming scheme.

This ensures that if a user has multiple monitors and turns one off, the existing controls will still adjust the correct monitor, even if the display numbers have been shuffled, and even if the user does not bother to press Refresh.

Why don't we use the EDID on the GUI and for the Preset names? Because the EDID is unwieldy, for example:

ddcutil --edid 00ffffffffffff0022f06a280101010108140103803623782efc81a4554d9d25125054210800814081809500a940b300d1c001010101283c80a070b023403020360022602100001a000000fd003b3d185011000a202020202020000000fc004850205a523234770a20202020000000ff00434e5430303831314a360a20200062 getvcp 10

It's difficult to know if there isn't someone out there with a monitor that will be tripped up by this change. It seems unlikely, but perhaps I should at least put in an internal switch.

digitaltrails commented 1 year ago

Completed