linux(ubuntu)显示器分辨率低问题——指定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设置方法居多,但是都不适用与笔者的情况,后来搜索中外网站,参考相关文章,最终解决了这个问题。
>>>>>>>>>>>>>>>>>>>>>###
当显示器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/f中修改(没有这个文件可以使用nvidia-configuration命令产生,或者网上copy一份即可)
Section "Device"
Identifier "Device0"
Driver "nvidia"
Option "UseEDID" "FALSE"
Option "IgnoreEDIDChecksum" "displayName"
EndSection
测试依然措施,检查xorg.log也会发现驱动不接受指定的分辨率,恢复到显卡默认的分辨率;
综合下列情况
显示器最佳分辨率明确,或者中间增加KVM等设备总成EDID无法读取等情况,可以指定EDID给显卡驱动,即伪装显示的信息已经读取,输出最佳的分辨率,对于Nvidia的驱动,只有读到正确的EDID后,系统选项才会出现争取的分辨率选项:
具体解
决方法
1、修改f文件,增加    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"电脑怎么装linux和windows双系统
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目录下(名称没有特别的要求),f中指定文件路径
Option        "CustomEDID" "CRT-1:/etc/X11/1440x900.bin"
参考网址:
/index.php/NVIDIA/Troubleshooting#Override_EDID
lnmcc/2013/08/28/nvidia%E6%98%BE%E5%8D%A1%E7%9A%84xorg%E9%85%8D%E7%BD%AE/#EDID
www.o
github/akatrevorjay/edid-generator
EDID工具
windows版本
www.deltacast.tv/products/free-software/e-edid-editor
linux版本
/projects/read-edid/

发表评论