Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-116499

Use of edid serial number in qwindowsscreen.cpp is broken

    XMLWordPrintable

Details

    • Windows
    • 695948fad (dev), bd4ab9c23 (6.6), 4b119f48f (6.5)

    Description

      The move by Qt to use friendlyMonitor names extracted from the monitor EDID cause bug reports where only one of two identical screens was detected, resulting in very broken behaviour.

      See: QTBUG-112829

      The fix for that bug introduces monitor edid serial numbers to determine the model index.

      Unfortunately, multiple monitors can have identical edid serial numbers as serial numbers in the edid are not properly changed by many manufacturers. This is true for identical monitors having identical edid blocks from a single manufacturer (LG, Acer, etc), and even true across multiple manufacturers.

      Repeating what I added to that issue which so far has been ignored:

      The fix for QTBUG-112829 here

      https://github.com/qt/qtbase/commit/b7053fc2bc69bdb08f10fe41c373aa519852adbb
      has caused multiple bug reports on Sigil. It seems for many users who purchased 2 identical monitors often end up with both monitors having exactly identical EDID blocks leading to identical serialNumbers.

      The two identical EDID blocks with identical serial numbers can not be changed by the end user.

      Perhaps a combination of deviceName and serial number would make things safer for everyone and possibly provide a way to work around the problem monitor manufacturers created by reusing edid blocks with identical serial numbers (resulting in identical monitorFriendlyDeviceNames as well).

      FWIW, This could be done with a one line change in the qwindowsscreen.cpp routine that uses the parsed edid info by making the deviceName become part of the serialnumber by appending it at the end.

      Perhaps something as simple as:

      --- qwindowsscreen.cpp.orig	2023-08-24 10:26:41
      +++ qwindowsscreen.cpp	2023-08-24 10:30:17
      @@ -244,7 +244,7 @@
               names << QString::fromWCharArray(deviceName.monitorFriendlyDeviceName);
               manufacturers << edid.manufacturer;
               models << edid.model;
      -        serialNumbers << edid.serialNumber;
      +        serialNumbers << edid.serialNumber + data.deviceName;
           }
           data.name = names.join(u"|"_s);
      

      might work better.

      We now have this bug reported for a identical pair of LG monitors having identical EDID blocks, and the same for a pair of Acer monitors having identical EDID blocks.

      When some manufacturers reuse the exact same EDID block, using the EDID serial number as a unique identifier will just not work.

      There is also the possibility that one manufacturer's edid serial number could match that of a different manufacturer.

      The original move away from data.deviceName to EDID monitor friendly names caused the bug in 112829. Then the move to EDID serial numbers has simply moved that bug.

      Please fix this.

      It gets even worse. It seems many manufacturers do not use real serial numbers in the edid block at all. Bytes 12-15 in the EDID 1.4 block seem in many cases to be hard coded to the 01 01 01 01.

      This results in things like the following serial number "16843009" being re-used ACROSS different manufacturers.

      Debug: Screen: 1 "E221-A1" "VIZIO, Inc" "16843009"
      Debug: geo : QRect(1920,0 1536x864)
      Debug: avail geo: QRect(1920,0 1536x824)
      Debug: devideRatio: 1.25
      Debug: logical dpi: 96 96
      Debug: physic dpi: 81.963 133.004

      Debug: Screen: 1 "LG FHD" "LG Electronics" "16843009"
      Debug: geo : QRect(1920,0 1920x1080)
      Debug: avail geo: QRect(1920,0 1920x1040)
      Debug: devideRatio: 1
      Debug: logical dpi: 96 96
      Debug: physic dpi: 81.28 80.6824

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              timothee.keller Timothée Keller (Inactive)
              kevinhendricks Kevin B. Hendricks
              Votes:
              1 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes