惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
V
Visual Studio Blog
P
Privacy International News Feed
月光博客
月光博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
Lohrmann on Cybersecurity
N
News and Events Feed by Topic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
Webroot Blog
Webroot Blog
T
Threatpost
宝玉的分享
宝玉的分享
The Last Watchdog
The Last Watchdog
小众软件
小众软件
L
LINUX DO - 最新话题
C
Cisco Blogs
T
Troy Hunt's Blog
Schneier on Security
Schneier on Security
酷 壳 – CoolShell
酷 壳 – CoolShell
www.infosecurity-magazine.com
www.infosecurity-magazine.com
雷峰网
雷峰网
G
GRAHAM CLULEY
有赞技术团队
有赞技术团队
Know Your Adversary
Know Your Adversary
博客园 - 叶小钗
罗磊的独立博客
V
V2EX
博客园 - Franky
P
Proofpoint News Feed
SecWiki News
SecWiki News
腾讯CDC
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
PCI Perspectives
PCI Perspectives
V2EX - 技术
V2EX - 技术
Google DeepMind News
Google DeepMind News
Last Week in AI
Last Week in AI
aimingoo的专栏
aimingoo的专栏
Cisco Talos Blog
Cisco Talos Blog
N
News and Events Feed by Topic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题

网上冲浪指南

修复小新 Pad Pro 2021 蓝牙耳机没有声音的问题 手动升级一下 OpenWRT 如何安全地面向公网提供本地 NAS 上的 Web 服务 徒步·金堂开照寺二道坪山脊环线 Hello, ActivityPub 迁移博客到 VPS 优化博客网站的性能 解决 Qsirch 无法搜索文件夹的问题 N100 小主机遭遇 NVMe 硬盘故障:一次系统的诊断与反思 How to switch GitHub CLI account automatically
外接显示器 EDID 损坏如何处理
Zeeko · 2025-11-24 · via 网上冲浪指南

上周五,我的外置显示器突然在一次热插拔后无法被笔记本电脑识别 4K 分辨率了,在排查了笔记本电脑、线材问题后,基本可以确定是显示器本身出了问题。

从内核日志来看,系统无法读取显示器 EDID 信息:

[  174.781913] EDID has corrupt header
[  174.781923] amdgpu 0000:65:00.0: [drm] *ERROR* EDID checksum invalid.
[  178.681809] EDID has corrupt header
[  178.681819] amdgpu 0000:65:00.0: [drm] *ERROR* EDID checksum invalid.
[  232.892047] EDID has corrupt header
[  232.892057] amdgpu 0000:65:00.0: [drm] *ERROR* EDID checksum invalid.
[  235.172080] EDID has corrupt header
[  235.172091] amdgpu 0000:65:00.0: [drm] *ERROR* EDID checksum invalid.
[  623.720346] EDID has corrupt header
[  623.720359] amdgpu 0000:65:00.0: [drm] *ERROR* EDID checksum invalid.
[  625.949958] EDID has corrupt header
[  625.949969] amdgpu 0000:65:00.0: [drm] *ERROR* EDID checksum invalid.

EDID 是一份显示器能力识别数据,包含生产厂商、支持的分辨率、刷新率等信息。EDID 一般存储在显示器的芯片内,如果显示器有多个输入端口,那么每个端口上的 EDID 通常会被分别存储在独立的芯片内。当电脑连接显示器时,会通过 DDC 读取显示器上存储的 EDID 信息,从而能够让电脑正确识别显示器的型号并输出显示器支持的视频信号。

当 EDID 存储器损坏导致电脑无法读取时,我们可以主动向操作系统提供某个视频输出端口的 EDID 信息。这样以来,解决问题的思路就导向了寻找一份可用的 EDID 文件。

幸好我的显示器有多个输入端口——一个 HDMI 2.0 以及 两个 HDMI 1.4 ,可以尝试读取 HDMI 1.4 端口的 EDID 文件,然后用 EDID 编辑器为其添加 4K@60Hz 的输出设置,作为 HDMI 2.0 接口的 EDID 文件。

读取显示器上的 EDID 文件

在 ArchLinux 上,可以使用 eedid-tool (AUR) 读取并保存 EDID 信息。

# 扫描已连接的显示器 i2c bus
$ eedid-tool -s
Bus 11 has EDID, mfg BOE
1 EDID(s) found.

$ eedid-tool -r -b 11 > ./edid_hdmi1.4.bin

由于 HDMI 1.4 不支持 4K 60Hz 的输入规格,所以需要手动尝试为其添加。

修改 EDID 文件

为了魔改刚刚导出的 EDID 文件,我使用了 AW EDID Editor,这款软件可以完美地通过 Bottles (Wine)运行,打开 AW EDID Editor 后,选择要修改 EDID 文件,稍等片刻后,你将看到这样的界面。

点击 CEA Extension 下面的 Add new CEA Block,选择 Detailed Timing Descriptor。

这时你会看到一个输入框全是 0 的配置界面。

接着点击 Use predefined format,选择希望添加的分辨率规格即可,对于我的显示器来说,需要选择 3840×2160 60Hz。

当配置界面被填充满各种数据后,就可以点击左上角的 File 菜单,保存修改后的 EDID 文件。

设置自动加载 EDID 文件

首先需要将修改后的 EDID 文件保存到 /usr/lib/firmware/edid/ 目录下,Linux 固件相关的二进制文件通常都放在这里。

接着,我采用了下面的 systemd 文件来自动加载 EDID:

[Unit]
Description=Override HDMI EDID for Koios Monitor
After=sys-kernel-debug.mount
Requires=sys-kernel-debug.mount

[Service]
Type=oneshot
# 关键:告诉 systemd 即使脚本跑完了,服务也被视为"active",这样才能执行 stop
RemainAfterExit=yes

# --- 启动时执行 (应用 EDID) ---
# 1. 写入自定义 EDID
ExecStart=/bin/sh -c 'cat /usr/lib/firmware/edid/koios_hdmi2.0.bin > /sys/kernel/debug/dri/1/HDMI-A-1/edid_override'
# 2. 触发热插拔,让内核应用更改
ExecStart=/bin/sh -c 'echo 1 > /sys/kernel/debug/dri/1/HDMI-A-1/trigger_hotplug'

# --- 停止时执行 (撤销修改) ---
# 1. 清空 override 文件
ExecStop=/bin/sh -c 'echo -n reset > /sys/kernel/debug/dri/1/HDMI-A-1/edid_override'
# 2. 再次触发热插拔,让内核读取显示器原本的真实 EDID
ExecStop=/bin/sh -c 'echo 1 > /sys/kernel/debug/dri/1/HDMI-A-1/trigger_hotplug'

[Install]
WantedBy=multi-user.target

由于我经常只会用到这一台显示器,所以还设置了自动启动服务,当需要连接其他显示器时,就可以通过停止这个服务,让操作系统直接读取该显示器提供的 EDID 。

参考链接

在解决这个问题的过程中,参考了 Gemini 3 Pro 生成的回复,不过其中有不少事实性错误,仍应参考 Arch Wiki 的文档:

https://wiki.archlinux.org/title/Kernel_mode_setting#Forcing_modes_and_EDID

另外,为了防止笔记本内置显示器的 EDID 在未来也发生了无法读取的情况,以及方便其他拥有跟我同型号显示器的人需要 EDID 文件,我将这些 EDID 上传到了 IPFS 网络: