Linux下如何强制写EDID? (linux 强制写edid)
随着电脑的普及,我们需要不断地与各种设备进行连接,比如连接外接显示器,又或是连接投影仪。而在这个过程中,我们需要处理各种问题,其中一个很常见的问题就是EDID的问题。那么,在Linux下如何强制写EDID呢?本篇文章将会详细地讲解这个问题的解决方法。
一、什么是EDID?
我们需要知道什么是EDID。EDID(Extended Display Identification Data),即扩展显示器识别数据,是一块存储在显示器ROM中的数据块。它让计算机能够自动识别显示器的尺寸、分辨率、刷新率以及其他相关特性。这个技术简化了计算机和显示器之间的配置步骤,为用户提供了更好的使用体验。
如果你曾经遇到过无法使用显示器的问题——比如屏幕分辨率不正常、颜色显示不合适等,那很可能是EDID出现了问题。这种情况很常见,但是相对而言,Linux用户更容易受到影响,因为Linux并没有像Windows这样的自动识别显示器的功能。
二、为什么需要强制写EDID?
在某些情况下,由于一些原因(可能是硬件故障或软件故障),EDID可能被破坏或无法正常识别。当我们使用Linux时,这种情况经常发生,并且这可能会导致问题,比如不能得到正确的分辨率,或者遇到屏幕闪烁等问题。这时,我们需要强制写EDID,让计算机正确地识别显示器信息,以解决这些问题。
三、如何强制写EDID?
1. 编辑grub文件
如果你是在Linux上安装的多系统环境,那么你需要在grub中加入特定的参数以实现强制写EDID。如下所示:
在启动时,在grub界面按下e以编辑kernel参数,将以下参数添加:
video=VGA-1: EDID=1280×1024
然后,按下F10键以保存参数,并启动计算机。这可以使用您所需的默认分辨率并强制写入EDID。
2. 硬编码EDID
除了在grub文件中添加参数,您还可以尝试手动硬编码EDID。该过程较为复杂,但是如果您需要在其他Linux分布版中强制写EDID,这将非常有用。
您需要使用get-edid命令来获取EDID文件。您可以在终端中运行以下命令:
sudo get-edid > monitor-edid.hex
这将创建一个包含EDID信息的16进制文件monitor-edid.hex。
接下来,您需要将EDID文件转换为C++ HEX数组,这个过程可以使用edid-decode工具完成,您可以通过以下命令在终端中安装它:
sudo apt-get install edid-decode
然后,您可以使用以下命令将16进制文件转换为C++数组:
edid-decode monitor-edid.hex > edid.h
这将创建一个名为edid.h的文件,其中包含了转换后的EDID数据,其中也包含了数组,您可以使用它在其他Linux发行版中强制写入EDID。
您还需要将EDID数据加载到显示器的内存中。您可以执行以下命令:
sudo modprobe i2c-dev
sudo modprobe i2c-i801
sudo modprobe drm
sudo modprobe drm_kms_helper
sudo modprobe drm_modeset
像这样,您已经成功地硬编码了EDID,并将其成功地加载到显示器内存中。这将有助于您解决一些显示器相关的问题,提升用户体验。
四、结论
EDID是一个非常重要的数据块,它可以帮助计算机识别显示器的尺寸、分辨率、刷新率以及其他相关特性。当EDID发生破坏或无法正常识别时,我们需要强制写EDID以解决问题。本文旨在为Linux用户提供关于如何强制写EDID的详细指南。尽管强制写EDID的过程可能会有些复杂,但是通过这个方法,您可以轻松解决显示器相关的问题,提升您的使用体验。