Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

addressing display by serialID #96

Closed

Conversation

Vaccarini-Lorenzo
Copy link
Contributor

@Vaccarini-Lorenzo Vaccarini-Lorenzo commented Aug 11, 2022

Since the persistent ID takes into account the position in the I/O Kit registry, sometimes the IDs get swapped or change (Issues #89 #83 #77 ...).
Identifying the displays through their serial number should fix those issues
Usage: displayplacer "S:<serial_num> res:<resolution> ... degree:<degree>"

@andremetzen
Copy link

Thanks for putting the effort to address this issue. However, I have three identical monitors (Gigabyte M28U) and they all have the same Serial screen id, so unfortunately this doesn't help me either 😢

@Vaccarini-Lorenzo
Copy link
Contributor Author

Thanks for putting the effort to address this issue. However, I have three identical monitors (Gigabyte M28U) and they all have the same Serial screen id, so unfortunately this doesn't help me either 😢

Hi there! Thanks for your reply.
By any chance can you check if they have different vendor ID or model ID? If so it's possible to identify each screen with a combination of serial-vendor-model.

@andremetzen
Copy link

Here's the output from system_profiler SPDisplaysDataType -json

{
  "SPDisplaysDataType" : [
    {
      "_name" : "Apple M1 Max",
      "spdisplays_metalfamily" : "spdisplays_mtlgpufamilyapple7",
      "spdisplays_ndrvs" : [
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "10",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "5",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_main" : "spdisplays_yes",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        },
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "10",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "3",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        },
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "10",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "4",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        }
      ],
      "spdisplays_vendor" : "sppci_vendor_Apple",
      "sppci_bus" : "spdisplays_builtin",
      "sppci_cores" : "24",
      "sppci_device_type" : "spdisplays_gpu",
      "sppci_model" : "Apple M1 Max"
    }
  ]
}

The serial id I get from displayplacer list is different though: Serial screen id: 16843009

@Vaccarini-Lorenzo
Copy link
Contributor Author

Vaccarini-Lorenzo commented Aug 15, 2022

Here's the output from system_profiler SPDisplaysDataType -json

{
  "SPDisplaysDataType" : [
    {
      "_name" : "Apple M1 Max",
      "spdisplays_metalfamily" : "spdisplays_mtlgpufamilyapple7",
      "spdisplays_ndrvs" : [
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "10",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "5",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_main" : "spdisplays_yes",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        },
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "10",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "3",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        },
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "10",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "4",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        }
      ],
      "spdisplays_vendor" : "sppci_vendor_Apple",
      "sppci_bus" : "spdisplays_builtin",
      "sppci_cores" : "24",
      "sppci_device_type" : "spdisplays_gpu",
      "sppci_model" : "Apple M1 Max"
    }
  ]
}

The serial id I get from displayplacer list is different though: Serial screen id: 16843009

So, addressing the fact that the serial id is different from the one from displayplacer list: The ID from the output of system_profiler SPDisplaysDataType -json is a hex number, once converted to decimal they're the same.
Unfortunately it looks like that identical monitors share all the same IDs. One idea could be changing the monitor name and identifying each monitor with its own name. I'll look into that!

@Vaccarini-Lorenzo
Copy link
Contributor Author

Unfortunately it looks like the only way to spoof your device identifiers (either device name, vendor id or model id) is to write a custom kext. I didn't find any other solution to this particular "same vendor, same model, same serial" issue. For all other devices (not-identical monitors), this version should work fine.

@hh
Copy link

hh commented Feb 1, 2023

This works well for me on four identical screens, and I find much easier tot use / map than the guids.

@iFission
Copy link

iFission commented Feb 4, 2023

(has a long investigation log for anyone who's experience similar issue/is interested in the details)

Hi,

I have similar 4 * Gigabyte M28U with Mac Studio (M1 Max) set up. And always encountering displays randomly swapping when

  1. wakes up from sleep
  2. restart

Previously, I was using 4 * Dell U2720Q/M with Mac Studio, and did not encounter the issue above. And even before, I was using 4 * Dell U2720Q/M with Macbook Pro 16 2019 i9 9880H, GPU Radeon Pro 5500M 4 GB, and no such issue as well.

Trying to troubleshoot, I ran following commands in the following combinations of hardware, as I have yet to sell the old setup:

hardware:
USBC from computer to monitors
Macbook Pro 16 2019 i9 9880H, GPU Radeon Pro 5500M 4 GB, macOS 10.15.7
Mac Studio M1 Max 10 CPU 24 GPU, macOS 13.2

commands/settings

  1. System Information > Graphics/Displays
  2. system_profiler -json SPDisplaysDataType
  3. ioreg -l | grep EDID
  4. displayplacer list | grep -i persistent / ColorSync Utility > Devices > Displays > ID. combined, as persistent screen id are the same as ColorSync Utility reported ID

with the following hardware combination

  1. 4 * M28U + Mac Studio
  2. 2 * U2720QM + Mac Studio
  3. 4 * M28U + Macbook Pro

Logs

  1. 4 * M28U + Mac Studio
  2. System Information > Graphics/Displays
Apple M1 Max:

Chipset Model:	Apple M1 Max
Type:	GPU
Bus:	Built-In
Total Number of Cores:	24
Vendor:	Apple (0x106b)
Metal Support:	Metal 3
Displays:
M28U:
Resolution:	3840x2160 (2160p/4K UHD 1 - Ultra High Definition)
UI Looks like:	1920 x 1080 @ 144.00Hz
Main Display:	Yes
Mirror:	Off
Online:	Yes
Rotation:	Supported
M28U:
Resolution:	2160 x 3840
UI Looks like:	1080 x 1920 @ 144.00Hz
Mirror:	Off
Online:	Yes
Rotation:	270
M28U:
Resolution:	3840x2160 (2160p/4K UHD 1 - Ultra High Definition)
UI Looks like:	1920 x 1080 @ 144.00Hz
Mirror:	Off
Online:	Yes
Rotation:	180
M28U:
Resolution:	2160 x 3840
UI Looks like:	1080 x 1920 @ 144.00Hz
Mirror:	Off
Online:	Yes
Rotation:	90
  1. system_profiler -json SPDisplaysDataType
same serial number
 system_profiler -json SPDisplaysDataType
{
  "SPDisplaysDataType" : [
    {
      "_name" : "Apple M1 Max",
      "spdisplays_mtlgpufamilysupport" : "spdisplays_metal3",
      "spdisplays_ndrvs" : [
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "48",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "4",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 144.00Hz",
          "spdisplays_main" : "spdisplays_yes",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 144.00Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        },
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "48",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "2",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 144.00Hz",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 144.00Hz",
          "spdisplays_rotation" : 180
        },
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "48",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "3",
          "_spdisplays_pixels" : "2160 x 3840",
          "_spdisplays_resolution" : "1080 x 1920 @ 144.00Hz",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "2160 x 3840",
          "spdisplays_resolution" : "1080 x 1920 @ 144.00Hz",
          "spdisplays_rotation" : 90
        },
        {
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "48",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "5",
          "_spdisplays_pixels" : "2160 x 3840",
          "_spdisplays_resolution" : "1080 x 1920 @ 144.00Hz",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "2160 x 3840",
          "spdisplays_resolution" : "1080 x 1920 @ 144.00Hz",
          "spdisplays_rotation" : 270
        }
      ],
      "spdisplays_vendor" : "sppci_vendor_Apple",
      "sppci_bus" : "spdisplays_builtin",
      "sppci_cores" : "24",
      "sppci_device_type" : "spdisplays_gpu",
      "sppci_model" : "Apple M1 Max"
    }
  ]
}%

  1. ioreg -l | grep EDID
    | |   |   |   "DisplayAttributes" = {"SupportsSuspend"=Yes,"MaximumRefreshRate"=144,"MaximumVariableRefreshRate"=9437184,"SupportsActiveOff"=Yes,"SupportsBT2020cYCC"=0,"PortID"=16,"ProductAttributes"={"ManufacturerID"="GBT","YearOfManufacture"=2022,"SerialNumber"=16843009,"ProductName"="M28U","AlphanumericSerialNumber"="22480B001337","LegacyManufacturerID"=7252,"ProductID"=10240,"WeekOfManufacture"=48},"MaxVerticalImageSize"=36,"SupportsHLGEOTF"=Yes,"MinimumVariableRefreshRate"=3145728,"MaxHorizontalImageSize"=63,"HasHDMILegacyEDID"=No,"Chromaticity"={"Red"={"X"=43904,"Y"=20416},"Green"={"X"=18240,"Y"=43264},"Blue"={"X"=10176,"Y"=4224}},"DefaultColorSpaceIsSRGB"=No,"SupportsBT2020YCC"=128,"NativeFormatHorizontalPixels"=3840,"DefaultWhitePoint"={"X"=20544,"Y"=21568,"Gamma"=144179},"SupportsHDRGammaEOTF"=No,"SupportsVariableRefreshRate"=Yes,"AspectRatio"=15,"MinimumRefreshRate"=48,"Luminance"={"Max"=29852661,"MaxFrameAverage"=29852661,"Min"=4409},"SupportsPQEOTF"=Yes,"WhitePoints"=({"X"=20544,"Y"=21568,"Gamma"=144179}),"PreciseAspectRatio"=114688,"ContinuousFrequencySupport"="CVT","SupportsStandby"=Yes,"SupportsBT2020RGB"=512,"SupportsHDRStaticMetadataType1"=Yes,"NativeFormatVerticalPixels"=2160}
    | |   |   |   "EDID UUID" = "1C540028-0000-0000-3020-0104C53F2478"
    | |   |   |   "DisplayAttributes" = {"SupportsSuspend"=Yes,"MaximumRefreshRate"=144,"MaximumVariableRefreshRate"=9437184,"SupportsActiveOff"=Yes,"SupportsBT2020cYCC"=0,"PortID"=48,"ProductAttributes"={"ManufacturerID"="GBT","YearOfManufacture"=2022,"SerialNumber"=16843009,"ProductName"="M28U","AlphanumericSerialNumber"="22480B001360","LegacyManufacturerID"=7252,"ProductID"=10240,"WeekOfManufacture"=48},"MaxVerticalImageSize"=36,"SupportsHLGEOTF"=Yes,"MinimumVariableRefreshRate"=3145728,"MaxHorizontalImageSize"=63,"HasHDMILegacyEDID"=No,"Chromaticity"={"Red"={"X"=43904,"Y"=20416},"Green"={"X"=18240,"Y"=43264},"Blue"={"X"=10176,"Y"=4224}},"DefaultColorSpaceIsSRGB"=No,"SupportsBT2020YCC"=128,"NativeFormatHorizontalPixels"=3840,"DefaultWhitePoint"={"X"=20544,"Y"=21568,"Gamma"=144179},"SupportsHDRGammaEOTF"=No,"SupportsVariableRefreshRate"=Yes,"AspectRatio"=15,"MinimumRefreshRate"=48,"Luminance"={"Max"=29852661,"MaxFrameAverage"=29852661,"Min"=4409},"SupportsPQEOTF"=Yes,"WhitePoints"=({"X"=20544,"Y"=21568,"Gamma"=144179}),"PreciseAspectRatio"=114688,"ContinuousFrequencySupport"="CVT","SupportsStandby"=Yes,"SupportsBT2020RGB"=512,"SupportsHDRStaticMetadataType1"=Yes,"NativeFormatVerticalPixels"=2160}
    | |   |   |   "EDID UUID" = "1C540028-0000-0000-3020-0104C53F2478"
    | |   |   |   "DisplayAttributes" = {"SupportsSuspend"=Yes,"MaximumRefreshRate"=144,"MaximumVariableRefreshRate"=9437184,"SupportsActiveOff"=Yes,"SupportsBT2020cYCC"=0,"PortID"=0,"ProductAttributes"={"ManufacturerID"="GBT","YearOfManufacture"=2022,"SerialNumber"=16843009,"ProductName"="M28U","AlphanumericSerialNumber"="22480B001341","LegacyManufacturerID"=7252,"ProductID"=10240,"WeekOfManufacture"=48},"MaxVerticalImageSize"=36,"SupportsHLGEOTF"=Yes,"MinimumVariableRefreshRate"=3145728,"MaxHorizontalImageSize"=63,"HasHDMILegacyEDID"=No,"Chromaticity"={"Red"={"X"=43904,"Y"=20416},"Green"={"X"=18240,"Y"=43264},"Blue"={"X"=10176,"Y"=4224}},"DefaultColorSpaceIsSRGB"=No,"SupportsBT2020YCC"=128,"NativeFormatHorizontalPixels"=3840,"DefaultWhitePoint"={"X"=20544,"Y"=21568,"Gamma"=144179},"SupportsHDRGammaEOTF"=No,"SupportsVariableRefreshRate"=Yes,"AspectRatio"=15,"MinimumRefreshRate"=48,"Luminance"={"Max"=29852661,"MaxFrameAverage"=29852661,"Min"=4409},"SupportsPQEOTF"=Yes,"WhitePoints"=({"X"=20544,"Y"=21568,"Gamma"=144179}),"PreciseAspectRatio"=114688,"ContinuousFrequencySupport"="CVT","SupportsStandby"=Yes,"SupportsBT2020RGB"=512,"SupportsHDRStaticMetadataType1"=Yes,"NativeFormatVerticalPixels"=2160}
    | |   |   |   "EDID UUID" = "1C540028-0000-0000-3020-0104C53F2478"
    | |   |   |   "DisplayAttributes" = {"SupportsSuspend"=Yes,"MaximumRefreshRate"=144,"MaximumVariableRefreshRate"=9437184,"SupportsActiveOff"=Yes,"SupportsBT2020cYCC"=0,"PortID"=32,"ProductAttributes"={"ManufacturerID"="GBT","YearOfManufacture"=2022,"SerialNumber"=16843009,"ProductName"="M28U","AlphanumericSerialNumber"="22480B001352","LegacyManufacturerID"=7252,"ProductID"=10240,"WeekOfManufacture"=48},"MaxVerticalImageSize"=36,"SupportsHLGEOTF"=Yes,"MinimumVariableRefreshRate"=3145728,"MaxHorizontalImageSize"=63,"HasHDMILegacyEDID"=No,"Chromaticity"={"Red"={"X"=43904,"Y"=20416},"Green"={"X"=18240,"Y"=43264},"Blue"={"X"=10176,"Y"=4224}},"DefaultColorSpaceIsSRGB"=No,"SupportsBT2020YCC"=128,"NativeFormatHorizontalPixels"=3840,"DefaultWhitePoint"={"X"=20544,"Y"=21568,"Gamma"=144179},"SupportsHDRGammaEOTF"=No,"SupportsVariableRefreshRate"=Yes,"AspectRatio"=15,"MinimumRefreshRate"=48,"Luminance"={"Max"=29852661,"MaxFrameAverage"=29852661,"Min"=4409},"SupportsPQEOTF"=Yes,"WhitePoints"=({"X"=20544,"Y"=21568,"Gamma"=144179}),"PreciseAspectRatio"=114688,"ContinuousFrequencySupport"="CVT","SupportsStandby"=Yes,"SupportsBT2020RGB"=512,"SupportsHDRStaticMetadataType1"=Yes,"NativeFormatVerticalPixels"=2160}
    | |   |   |   "EDID UUID" = "1C540028-0000-0000-3020-0104C53F2478"

  1. displayplacer list | grep -i persistent / ColorSync Utility > Devices > Displays > ID
displayplacer list | grep -i persistent -A 8
Persistent screen id: 57F2C02C-BBC0-4295-B7F8-90050F2C9093
Contextual screen id: 4
Type: 29 inch external screen
Resolution: 1920x1080
Hertz: 144
Color Depth: 8
Scaling:on
Origin: (0,0) - main display
Rotation: 0
--
Persistent screen id: FDD9BFFA-F9C5-421F-A928-6749984786C1
Contextual screen id: 2
Type: 29 inch external screen
Resolution: 1920x1080
Hertz: 144
Color Depth: 8
Scaling:on
Origin: (0,-1080)
Rotation: 180
--
Persistent screen id: 7C3F759B-3E4C-47ED-9363-38233CD7521F
Contextual screen id: 3
Type: 29 inch external screen
Resolution: 1080x1920
Hertz: 144
Color Depth: 8
Scaling:on
Origin: (-1080,-614)
Rotation: 90
--
Persistent screen id: FECDD612-6210-4A71-A3A5-F89F266B222F
Contextual screen id: 5
Type: 29 inch external screen
Resolution: 1080x1920
Hertz: 144
Color Depth: 8
Scaling:on
Origin: (1920,-431)
Rotation: 270

findings:

  1. System Information does not show serial numbers
  2. system_profiler shows additional serial numbers, but are all the same
  3. ioreg shows same EDID UUID, but unique AlphanumericSerialNumber

test:

  1. plug in first monitor (monitor 1), gets ID in ColorSync Utility as ...63CA
  2. disconnect cable
  3. using same cable, plug in first monitor (monitor 2), gets ID in ColorSync Utility as ...63CA
  4. plug in second monitor (monitor 1), gets ID in ColorSync Utility as ...FF18

repeat with other combinations, sequence
the IDs assigned are dependent on the order of monitors connected, not on the different monitors 1/2/3/4

conclusion:
Mac Studio is not able to differentiate M28U by their unique AlphanumericSerialNumber, and assign IDs on the order connected

  1. 2 * U2720QM + Mac Studio
  2. System Information > Graphics/Displays
Apple M1 Max:

Chipset Model:	Apple M1 Max
Type:	GPU
Bus:	Built-In
Total Number of Cores:	24
Vendor:	Apple (0x106b)
Metal Support:	Metal 3
Displays:
DELL U2720QM:
Resolution:	3840x2160 (2160p/4K UHD 1 - Ultra High Definition)
UI Looks like:	1920 x 1080 @ 60.00Hz
Main Display:	Yes
Mirror:	Off
Online:	Yes
Rotation:	Supported
DELL U2720QM:
Resolution:	3840x2160 (2160p/4K UHD 1 - Ultra High Definition)
UI Looks like:	1920 x 1080 @ 60.00Hz
Mirror:	Off
Online:	Yes
Rotation:	Supported

  1. system_profiler -json SPDisplaysDataType
{
  "SPDisplaysDataType" : [
    {
      "_name" : "Apple M1 Max",
      "spdisplays_mtlgpufamilysupport" : "spdisplays_metal3",
      "spdisplays_ndrvs" : [
        {
          "_name" : "DELL U2720QM",
          "_spdisplays_display-product-id" : "41be",
          "_spdisplays_display-serial-number" : "414c554c",
          "_spdisplays_display-vendor-id" : "10ac",
          "_spdisplays_display-week" : "28",
          "_spdisplays_display-year" : "2021",
          "_spdisplays_displayID" : "4",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_main" : "spdisplays_yes",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        },
        {
          "_name" : "DELL U2720QM",
          "_spdisplays_display-product-id" : "41be",
          "_spdisplays_display-serial-number" : "4653334c",
          "_spdisplays_display-vendor-id" : "10ac",
          "_spdisplays_display-week" : "21",
          "_spdisplays_display-year" : "2021",
          "_spdisplays_displayID" : "2",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60.00Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        }
      ],
      "spdisplays_vendor" : "sppci_vendor_Apple",
      "sppci_bus" : "spdisplays_builtin",
      "sppci_cores" : "24",
      "sppci_device_type" : "spdisplays_gpu",
      "sppci_model" : "Apple M1 Max"
    }
  ]
}%
  1. ioreg -l | grep EDID
\    | |   |   |   "DisplayAttributes" = {"SupportsSuspend"=No,"MaximumRefreshRate"=75,"SupportsActiveOff"=No,"PortID"=0,"ProductAttributes"={"ManufacturerID"="DEL","YearOfManufacture"=2021,"SerialNumber"=1095521612,"ProductName"="DELL U2720QM","AlphanumericSerialNumber"="8Q3CX83","LegacyManufacturerID"=4268,"ProductID"=16830,"WeekOfManufacture"=28},"MaxVerticalImageSize"=34,"MinimumVariableRefreshRate"=1572864,"MaxHorizontalImageSize"=60,"HasHDMILegacyEDID"=No,"Chromaticity"={"Red"={"X"=41920,"Y"=21632},"Green"={"X"=19648,"Y"=39296},"Blue"={"X"=9856,"Y"=3904}},"DefaultColorSpaceIsSRGB"=Yes,"NativeFormatHorizontalPixels"=3840,"DefaultWhitePoint"={"X"=20544,"Y"=21568,"Gamma"=144179},"SupportsVariableRefreshRate"=No,"AspectRatio"=15,"MinimumRefreshRate"=24,"MaximumVariableRefreshRate"=4915200,"WhitePoints"=({"X"=20544,"Y"=21568,"Gamma"=144179}),"PreciseAspectRatio"=115652,"ContinuousFrequencySupport"="None","SupportsStandby"=Yes,"NativeFormatVerticalPixels"=2160}
    | |   |   |   "EDID UUID" = "10ACBE41-0000-0000-1C1F-0104B53C2278"
    | |   |   |   "DisplayAttributes" = {"SupportsSuspend"=No,"MaximumRefreshRate"=75,"SupportsActiveOff"=No,"PortID"=16,"ProductAttributes"={"ManufacturerID"="DEL","YearOfManufacture"=2021,"SerialNumber"=1179857740,"ProductName"="DELL U2720QM","AlphanumericSerialNumber"="BXC2V83","LegacyManufacturerID"=4268,"ProductID"=16830,"WeekOfManufacture"=21},"MaxVerticalImageSize"=34,"MinimumVariableRefreshRate"=1572864,"MaxHorizontalImageSize"=60,"HasHDMILegacyEDID"=No,"Chromaticity"={"Red"={"X"=41920,"Y"=21632},"Green"={"X"=19648,"Y"=39296},"Blue"={"X"=9856,"Y"=3904}},"DefaultColorSpaceIsSRGB"=Yes,"NativeFormatHorizontalPixels"=3840,"DefaultWhitePoint"={"X"=20544,"Y"=21568,"Gamma"=144179},"SupportsVariableRefreshRate"=No,"AspectRatio"=15,"MinimumRefreshRate"=24,"MaximumVariableRefreshRate"=4915200,"WhitePoints"=({"X"=20544,"Y"=21568,"Gamma"=144179}),"PreciseAspectRatio"=115652,"ContinuousFrequencySupport"="None","SupportsStandby"=Yes,"NativeFormatVerticalPixels"=2160}
    | |   |   |   "EDID UUID" = "10ACBE41-0000-0000-151F-0104B53C2278"
  1. displayplacer list | grep -i persistent / ColorSync Utility > Devices > Displays > ID

findings:

  1. System Information does not show serial numbers
  2. system_profiler shows additional serial numbers, and are unique among the monitors

test:

  1. plug in first monitor (monitor 1), gets ID in ColorSync Utility as ...A5AB
  2. disconnect cable
  3. using same cable, plug in first monitor (monitor 2), gets ID in ColorSync Utility as ...88C2
  4. plug in second monitor (monitor 1), gets ID in ColorSync Utility as ...A5AB

experience

  1. no are not swapping randomly

conclusion:
Dell implements unique serial numbers that Mac Studio uses to uniquely identify as ColorSync Utility IDs (and therefore displayplacer Persistent screen id)

  1. 4 * M28U + Macbook Pro
  2. System Information > Graphics/Displays
AMD Radeon Pro 5500M:

Chipset Model:	AMD Radeon Pro 5500M
Type:	GPU
Bus:	PCIe
PCIe Lane Width:	x8
VRAM (Total):	4 GB
Vendor:	AMD (0x1002)
Device ID:	0x7340
Revision ID:	0x0040
ROM Revision:	113-D3220E-190
VBIOS Version:	113-D32206U1-020
Option ROM Version:	113-D32206U1-020
EFI Driver Version:	01.A1.190
Automatic Graphics Switching:	Supported
gMux Version:	5.0.0
Metal:	Supported, feature set macOS GPUFamily2 v1
Displays:
Colour LCD:
Display Type:	Built-In Retina LCD
Resolution:	3072x1920 Retina
Framebuffer Depth:	24-Bit Colour (ARGB8888)
Mirror:	Off
Online:	Yes
Automatically Adjust Brightness:	No
Connection Type:	Internal
M28U:
Resolution:	3840x2160 (2160p/4K UHD 1 - Ultra High Definition)
UI Looks like:	1920 x 1080 @ 60 Hz
Framebuffer Depth:	30-Bit Colour (ARGB2101010)
Display Serial Number:	22480B001341
Main Display:	Yes
Mirror:	Off
Online:	Yes
Rotation:	Supported
Automatically Adjust Brightness:	No
Connection Type:	Thunderbolt/DisplayPort
M28U:
Resolution:	2160 x 3840
UI Looks like:	1080 x 1920 @ 60 Hz
Framebuffer Depth:	30-Bit Colour (ARGB2101010)
Display Serial Number:	22480B001337
Mirror:	Off
Online:	Yes
Rotation:	270
Automatically Adjust Brightness:	No
Connection Type:	Thunderbolt/DisplayPort
M28U:
Resolution:	3840x2160 (2160p/4K UHD 1 - Ultra High Definition)
UI Looks like:	1920 x 1080 @ 60 Hz
Framebuffer Depth:	30-Bit Colour (ARGB2101010)
Display Serial Number:	22480B001352
Mirror:	Off
Online:	Yes
Rotation:	180
Automatically Adjust Brightness:	No
Connection Type:	Thunderbolt/DisplayPort
M28U:
Resolution:	2160 x 3840
UI Looks like:	1080 x 1920 @ 60 Hz
Framebuffer Depth:	30-Bit Colour (ARGB2101010)
Display Serial Number:	22480B001360
Mirror:	Off
Online:	Yes
Rotation:	90
Automatically Adjust Brightness:	No
Connection Type:	Thunderbolt/DisplayPort
  1. system_profiler -json SPDisplaysDataType
{
  "SPDisplaysDataType" : [
    {
      "_name" : "kHW_IntelUHDGraphics630Item",
      "_spdisplays_vram" : "1536 MB",
      "spdisplays_automatic_graphics_switching" : "spdisplays_supported",
      "spdisplays_device-id" : "0x3e9b",
      "spdisplays_gmux-version" : "5.0.0",
      "spdisplays_metal" : "spdisplays_metalfeaturesetfamily21",
      "spdisplays_revision-id" : "0x0002",
      "spdisplays_vendor" : "Intel",
      "spdisplays_vram_shared" : "1536 MB",
      "sppci_bus" : "spdisplays_builtin",
      "sppci_device_type" : "spdisplays_gpu",
      "sppci_model" : "Intel UHD Graphics 630"
    },
    {
      "_name" : "kHW_AMDRadeonPro5500MItem",
      "spdisplays_automatic_graphics_switching" : "spdisplays_supported",
      "spdisplays_device-id" : "0x7340",
      "spdisplays_efi-version" : "01.A1.190",
      "spdisplays_gmux-version" : "5.0.0",
      "spdisplays_metal" : "spdisplays_metalfeaturesetfamily21",
      "spdisplays_ndrvs" : [
        {
          "_IODisplayEDID" : "{length = 256, bytes = 0x00ffffff ffffff00 061044a0 00000000 ... 00000000 0000b490 }",
          "_name" : "Color LCD",
          "_spdisplays_display-product-id" : "a044",
          "_spdisplays_display-serial-number2" : "0",
          "_spdisplays_display-vendor-id" : "610",
          "_spdisplays_display-week" : "36",
          "_spdisplays_display-year" : "2019",
          "_spdisplays_displayID" : "4281106",
          "_spdisplays_displayPath" : "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG0@1/IOPP/EGP0@0/IOPP/EGP1@0/IOPP/GFX0@0/AMDRadeonX6000_AmdRadeonControllerNavi14/ATY,Boa@0",
          "_spdisplays_displayport_device" : {
            "_name" : "spdisplays_displayport_info",
            "spdisplays_displayport_current_bandwidth" : " 5.40 Gbps",
            "spdisplays_displayport_current_lanes" : "4",
            "spdisplays_displayport_current_spread" : "<= 0.5%",
            "spdisplays_displayport_DPCD_version" : "1.2",
            "spdisplays_displayport_errors_lane0" : "0",
            "spdisplays_displayport_errors_lane1" : "0",
            "spdisplays_displayport_errors_lane2" : "0",
            "spdisplays_displayport_errors_lane3" : "0",
            "spdisplays_displayport_hdcp_capability" : "spdisplays_displayport_hdcp_incapable",
            "spdisplays_displayport_max_bandwidth" : "5.40 Gbps",
            "spdisplays_displayport_max_lanes" : "4",
            "spdisplays_displayport_max_spread" : "0.5%",
            "spdisplays_displayport_sink_ascii_name" : "eD?gba",
            "spdisplays_displayport_sink_chip_version" : " 0.01",
            "spdisplays_displayport_sink_count" : "1",
            "spdisplays_displayport_sink_sw_version" : " 9",
            "spdisplays_displayport_sink_vendor" : "00 10 fa",
            "spdisplays_displayport_source_ascii_name" : "AAPL",
            "spdisplays_displayport_source_chip_version" : " 0.01",
            "spdisplays_displayport_source_sw_version" : " 1.00",
            "spdisplays_displayport_source_vendor" : "00 10 fa",
            "spdisplays_displayport_valid_error_lane0" : "1",
            "spdisplays_displayport_valid_error_lane1" : "1",
            "spdisplays_displayport_valid_error_lane2" : "1",
            "spdisplays_displayport_valid_error_lane3" : "1"
          },
          "_spdisplays_displayRegID" : "89cb",
          "_spdisplays_edid" : "0x00ffffffffffff00061044a000000000241d0104b5221678020fb1ae5243b0260d505400000001010101010101010101010101010101e7910050c08037700820980859d71000001a000000fc00436f6c6f72204c43440a202020000000100000000000000000000000000000000000100000000000000000000000000000017b70127903007f813ffa10000301180f28170000000000000000000000000000004c503136305754312d534a41360a200046305930343037303148533037434c41390a20202020207f8129fa10000201001100000290034e045605c007b00a580e01130d1a0923b7312e43f15e2882ddb65efec90000000000000000000000b490",
          "_spdisplays_pixels" : "3584 x 2240",
          "_spdisplays_resolution" : "1792 x 1120 @ 59 Hz",
          "spdisplays_ambient_brightness" : "spdisplays_no",
          "spdisplays_connection_type" : "spdisplays_internal",
          "spdisplays_depth" : "CGSThirtytwoBitColor",
          "spdisplays_display_type" : "spdisplays_built-in_retinaLCD",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_3072x1920Retina"
        },
        {
          "_IODisplayEDID" : "{length = 384, bytes = 0x00ffffff ffffff00 1c540028 01010101 ... 00000000 00002c64 }",
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number2" : "0",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "48",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "150a0007",
          "_spdisplays_displayPath" : "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG0@1/IOPP/EGP0@0/IOPP/EGP1@0/IOPP/GFX0@0/AMDRadeonX6000_AmdRadeonControllerNavi14/ATY,Boa@0",
          "_spdisplays_displayport_device" : {
            "_name" : "spdisplays_displayport_info",
            "spdisplays_displayport_current_bandwidth" : " 8.10 Gbps",
            "spdisplays_displayport_current_lanes" : "4",
            "spdisplays_displayport_current_spread" : "<= 0.5%",
            "spdisplays_displayport_DPCD_version" : "1.2",
            "spdisplays_displayport_errors_lane0" : "0",
            "spdisplays_displayport_errors_lane1" : "0",
            "spdisplays_displayport_errors_lane2" : "0",
            "spdisplays_displayport_errors_lane3" : "0",
            "spdisplays_displayport_hdcp_capability" : "spdisplays_displayport_hdcp_capable",
            "spdisplays_displayport_max_bandwidth" : "5.40 Gbps",
            "spdisplays_displayport_max_lanes" : "4",
            "spdisplays_displayport_max_spread" : "0.5%",
            "spdisplays_displayport_sink_ascii_name" : "Dp1.4",
            "spdisplays_displayport_sink_chip_version" : " 1.00",
            "spdisplays_displayport_sink_count" : "1",
            "spdisplays_displayport_sink_sw_version" : " 3",
            "spdisplays_displayport_sink_vendor" : "00 e0 4c",
            "spdisplays_displayport_source_ascii_name" : "AAPL",
            "spdisplays_displayport_source_chip_version" : " 0.01",
            "spdisplays_displayport_source_sw_version" : " 1.00",
            "spdisplays_displayport_source_vendor" : "00 10 fa",
            "spdisplays_displayport_valid_error_lane0" : "1",
            "spdisplays_displayport_valid_error_lane1" : "1",
            "spdisplays_displayport_valid_error_lane2" : "1",
            "spdisplays_displayport_valid_error_lane3" : "1"
          },
          "_spdisplays_displayRegID" : "89af",
          "_spdisplays_edid" : "0x00ffffffffffff001c5400280101010130200104c53f2478fbb4e5ab4f47a927105054254a00d1c001010101010181809500b30001017cdd0068f1705a806c488a00b9882100001e000000fd003090f6f686010a202020202020000000fc004d3238550a2020202020202020000000ff003232343830423030313334310a028f02032f714903042f103f61765d2023091707830100006d1a0000020b3090000f661f661fe305c001e6060d0166661ff65b006ea0a01f5017201804b9882100001ef5bd0064a0a055501220f80cb9882100001e967f8078703821401c203804b9882100001e00000000000000000000000000000000000000000000000000007070123f000003013c5fe80004ff0977001b801f009f056600088007001ff00104ff0e4f0007801f006f08590045800700ceac0104ff0e9f002f801f006f087e00028004002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c64",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60 Hz",
          "spdisplays_ambient_brightness" : "spdisplays_no",
          "spdisplays_connection_type" : "spdisplays_displayport_dongletype_dp",
          "spdisplays_depth" : "CGSThirtyBitColor",
          "spdisplays_display-serial-number" : "22480B001341",
          "spdisplays_main" : "spdisplays_yes",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60 Hz",
          "spdisplays_rotation" : "spdisplays_supported"
        },
        {
          "_IODisplayEDID" : "{length = 384, bytes = 0x00ffffff ffffff00 1c540028 01010101 ... 00000000 00002c64 }",
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number2" : "0",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "48",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "150a0008",
          "_spdisplays_displayPath" : "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG0@1/IOPP/EGP0@0/IOPP/EGP1@0/IOPP/GFX0@0/AMDRadeonX6000_AmdRadeonControllerNavi14/ATY,Boa@0",
          "_spdisplays_displayport_device" : {
            "_name" : "spdisplays_displayport_info",
            "spdisplays_displayport_current_bandwidth" : " 8.10 Gbps",
            "spdisplays_displayport_current_lanes" : "4",
            "spdisplays_displayport_current_spread" : "<= 0.5%",
            "spdisplays_displayport_DPCD_version" : "1.2",
            "spdisplays_displayport_errors_lane0" : "0",
            "spdisplays_displayport_errors_lane1" : "0",
            "spdisplays_displayport_errors_lane2" : "0",
            "spdisplays_displayport_errors_lane3" : "0",
            "spdisplays_displayport_hdcp_capability" : "spdisplays_displayport_hdcp_capable",
            "spdisplays_displayport_max_bandwidth" : "5.40 Gbps",
            "spdisplays_displayport_max_lanes" : "4",
            "spdisplays_displayport_max_spread" : "0.5%",
            "spdisplays_displayport_sink_ascii_name" : "Dp1.4",
            "spdisplays_displayport_sink_chip_version" : " 1.00",
            "spdisplays_displayport_sink_count" : "1",
            "spdisplays_displayport_sink_sw_version" : " 3",
            "spdisplays_displayport_sink_vendor" : "00 e0 4c",
            "spdisplays_displayport_source_ascii_name" : "AAPL",
            "spdisplays_displayport_source_chip_version" : " 0.01",
            "spdisplays_displayport_source_sw_version" : " 1.00",
            "spdisplays_displayport_source_vendor" : "00 10 fa",
            "spdisplays_displayport_valid_error_lane0" : "1",
            "spdisplays_displayport_valid_error_lane1" : "1",
            "spdisplays_displayport_valid_error_lane2" : "1",
            "spdisplays_displayport_valid_error_lane3" : "1"
          },
          "_spdisplays_displayRegID" : "8997",
          "_spdisplays_edid" : "0x00ffffffffffff001c5400280101010130200104c53f2478fbb4e5ab4f47a927105054254a00d1c001010101010181809500b30001017cdd0068f1705a806c488a00b9882100001e000000fd003090f6f686010a202020202020000000fc004d3238550a2020202020202020000000ff003232343830423030313333370a028a02032f714903042f103f61765d2023091707830100006d1a0000020b3090000f661f661fe305c001e6060d0166661ff65b006ea0a01f5017201804b9882100001ef5bd0064a0a055501220f80cb9882100001e967f8078703821401c203804b9882100001e00000000000000000000000000000000000000000000000000007070123f000003013c5fe80004ff0977001b801f009f056600088007001ff00104ff0e4f0007801f006f08590045800700ceac0104ff0e9f002f801f006f087e00028004002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c64",
          "_spdisplays_pixels" : "2160 x 3840",
          "_spdisplays_resolution" : "1080 x 1920 @ 60 Hz",
          "spdisplays_ambient_brightness" : "spdisplays_no",
          "spdisplays_connection_type" : "spdisplays_displayport_dongletype_dp",
          "spdisplays_depth" : "CGSThirtyBitColor",
          "spdisplays_display-serial-number" : "22480B001337",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "2160 x 3840",
          "spdisplays_resolution" : "1080 x 1920 @ 60 Hz",
          "spdisplays_rotation" : 270
        },
        {
          "_IODisplayEDID" : "{length = 384, bytes = 0x00ffffff ffffff00 1c540028 01010101 ... 00000000 00002c64 }",
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number2" : "0",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "48",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "150a0009",
          "_spdisplays_displayPath" : "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG0@1/IOPP/EGP0@0/IOPP/EGP1@0/IOPP/GFX0@0/AMDRadeonX6000_AmdRadeonControllerNavi14/ATY,Boa@0",
          "_spdisplays_displayport_device" : {
            "_name" : "spdisplays_displayport_info",
            "spdisplays_displayport_current_bandwidth" : " 8.10 Gbps",
            "spdisplays_displayport_current_lanes" : "4",
            "spdisplays_displayport_current_spread" : "<= 0.5%",
            "spdisplays_displayport_DPCD_version" : "1.2",
            "spdisplays_displayport_errors_lane0" : "0",
            "spdisplays_displayport_errors_lane1" : "0",
            "spdisplays_displayport_errors_lane2" : "0",
            "spdisplays_displayport_errors_lane3" : "0",
            "spdisplays_displayport_hdcp_capability" : "spdisplays_displayport_hdcp_capable",
            "spdisplays_displayport_max_bandwidth" : "5.40 Gbps",
            "spdisplays_displayport_max_lanes" : "4",
            "spdisplays_displayport_max_spread" : "0.5%",
            "spdisplays_displayport_sink_ascii_name" : "Dp1.4",
            "spdisplays_displayport_sink_chip_version" : " 1.00",
            "spdisplays_displayport_sink_count" : "1",
            "spdisplays_displayport_sink_sw_version" : " 3",
            "spdisplays_displayport_sink_vendor" : "00 e0 4c",
            "spdisplays_displayport_source_ascii_name" : "AAPL",
            "spdisplays_displayport_source_chip_version" : " 0.01",
            "spdisplays_displayport_source_sw_version" : " 1.00",
            "spdisplays_displayport_source_vendor" : "00 10 fa",
            "spdisplays_displayport_valid_error_lane0" : "1",
            "spdisplays_displayport_valid_error_lane1" : "1",
            "spdisplays_displayport_valid_error_lane2" : "1",
            "spdisplays_displayport_valid_error_lane3" : "1"
          },
          "_spdisplays_displayRegID" : "8947",
          "_spdisplays_edid" : "0x00ffffffffffff001c5400280101010130200104c53f2478fbb4e5ab4f47a927105054254a00d1c001010101010181809500b30001017cdd0068f1705a806c488a00b9882100001e000000fd003090f6f686010a202020202020000000fc004d3238550a2020202020202020000000ff003232343830423030313335320a028d02032f714903042f103f61765d2023091707830100006d1a0000020b3090000f661f661fe305c001e6060d0166661ff65b006ea0a01f5017201804b9882100001ef5bd0064a0a055501220f80cb9882100001e967f8078703821401c203804b9882100001e00000000000000000000000000000000000000000000000000007070123f000003013c5fe80004ff0977001b801f009f056600088007001ff00104ff0e4f0007801f006f08590045800700ceac0104ff0e9f002f801f006f087e00028004002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c64",
          "_spdisplays_pixels" : "3840 x 2160",
          "_spdisplays_resolution" : "1920 x 1080 @ 60 Hz",
          "spdisplays_ambient_brightness" : "spdisplays_no",
          "spdisplays_connection_type" : "spdisplays_displayport_dongletype_dp",
          "spdisplays_depth" : "CGSThirtyBitColor",
          "spdisplays_display-serial-number" : "22480B001352",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_2160p",
          "spdisplays_resolution" : "1920 x 1080 @ 60 Hz",
          "spdisplays_rotation" : 180
        },
        {
          "_IODisplayEDID" : "{length = 384, bytes = 0x00ffffff ffffff00 1c540028 01010101 ... 00000000 00002c64 }",
          "_name" : "M28U",
          "_spdisplays_display-product-id" : "2800",
          "_spdisplays_display-serial-number2" : "0",
          "_spdisplays_display-vendor-id" : "1c54",
          "_spdisplays_display-week" : "48",
          "_spdisplays_display-year" : "2022",
          "_spdisplays_displayID" : "150a000a",
          "_spdisplays_displayPath" : "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG0@1/IOPP/EGP0@0/IOPP/EGP1@0/IOPP/GFX0@0/AMDRadeonX6000_AmdRadeonControllerNavi14/ATY,Boa@0",
          "_spdisplays_displayport_device" : {
            "_name" : "spdisplays_displayport_info",
            "spdisplays_displayport_current_bandwidth" : " 8.10 Gbps",
            "spdisplays_displayport_current_lanes" : "4",
            "spdisplays_displayport_current_spread" : "<= 0.5%",
            "spdisplays_displayport_DPCD_version" : "1.2",
            "spdisplays_displayport_errors_lane0" : "0",
            "spdisplays_displayport_errors_lane1" : "0",
            "spdisplays_displayport_errors_lane2" : "0",
            "spdisplays_displayport_errors_lane3" : "0",
            "spdisplays_displayport_hdcp_capability" : "spdisplays_displayport_hdcp_capable",
            "spdisplays_displayport_max_bandwidth" : "5.40 Gbps",
            "spdisplays_displayport_max_lanes" : "4",
            "spdisplays_displayport_max_spread" : "0.5%",
            "spdisplays_displayport_sink_ascii_name" : "Dp1.4",
            "spdisplays_displayport_sink_chip_version" : " 1.00",
            "spdisplays_displayport_sink_count" : "1",
            "spdisplays_displayport_sink_sw_version" : " 3",
            "spdisplays_displayport_sink_vendor" : "00 e0 4c",
            "spdisplays_displayport_source_ascii_name" : "AAPL",
            "spdisplays_displayport_source_chip_version" : " 0.01",
            "spdisplays_displayport_source_sw_version" : " 1.00",
            "spdisplays_displayport_source_vendor" : "00 10 fa",
            "spdisplays_displayport_valid_error_lane0" : "1",
            "spdisplays_displayport_valid_error_lane1" : "1",
            "spdisplays_displayport_valid_error_lane2" : "1",
            "spdisplays_displayport_valid_error_lane3" : "1"
          },
          "_spdisplays_displayRegID" : "893b",
          "_spdisplays_edid" : "0x00ffffffffffff001c5400280101010130200104c53f2478fbb4e5ab4f47a927105054254a00d1c001010101010181809500b30001017cdd0068f1705a806c488a00b9882100001e000000fd003090f6f686010a202020202020000000fc004d3238550a2020202020202020000000ff003232343830423030313336300a028e02032f714903042f103f61765d2023091707830100006d1a0000020b3090000f661f661fe305c001e6060d0166661ff65b006ea0a01f5017201804b9882100001ef5bd0064a0a055501220f80cb9882100001e967f8078703821401c203804b9882100001e00000000000000000000000000000000000000000000000000007070123f000003013c5fe80004ff0977001b801f009f056600088007001ff00104ff0e4f0007801f006f08590045800700ceac0104ff0e9f002f801f006f087e00028004002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c64",
          "_spdisplays_pixels" : "2160 x 3840",
          "_spdisplays_resolution" : "1080 x 1920 @ 60 Hz",
          "spdisplays_ambient_brightness" : "spdisplays_no",
          "spdisplays_connection_type" : "spdisplays_displayport_dongletype_dp",
          "spdisplays_depth" : "CGSThirtyBitColor",
          "spdisplays_display-serial-number" : "22480B001360",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "2160 x 3840",
          "spdisplays_resolution" : "1080 x 1920 @ 60 Hz",
          "spdisplays_rotation" : 90
        }
      ],
      "spdisplays_optionrom-version" : "113-D32206U1-020",
      "spdisplays_pcie_width" : "x8",
      "spdisplays_revision-id" : "0x0040",
      "spdisplays_rom-revision" : "113-D3220E-190",
      "spdisplays_vbios-version" : "113-D32206U1-020",
      "spdisplays_vendor" : "sppci_vendor_amd",
      "spdisplays_vram" : "4 GB",
      "sppci_bus" : "spdisplays_pcie_device",
      "sppci_device_type" : "spdisplays_gpu",
      "sppci_model" : "AMD Radeon Pro 5500M"
    }
  ]
}%
  1. ioreg -l | grep EDID
    | |   |           | | |         "IODisplayEDID" = <00ffffffffffff00061044a000000000241d0104b5221678020fb1ae5243b0260d505400000001010101010101010101010101010101e7910050c08037700820980859d71000001a000000fc00436f6c6f72204c43440a202020000000100000000000000000000000000000000000100000000000000000000000000000017b70127903007f813ffa10000301180f28170000000000000000000000000000004c503136305754312d534a41360a200046305930343037303148533037434c41390a20202020207f8129fa10000201001100000290034e045605c007b00a580e01130d1a0923b7312e43f15e2882ddb65efec90000000000000000000000b490>
    | |   |           | | |         "IODisplayEDID" = <00ffffffffffff001c5400280101010130200104c53f2478fbb4e5ab4f47a927105054254a00d1c001010101010181809500b30001017cdd0068f1705a806c488a00b9882100001e000000fd003090f6f686010a202020202020000000fc004d3238550a2020202020202020000000ff003232343830423030313334310a028f02032f714903042f103f61765d2023091707830100006d1a0000020b3090000f661f661fe305c001e6060d0166661ff65b006ea0a01f5017201804b9882100001ef5bd0064a0a055501220f80cb9882100001e967f8078703821401c203804b9882100001e00000000000000000000000000000000000000000000000000007070123f000003013c5fe80004ff0977001b801f009f056600088007001ff00104ff0e4f0007801f006f08590045800700ceac0104ff0e9f002f801f006f087e00028004002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c64>
    | |   |           | | |         "IODisplayEDID" = <00ffffffffffff001c5400280101010130200104c53f2478fbb4e5ab4f47a927105054254a00d1c001010101010181809500b30001017cdd0068f1705a806c488a00b9882100001e000000fd003090f6f686010a202020202020000000fc004d3238550a2020202020202020000000ff003232343830423030313333370a028a02032f714903042f103f61765d2023091707830100006d1a0000020b3090000f661f661fe305c001e6060d0166661ff65b006ea0a01f5017201804b9882100001ef5bd0064a0a055501220f80cb9882100001e967f8078703821401c203804b9882100001e00000000000000000000000000000000000000000000000000007070123f000003013c5fe80004ff0977001b801f009f056600088007001ff00104ff0e4f0007801f006f08590045800700ceac0104ff0e9f002f801f006f087e00028004002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c64>
    | |   |           | | |         "IODisplayEDID" = <00ffffffffffff001c5400280101010130200104c53f2478fbb4e5ab4f47a927105054254a00d1c001010101010181809500b30001017cdd0068f1705a806c488a00b9882100001e000000fd003090f6f686010a202020202020000000fc004d3238550a2020202020202020000000ff003232343830423030313335320a028d02032f714903042f103f61765d2023091707830100006d1a0000020b3090000f661f661fe305c001e6060d0166661ff65b006ea0a01f5017201804b9882100001ef5bd0064a0a055501220f80cb9882100001e967f8078703821401c203804b9882100001e00000000000000000000000000000000000000000000000000007070123f000003013c5fe80004ff0977001b801f009f056600088007001ff00104ff0e4f0007801f006f08590045800700ceac0104ff0e9f002f801f006f087e00028004002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c64>
    | |   |           | |           "IODisplayEDID" = <00ffffffffffff001c5400280101010130200104c53f2478fbb4e5ab4f47a927105054254a00d1c001010101010181809500b30001017cdd0068f1705a806c488a00b9882100001e000000fd003090f6f686010a202020202020000000fc004d3238550a2020202020202020000000ff003232343830423030313336300a028e02032f714903042f103f61765d2023091707830100006d1a0000020b3090000f661f661fe305c001e6060d0166661ff65b006ea0a01f5017201804b9882100001ef5bd0064a0a055501220f80cb9882100001e967f8078703821401c203804b9882100001e00000000000000000000000000000000000000000000000000007070123f000003013c5fe80004ff0977001b801f009f056600088007001ff00104ff0e4f0007801f006f08590045800700ceac0104ff0e9f002f801f006f087e00028004002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c64>
    | |   |           |   | |   "Config2" = {"GFX0"={"EDID"={"index"=0},"FeatureControl"=12,"unload"=No}}
    | |   |           |   | |   "Config4" = {"IGPU"={"unload"=Yes},"display"={"EDID"={"index"=0},"FeatureControl"=12,"unload"=No},"GFX0"={"EDID"={"index"=0},"FeatureControl"=12,"unload"=No}}
    | |   |           |   | |   "Config3" = {"IGPU"={"unload"=Yes},"GFX0"={"EDID"={"index"=0},"FeatureControl"=12,"unload"=No}}
    | |   | | |   "FeatureControl" = {"SpreadON"=1,"EDPDownSpreadDisable"=0,"YTiling"=1,"ResourceSetSupport"=1,"SupportDynamicCDClk"=1,"Enable8K"=1,"RenderStandby"=1,"TTNFBuffDistribution"=1,"EnablePlaneRotation"=1,"GFMPPFM"=2,"Watermarks"=1,"GPUInterruptHandling"=1,"IgnorePanelTimings"=0,"ASRDisable"=0,"GammaTestMode"=0,"CoarsePowerGatingSelect"=4,"EnableTconScaler"=1,"RotationSupportForMultiLink"=1,"EdramSWModeInED"=1,"FastDisplayDetectDisable"=0,"RCxEIModeEnable"=1,"OptimizeForTTNFAftersec"=30,"SetRC6Voltage"=0,"transcapenable"=1,"SupportPSRwithExternalDisplay"=1,"DPDownSpreadDisable"=0,"NV12Enable"=1,"UseProgrammedCoefficients"=0,"DPM"=1,"CachedEDIDDisable"=0,"DisableInternalPanel"=0,"Gamma"=1,"IPCEnable"=1,"DynamicRingTables"=0,"DisableApertureAccess"=0,"PPPM"=1,"EnableDeepDisplay"=1,"ForceAccelBacked"=0,"GammaAdjustDisable"=0,"PowerStates"=1,"MaximumSelfRefreshLevel"=3}
  1. displayplacer list | grep -i persistent / ColorSync Utility > Devices > Displays > ID

findings:

  1. System Information shows unique serial numbers
  2. system_profiler shows additional serial numbers, and are unique among the monitors
  3. ioreg shows unique IODisplayEDID

experience

  1. no are not swapping randomly

conclusion:
Intel Macbook Pro able to uniquely identify M28Us and no issue of displays swapping randomly

further testing

  • Macbook Pro Intel with Ventura
  • Mac Studio with Asahi Linux/Windows/ARM

to see if it's the hardware of Mac Studio M1 Max not able to identify M28U serial numbers, or it's the software of Ventura

@gingerbeardman
Copy link

gingerbeardman commented Jun 11, 2023

Here's mine

  • Lenovo T24d-10
    • ioreg -l | grep EDID "EDID UUID" = "30AEB461-0000-0000-151D-010380342078"
    • ColorSync F56E02CD-5383-4A80-A127-34DDEFC68E97
  • Apple MacBook Pro (14-inch, 2021) M1 Pro
{
  "SPDisplaysDataType" : [
    {
      "_name" : "Apple M1 Pro",
      "spdisplays_metalfamily" : "spdisplays_mtlgpufamilyapple7",
      "spdisplays_ndrvs" : [
        {
          "_name" : "LEN T24d-10",
          "_spdisplays_display-product-id" : "61b4",
          "_spdisplays_display-serial-number" : "1010101",
          "_spdisplays_display-vendor-id" : "30ae",
          "_spdisplays_display-week" : "21",
          "_spdisplays_display-year" : "2019",
          "_spdisplays_displayID" : "3",
          "_spdisplays_pixels" : "1200 x 1920",
          "_spdisplays_resolution" : "1200 x 1920 @ 60.00Hz",
          "spdisplays_main" : "spdisplays_yes",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "1200 x 1920",
          "spdisplays_resolution" : "1200 x 1920 @ 60.00Hz",
          "spdisplays_rotation" : 90
        },
        {
          "_name" : "Color LCD",
          "_spdisplays_display-product-id" : "a04e",
          "_spdisplays_display-serial-number" : "fd626d62",
          "_spdisplays_display-vendor-id" : "610",
          "_spdisplays_display-week" : "0",
          "_spdisplays_display-year" : "0",
          "_spdisplays_displayID" : "1",
          "_spdisplays_pixels" : "3024 x 1964",
          "_spdisplays_resolution" : "1512 x 982 @ 120.00Hz",
          "spdisplays_ambient_brightness" : "spdisplays_yes",
          "spdisplays_connection_type" : "spdisplays_internal",
          "spdisplays_display_type" : "spdisplays_built-in-liquid-retina-xdr",
          "spdisplays_mirror" : "spdisplays_off",
          "spdisplays_online" : "spdisplays_yes",
          "spdisplays_pixelresolution" : "spdisplays_3024x1964Retina"
        }
      ],
      "spdisplays_vendor" : "sppci_vendor_Apple",
      "sppci_bus" : "spdisplays_builtin",
      "sppci_cores" : "14",
      "sppci_device_type" : "spdisplays_gpu",
      "sppci_model" : "Apple M1 Pro"
    }
  ]
}

@jakehilborn
Copy link
Owner

Released in v1.4.0

@jakehilborn
Copy link
Owner

@Vaccarini-Lorenzo @andremetzen @hh @iFission @gingerbeardman displayplacer v1.4.0 supports addressing screens by serial id. If all of the screens in your setup have unique serial ids, this should fix the id switching issue.

Could you try out the new version and let me know if it works on your setup?

@gingerbeardman
Copy link

Serial works for me!

@iFission
Copy link

works for me now since macOS 13.4.1 update. seems like apple fixed the issue and the os is able to ID the monitors properly across sleep/restarts

@andremetzen
Copy link

@iFission I'm running macos 13.3.1 and it's fixed for me too.

@mneveroff
Copy link

@iFission I'm running macos 13.3.1 and it's fixed for me too.

Hey @andremetzen, you and @iFission here seem to be running the same M28U as I do and have faced the same issue (identical serialIDs as per displayplacer) I've been experiencing and continue experiencing the desktops switching places intermittently throughout, am now on 14.1.2 Sonoma.

Can you elaborate on what's been fixed for you and what approach you're using to restore the arrangement? Or have you stopped experiencing the issues all together?

(My issue is exacerbated by the fact that I run a caldigit TB4 dock and use Spaces a lot, which Apple doesn't provide API for, but the screens messing up doesn't help that either)

@iFission
Copy link

iFission commented Feb 26, 2024

hi @mneveroff,

Can you elaborate on what's been fixed for you

The OS now reports consistent Persistent screen id

From my experience, I can sleep/wake or restart and the screen arrangement and sequence do not mess up. ie monitor 1 continues to monitor 1, and not re-assigned to monitor 2 after restart.

Or have you stopped experiencing the issues all together?

Yes

Mentioned above, before the update:

findings:

System Information does not show serial numbers
system_profiler shows additional serial numbers, but are all the same
ioreg shows same EDID UUID, but unique AlphanumericSerialNumber
test:

plug in first monitor (monitor 1), gets ID in ColorSync Utility as ...63CA
disconnect cable
using same cable, plug in first monitor (monitor 2), gets ID in ColorSync Utility as ...63CA
plug in second monitor (monitor 1), gets ID in ColorSync Utility as ...FF18
repeat with other combinations, sequence
the IDs assigned are dependent on the order of monitors connected, not on the different monitors 1/2/3/4

caldigit TB4 dock

Not sure if this could be the cause. I am running USB-C cables from Mac Studio directly to each of the four M28U

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants