我想获取OS X / macOS中的EDID信息?
看起来它存储在IORegistry
中。是否有一种方法可以通过当前的monomac
库访问它?我能用标准的interop
做到吗,还是需要编写自定义的shim
?
似乎ioreg
命令行也可以访问IODisplay
EDID属性,但似乎没有简单的方法来获取设备的缩略列表。
我想获取OS X / macOS中的EDID信息?
看起来它存储在IORegistry
中。是否有一种方法可以通过当前的monomac
库访问它?我能用标准的interop
做到吗,还是需要编写自定义的shim
?
似乎ioreg
命令行也可以访问IODisplay
EDID属性,但似乎没有简单的方法来获取设备的缩略列表。
ioreg -lw0 -r -c "IODisplayConnect" -d 2 | grep IODisplayEDID
命令(感谢 @Steven),获取所有监视器的 EDID 数据的十六进制形式。pbpaste | edid-decode
命令。edid-decode
的人来说,只需下载存储库为 zip 文件,解压缩,进入终端中的结果目录并键入“make”即可。就是这样简单。 - WillyC最近 macOS 的更简单解决方案:
system_profiler -json SPDisplaysDataType | jq -r '.SPDisplaysDataType[0].spdisplays_ndrvs[]._spdisplays_edid'
这将以十六进制格式提取第一GPU上显示器的EDID。更改索引(“[0]
”)为[1]
或[2]
等,以获取其他GPU / 显示器的EDID。或者只需删除jq
并复制+粘贴在详细输出中找到的十六进制EDID:
system_profiler -json SPDisplaysDataType
ioreg
的解决方案都可行,但解析其输出很麻烦,并且可能在将来失效。虽然 Apple 没有对此进行说明,但当使用 system_profiler
与 -json
或 -xml
标志一起使用时,它会输出更多信息,包括我们关心的 edid。system_profiler
上使用 -json
标志是相对较新的。如果您没有 -json
标志,则可以改用 -xml
,但无法使用 jq 解析输出:system_profiler -xml SPDisplaysDataType
。[0]
索引可能对你不适用。这取决于你的GPU顺序和哪个显示器正在使用哪个GPU。虽然对于你来说,system_profiler -json SPDisplaysDataType | grep -i edid
什么也没有返回吗?如果是这样,你的监视器设置有什么特别之处吗?我很惊讶你无法在ioreg -l | grep "IODisplayEDID"
或system_profiler
中找到EDID!你还可以尝试使用system_profiler -xml SPDisplaysDataType | grep -i -A1 _edid
来确保它不起作用。 - Chrisioreg
中。也许 macOS 对于苹果 GPU 或某些情况下不输出 EDID 数据。就像我注意到我的输出似乎说它正在使用 DisplayPort 与我的 MBP 屏幕通信,而 spdisplays_vendor
是 Intel
,而你的是 sppci_vendor_Apple
,并且没有提到 DisplayPort。这是我的输出以供比较:https://gist.github.com/varenc/4df0789257c2c3e9cc18d5f8a1b1a445最后一个建议:您可以尝试 SwitchResX(https://www.madrau.com/),看看它的“导出 EDID”按钮是否适用于您。 - Chrisfor 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'
如果您想检查EDID文本,请尝试使用
ioreg -lw0 -r -c "IODisplayConnect" -n "display0" -d 2 | grep IODisplayEDID | sed "/[^<]*</s///" | xxd -p -r | strings -6
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。三星需要受到惩罚...
这是system_profiler -json SPDisplaysDataType
的完整输出:
{
"SPDisplaysDataType" : [
{
"_name" : "Apple M1 Max",
"spdisplays_mtlgpufamilysupport" : "spdisplays_metal3",
"spdisplays_ndrvs" : [
{
"_name" : "C27JG5x",
"_spdisplays_display-product-id" : "f58",
"_spdisplays_display-serial-number" : "3055324d",
"_spdisplays_display-vendor-id" : "4c2d",
"_spdisplays_display-week" : "51",
"_spdisplays_display-year" : "2018",
"_spdisplays_displayID" : "4",
"_spdisplays_pixels" : "2560 x 1440",
"_spdisplays_resolution" : "2560 x 1440 @ 144.00Hz",
"spdisplays_main" : "spdisplays_yes",
"spdisplays_mirror" : "spdisplays_off",
"spdisplays_online" : "spdisplays_yes",
"spdisplays_pixelresolution" : "spdisplays_qhd",
"spdisplays_resolution" : "2560 x 1440 @ 144.00Hz",
"spdisplays_rotation" : "spdisplays_supported"
},
{
"_name" : "C27JG5x",
"_spdisplays_display-product-id" : "f58",
"_spdisplays_display-serial-number" : "3055324d",
"_spdisplays_display-vendor-id" : "4c2d",
"_spdisplays_display-week" : "51",
"_spdisplays_display-year" : "2018",
"_spdisplays_displayID" : "3",
"_spdisplays_pixels" : "2560 x 1440",
"_spdisplays_resolution" : "2560 x 1440 @ 144.00Hz",
"spdisplays_mirror" : "spdisplays_off",
"spdisplays_online" : "spdisplays_yes",
"spdisplays_pixelresolution" : "spdisplays_qhd",
"spdisplays_resolution" : "2560 x 1440 @ 144.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"
}
]
}
edid-decoder
进行解析等操作。话虽如此,你可以检查一下我刚刚发布的解决方案是否有效:https://dev59.com/e1oT5IYBdhLWcg3w0B-_#74523869Apple可能已经更改了ioreg
的某些内容,这会破坏其他解决方案,但我可以确认我的解决方案在12.3上可行。 - Chrissudo ioreg -l | grep IODisplayEDID
IOKit
还没有被 Xamarin 绑定(请求较少,因此优先级较低)(跟踪问题 https://bugzilla.xamarin.com/show_bug.cgi?id=28503),虽然我已经做了一些绑定,但我发现直接使用ioreg
命令并解析所需信息要快得多,例如:http://stackoverflow.com/a/31716044/4984832。 - SushiHangoverioreg -lw0 | grep IODisplayEDID | sed "/[^<]*</s///" | xxd -p -r | strings -6
根据您的最终需求,这应该能帮助您朝正确的方向前进。 - SushiHangover