Как получить монитор EDID в OSX?

Я ищу, чтобы получить информацию EDID в OSX?

Похоже, он хранится в IORegistry, Есть ли способ получить к нему доступ с текущего monomac библиотеки? Могу ли я сделать это со стандартным interop или мне нужно написать кастом shim?

Похоже, ioreg командная строка также может добраться до IODisplay Атрибут EDID, но, похоже, нет простого способа получить сокращенный список устройств.

6 ответов

К сожалению, готового решения нет.

Во-первых, вам нужно загрузить программу "edid-decode". К сожалению, он недоступен через homebrew, поэтому вам придется загрузить его с https://git.linuxtv.org/edid-decode.git/ или https://github.com/timvideos/edid-decode. К счастью, это всего лишь один файл с расширением.c, поэтому вам нужно набрать только "make". (Не выполняйте "make install" без редактирования bindir и mandir в Makefile). Поместите полученный двоичный файл в свой путь.

Затем выполните ioreg -lw0 -r -c "IODisplayConnect" -d 2 | grep IODisplayEDID (спасибо @Steven), чтобы получить данные EDID в шестнадцатеричной форме для всех ваших мониторов.

Выберите один из ваших выходов, скопируйте шестнадцатеричную строку в буфер обмена, а затем выполните pbpaste | edid-decode

Более простое решение для последних macOS:

      system_profiler -json SPDisplaysDataType  | jq -r '.SPDisplaysDataType[0].spdisplays_ndrvs[]._spdisplays_edid'

Это извлечет EDID в шестнадцатеричном формате для мониторов на первом графическом процессоре. Изменить индекс ("[0]") к[1]или[2]и т. д., чтобы получить его для других графических процессоров/мониторов. Или просто бросьjqи скопируйте + вставьте шестнадцатеричный EDID, найденный в подробном выводе:

      system_profiler -json SPDisplaysDataType

Решения, на которые опираютсяioregвсе работает, но синтаксический анализ его вывода - это боль и может сломаться в будущем. Apple не документирует это, но при использовании с флагами или выводит гораздо больше информации. Включая edid, о котором мы заботимся.

примечание: флаг наsystem_profilerявляется относительно новым. Если у вас нет-jsonфлаг, который вы можете использовать-xmlвместо этого вы не можете использовать jq для анализа вывода:system_profiler -xml SPDisplaysDataType

Если вы хотите проверить текст EDID, попробуйте

ioreg -lw0 -r -c "IODisplayConnect" -n "display0" -d 2 | grep IODisplayEDID | sed "/[^<]*</s///" | xxd -p -r | strings -6
      for theedid in $(ioreg -lw0 -r -c "IODisplayConnect" -d 2 | grep IODisplayEDID | sed -E "/^.*<(.*)>/s//\1/"); do edid-decode <<< $theedid; done

все, что похоже на edid:

      for theedid in $(ioreg -lw0 | grep '<00ffffffffffff' | sed -E "/^.*<(.*)>/s//\1/"); do edid-decode <<< $theedid; done

или же:

      ioreg -lrw0 -c "IODisplayConnect" -d2 | sed -nE '/^.*"IODisplayEDID" = <(.*)>/s//edid-decode <<< \1/p'

sudo ioreg -l | grep IODisplayEDID

Основываясь на ответе @KTane, этот фрагмент ничего не показал, но это показывает (macOS Monterey 12.3 на Mac Studio):

      ioreg -l | grep EDID
    | |   |   |   "DisplayAttributes" = {"SupportsSuspend"=No,"MaximumRefreshRate"=144,"SupportsActiveOff"=No,"PortID"=32,"ProductAttributes"={"ManufacturerID"="SAM","YearOfManufacture"=2018,"SerialNumber"=810889805,"ProductName"="C27JG5x","AlphanumericSerialNumber"="HTOKC02346","LegacyManufacturerID"=19501,"ProductID"=3928,"WeekOfManufacture"=51},"MaxVerticalImageSize"=34,"MaxHorizontalImageSize"=60,"HasHDMILegacyEDID"=No,"Chromaticity"={"Red"={"X"=44352,"Y"=20736},"Green"={"X"=18048,"Y"=43328},"Blue"={"X"=9984,"Y"=4032}},"DefaultColorSpaceIsSRGB"=No,"NativeFormatHorizontalPixels"=2560,"DefaultWhitePoint"={"X"=20544,"Y"=21568,"Gamma"=144179},"SupportsVariableRefreshRate"=No,"AspectRatio"=15,"MinimumRefreshRate"=50,"WhitePoints"=({"X"=20544,"Y"=21568,"Gamma"=144179}),"PreciseAspectRatio"=115652,"ContinuousFrequencySupport"="None","SupportsStandby"=Yes,"NativeFormatVerticalPixels"=1440}

    | |   |   |   "EDID UUID" = "4C2D580F-0000-0000-331C-0104A53C2278"

    | |   |   |   "DisplayAttributes" = {"SupportsSuspend"=No,"MaximumRefreshRate"=144,"SupportsActiveOff"=No,"PortID"=48,"ProductAttributes"={"ManufacturerID"="SAM","YearOfManufacture"=2018,"SerialNumber"=810889805,"ProductName"="C27JG5x","AlphanumericSerialNumber"="HTOKC02337","LegacyManufacturerID"=19501,"ProductID"=3928,"WeekOfManufacture"=51},"MaxVerticalImageSize"=34,"MaxHorizontalImageSize"=60,"HasHDMILegacyEDID"=No,"Chromaticity"={"Red"={"X"=44352,"Y"=20736},"Green"={"X"=18048,"Y"=43328},"Blue"={"X"=9984,"Y"=4032}},"DefaultColorSpaceIsSRGB"=No,"NativeFormatHorizontalPixels"=2560,"DefaultWhitePoint"={"X"=20544,"Y"=21568,"Gamma"=144179},"SupportsVariableRefreshRate"=No,"AspectRatio"=15,"MinimumRefreshRate"=50,"WhitePoints"=({"X"=20544,"Y"=21568,"Gamma"=144179}),"PreciseAspectRatio"=115652,"ContinuousFrequencySupport"="None","SupportsStandby"=Yes,"NativeFormatVerticalPixels"=1440}

    | |   |   |   "EDID UUID" = "4C2D580F-0000-0000-331C-0104A53C2278"

Можете ли вы определить проблему? Да, оба моих монитора имеют одинаковый серийный номер и UUID. Самсунг нуждается в пощечине...

Другие вопросы по тегам