Как получить монитор 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'
Основываясь на ответе @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. Самсунг нуждается в пощечине...