我可以在屏幕上使用自定义EDID执行此操作,方法是将其添加到xorg.conf
屏幕部分:
Option "CustomEDID" "DFP-0:/path/to/file/custom_edid.bin"
或者通过生成配置:
sudo nvidia-xconfig --custom-edit="CRT-0:/my/monitor.bin"
现在最大的问题是,如何生成一个可接受的EDID .bin?
在Windows XP上,我不得不安装两个应用程序:PowerStrip(在维基百科关于EDID的文章中引用)
我们需要的另一个应用是Phoenix EDID Designer。
使用PowerStrip,我们将从当前显示模式获取详细的时序信息; 基本上所需的信息显示在本文中,它总结如下:
1)在WinXP中,时间安排在高级设置选项卡中。你需要:
Horiz Front Porch, Vert Front Porch,
Horiz Back Porch, Vert Back Porch,
Horiz Front Active, Vert Front Active,
Horiz Scan (or Sync) Width, Vert Scan Width,
Horiz Sync Polarity, Vert Sync Polarity,
and Pixel Clock.
2)在/etc/X11/xorg.conf中,有一个类似于模式行的地方
码:
Modeline "1768x992" 74.48 1768 1336 1472 1664 992 721 724 746 -hsync +vsync
只是一个例子。不要使用这个。
模式行的格式为
码:
Modeline "somenamehere" <dotclock> <H1> <H2> <H3> <H4> <V1> <V2> <V3> <V4> <HP> <VP>
where dotclock = Pixel Clock
H1=Horiz Front Active
H2=H1+Horiz Front Porch
H3=H2+Horiz Sync Width
H4=H3+Horiz Back Porch
V1=Vert Front Active
V2=V1+Vert Front Porch
V3=V2+Vert Sync Width
V4=V3+Vert Back Porch
HP=Horiz Sync Polarity [-hsync/+hsync]
VP=Vert Sync Polarity [-vsync/+vsync]
简单的公式,但我花了几周时间寻找如何将Windows时序转换为Linux模式。
对于我特定的LG42LH30FR液晶电视,最终的模式是:
Modeline "1080p" 172.8 1920 2040 2248 2576 1080 1081 1084 1118 -hsync +vsync
我将其添加到我的显示器部分,但它不起作用,这就是我去添加自定义EDID的原因。
现在来创建EDID
打开凤凰EDID设计器,基本上我从Windows注册表导入了一个EDID,我用它作为修改的基础,这是因为我不知道如何填充“颜色/已建立的时间”部分,所以预填充给了我希望明智的价值观(以及它为我工作,也许是运气),无论如何,点击read-only/modify
允许编辑的按钮,重要的事情要修改
一般:
在这里添加你想要的任何东
基本显示参数:
Video Input Definition -> Digital
Display Type -> RBG color
sRGB -> check
gamma value: somewhere over 250 would be ok
标准时间:(除了时间标识#1,我禁用了所有内容)
H. Active Pixels (use the value obtained from PowerStrip, for full hd it should be 1920)
refresh rate (for me its 60Hz)
详细时间:
set all blocks to "unused" except block #1:
Pixel Clock: (use from PS obtained info)
H/V Active Pixel : from PS info
H/V Blank : from PS info. this is actually **Front Porch**
H/V Sync Offset: from PS info. this is actually **Back Porch**
H/V Sync width: from PS info
完成。现在将生成的文件保存在某处,您可以打开它,它是一个文本文件。
您需要一个额外的步骤将其转换为所需的128字节.bin EDID文件; 基本上我会指出描述转换的主要文章,但总结一下你必须要做的
strip
除了十六进制数字矩阵之外的所有文件
- 编译:
#include <stdio.h>
int main()
{
while (!feof(stdin))
{
unsigned char i;
scanf("%02X ", &i);
printf("%c", i);
}
return 0;
}
并运行:
# gcc comp.c -o comp
# ./comp < custom_edid.dat > custom_edid.bin
完成!重新启动您的Ubuntu(添加在帖子开头解释的自定义edid配置选项后),现在在Nvidia X Server Settings上,您应该可以设置为自定义分辨率。