TL/DR: 我有一台带有 HDMI 端口的 ACER GN246HL 显示器,它停止正常工作,可能是由于显示器 EEPROM 损坏。作为 Ubuntu 22.10 计算机上的解决方法,我需要通过从显示器本身(处于有缺陷状态)以外的源检索和验证 EDID 数据来找出正确的显示器 EDID。 UBUNTU 22.10 中是否有一个进程可以将显示器 EDID 数据持久存储在磁盘上,以便在重新启动后仍能保存?如果答案是肯定的,我希望我可以检索显示器的 EDID,因为它是在显示器仍然正常工作时存储的。
到目前为止我所知道/怀疑的: 在启动期间,BIOS 或内核不再识别显示器(在 Ubuntu 和 Win10 上,无论 GPU 或 GPU 驱动程序如何)。我怀疑显示器 EEPROM 已被损坏或出现故障,因此显示器 EDID 是垃圾,或者 PC 和显示器之间的 DDC/I2C 通信不再正常工作。然而,显示器并没有完全失效或无法使用。在我的 Ubuntu 22.10 机器上,尽管在启动序列期间保持 100% 黑色,但它在启动后通过显示 Ubuntu 登录页面恢复正常。从那里开始,登录和其他一切都可以正常工作,并且监视器(几乎)像往常一样执行。分辨率正确,播放视频时没有延迟、图像噪音或卡顿等现象。虽然显示的颜色看起来基本没问题,但色域仍然存在一些问题,主要表现在视频播放中明显的“烧坏”亮点。在 Windows 上情况更糟,一台装有 Win10 的机器启动(不显示任何内容)但无法显示任何登录页面。在第二个 Windows10 机器上,BIOS 抱怨(很可能是缺少显示器)并拒绝启动。
我认为可能的解决方案(对于Ubuntu): 上述所有内容表明,可以通过指示内核在启动期间从文件中读取正确的显示器 EDID(而不是尝试从显示器 EEPROM 中获取它)来解决该问题。
解决这个问题还缺少什么: 我需要为我的显示器找到正确的 EDID 数据,但我无法从显示器本身获取它。尝试了各种工具,但所有工具似乎都表明监视器的 I2C 总线地址丢失/不起作用。我发现了三种从显示器以外的其他来源获取 EDID 的潜在途径:
一个github存储库有 ACER GN246HL 的 EDID 数据。但 EDID 随制造日期而变化,并且存储库中没有我的显示器的制造日期的 EDID。我不知道,也许现有的 EDID 之一可以修改以适合我的显示器,但我还没有尝试弄清楚是否以及如何做到这一点。
我在 Windows10 计算机上安装了一个名为 Monitor Asset Manager v9.2 的工具。它可以读取连接的显示器的 EDID,还可以创建 INF 文件来修改 Windows 上的 EDID 数据。有趣的是,该工具表明 Windows 将 EDID 数据永久存储在注册表中。显然,注册表项中包含过去插入此 Windows 盒子的所有显示器(包括 ACER GN246HL)的 EDID 数据。但是,我还不知道如何提取此 EDID 数据(并将其转换为二进制文件),然后如何确保提取的 EDID 仍然是显示器正常工作时的数据,并且在显示器正常工作时不会被意外更改。同样但现在有缺陷的显示器在稍后的时间点被插入。
这几乎是猜测,但考虑到 Windows 计算机上的注册表中存储有持久的 EDID 数据,我想知道 Linux 计算机上是否会发生类似的情况。答案可能是否定的,但是显示器怎么可能在开机后恢复并正确显示登录页面呢?
最后向论坛提问: 我认为 EDID 数据暂时存储在 xorg.0.log 文件中。但这在我的情况下不起作用,因为由于显示器 EEPROM 损坏,内核无法访问我的 ACER GN246HL 显示器的 EDID 数据。因此我的问题是,UBUNTU 22.10 中是否有一个进程可以将 EDID 数据持久存储在磁盘上?如果答案是肯定的,我想我可能会检索过去当显示器仍正常工作时存储的显示器 EDID。
背景或“为什么显示器停止正常工作?”: 我不知道到底发生了什么。该显示器在使用各种 GPU 和 GPU 驱动程序的 Windows 和 Linux 上的单显示器和双显示器设置中运行多年。它还可以在两台 PC 和一台 KVM 切换器的设置中运行。当我最近将 KVM 设置中的一台 PC 暂时更换为具有 X86 英特尔处理器的 SBC 时,该显示器的电路似乎已损坏。当我手动将 KVM 切换到 SBC 机器时,双显示器设置中的 ACER 显示器立即变黑,并且第二个显示器改变了分辨率。我认为我永远不会找出到底出了什么问题,但这可能与 SBC 上的固件较差有关,在此之前我只在无头模式下使用过 SBC。