红联Linux门户
Linux帮助

显示器分辨率不匹配----指定customEDID

发布时间:2016-07-09 16:16:58来源:红联作者:JamesBian
显示器分辨率不匹配----指定customEDID
by JamesBian
关键字,EDID,分辨率
前记:
笔者有一个VGA显示器,需要和一个Android 的OTT盒子共用,于是增加了一个VGA切换器(9.9元那种,内部结构简单,就是一个双路开关,只有RGB和Hsync和Vsync信号线,没有连接I2C)这样在盒子和电脑主机之前切换,不失为一个比较经济节约的方式,一个显示器要好几百大洋,另外还买了一个HDMI转VGA的线给OTT盒子用,再一条VGA线材。
测试一切正常,唯一不足的就是分辨降低的问题,在双系统ubuntu和win7上都出现操作系统最高分辨率低于显示器最佳分辨率的情况,在win7下,可以在Nvidia的控制面板中自定义分辨率来解决,但是在linux下设置就比较困难,毕竟不如windows那么友好,很多设置需要一定的专业技能,否则玩不转,百度很多方法,以xrandr设置方法居多,但是都不适用与笔者的情况,后来搜索中外网站,参考相关文章,最终解决了这个问题。
显示分辨率是1440x900,折腾了两三天时间才搞定!

############################################################################################################

当显示器EDID损坏,以及增加KVM或者VGA切换器之后,可能出现显示器分辨率不匹配情况(根本问题是显卡I2C无法读取显示器的EDID信息----一个E2PROM芯片包含了显示器分辨率等信息)。而在systm--setting中也没有匹配的分辨率选项,怎么办?
搜索中外网站,多数建议使用xrandr,大致方法如下
$cvt 1440 900
# 1440x900 59.89 Hz (CVT 1.30MA) hsync: 55.93 kHz; pclk: 106.50 MHz
Modeline "1440x900_60.00" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync
$sudo xrandr --newmode "1440x900" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync
$sudo xrandr --addmode VGA1 1440x900
$sudo xrandr --output VGA1 --mode 1440x900
实际测试后发现,有出现$sudo xrandr --addmode执行错误的情况,显示
error X Error of failed request: BadMatch.
.....
.....
之类的信息,实际上是EDID读错误。

对于Nvidia的显卡来说,Nvidia给出的解决方法有忽略EDID的checksum以及禁止使用EDID;
在/etc/X11/xorg.conf中修改(没有这个文件可以使用nvidia-configuration命令产生,或者网上copy一份即可)
Section "Device"
Identifier "Device0"
Driver "nvidia"
Option "UseEDID" "FALSE"
Option "IgnoreEDIDChecksum" "displayName"
EndSection

测试依然措施,检查xorg.log也会发现驱动不接受指定的分辨率,恢复到显卡默认的分辨率;

综合下列情况
显示器最佳分辨率明确,或者中间增加KVM等设备总成EDID无法读取等情况,可以指定EDID给显卡驱动,即伪装显示的信息已经读取,输出最佳的分辨率,对于Nvidia的驱动,只有读到正确的EDID后,系统选项才会出现争取的分辨率选项:

具体解决方法
1、修改xorg.conf文件,增加 Option "CustomEDID" "CRT-1:/etc/X11/1440x900.bin" 代码如下

# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 331.20 (buildd@roseapple) Mon Feb 3 15:07:22 UTC 2014
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection

Section "Files"
EndSection

Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection

Section "Monitor"
# HorizSync source: xconfig, VertRefresh source: xconfig
Identifier "Monitor0"
VendorName "Unknown"
ModelName "CRT-1"
HorizSync 28.0 - 55.0
VertRefresh 43.0 - 72.0
Option "DPMS"
EndSection

Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
# Option "UseEDID" "FALSE"
# Option "IgnoreEDIDChecksum" "CRT-1"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "Stereo" "0"
Option "nvidiaXineramaInfoOrder" "CRT-1"
Option "metamodes" "1440x900 +0+0"
Option "CustomEDID" "CRT-1:/etc/X11/1440x900.bin"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
SubSection "Display"
Depth 24
EndSubSection
EndSection

2、创建EDID 文件,bin文件,获得方法
使用modeling2edid工具发现有问题,关键文件有些参数不清楚怎么设置,干脆放弃。
./modeline2edid
# or explicitly:
./modeline2edid -
怎么办?使用比较直接的方法,用软件工具提取EDID,如果显示EDID损坏,用同型号的显示器来提取,使用工具
E-EDID Editor----这是一个windows版本的工具,正是笔者使用的方法,linux版本没有具体测试,打开工具获得EDID另存为.bin文件(其实linux下和文件的名称后缀没有关系,只和文件的权限设置有关,.bin只是为了方便区别而已)
例如1440x900.bin,在linux下cp到/etc/X11目录下(名称没有特别的要求),xorg.conf中指定文件路径
Option "CustomEDID" "CRT-1:/etc/X11/1440x900.bin"

参考网址:
https://wiki.archlinux.org/index.php/NVIDIA/Troubleshooting#Override_EDID
http://lnmcc.net/2013/08/28/nvidia%E6%98%BE%E5%8D%A1%E7%9A%84xorg%E9%85%8D%E7%BD%AE/#EDID
https://www.osadl.org/Single-View.111+M591850c02b5.0.html
https://github.com/akatrevorjay/edid-generator

EDID工具
windows版本
http://www.deltacast.tv/products/free-software/e-edid-editor
linux版本
http://polypux.org/projects/read-edid/
文章评论

共有 5 条评论

  1. 异类 于 2016-11-29 10:29:11发表:

    666666666666666

  2. kuaiyigou 于 2016-10-09 22:56:48发表:

    学习了,

  3. qlzong 于 2016-10-05 01:04:16发表:

    宽屏的比如 1600*900 这个是没有的!

  4. JamesBian 于 2016-07-10 12:48:53发表:

    2# cnbingu


    这是不同性质的问题,拿我的机子来说,是Nvidia的独显,显示器也是没有问题的,直接相连接,分辨率自动匹配到最佳分辨率,可是中间加了VGA切换器,问题就出现了,系统设置项根本没有最佳分辨率,Nvidia控制面板也改变了,win7还可以设置,ubuntu下面就不行了...

  5. cnbingu 于 2016-07-10 11:46:27发表:

    集显以前遇到过分辨率问题,换独显好了