Consegui fazer isso usando um EDID personalizado na tela, adicionando isso à seção da tela xorg.conf
:
Option "CustomEDID" "DFP-0:/path/to/file/custom_edid.bin"
Ou gerando uma configuração:
sudo nvidia-xconfig --custom-edit="CRT-0:/my/monitor.bin"
Agora, a grande questão, Como produzir um EDB .bin aceitável?
No Windows XP, eu tive que instalar dois aplicativos: PowerStrip (que é mencionado em Artigo da Wikipédia sobre o EDID
O outro aplicativo que precisaremos será Phoenix EDID Designer .
Com o PowerStrip, obteremos informações detalhadas sobre o tempo a partir do modo de exibição atual; Basicamente, as informações necessárias são mostradas em este artigo e resumem-se ao seguinte:
1) No WinXP, os tempos estão em algum lugar em uma guia de configurações avançadas. Você precisa de:
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) Em seu /etc/X11/xorg.conf existe um lugar para modeline que se parece com
Código:
Modeline "1768x992" 74.48 1768 1336 1472 1664 992 721 724 746 -hsync +vsync
Apenas um exemplo. Não use este.
A modeline está em um formato de
Código:
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]
Fórmulas simples, mas levei semanas pesquisando para descobrir como converter os timings do Windows em uma modeline do Linux.
Para minha TV LCD LG42LH30FR específica, a modelinha resultante é:
Modeline "1080p" 172.8 1920 2040 2248 2576 1080 1081 1084 1118 -hsync +vsync
Adicionei isso à minha seção de monitor, mas não funcionou, por isso fui adicionar um EDID personalizado.
Agora, para criar o EDID
Abra o Phoenix EDID Designer, basicamente eu importei um EDID do Registro do Windows, e usei isso como uma base para modificar, porque eu não sabia como preencher a seção "Cor / intervalos estabelecidos", então O pré-preenchimento me deu valores esperançosamente sensatos (bem, está funcionando para mim, talvez tenha sorte ), de qualquer forma, clique no botão read-only/modify
que permite edição, as coisas importantes para modificar
Geral:
Adicione o que você quiser aqui
Parâmetros básicos de exibição:
Video Input Definition -> Digital
Display Type -> RBG color
sRGB -> check
gamma value: somewhere over 250 would be ok
Tempos padrão: (desativei tudo, exceto o número de tempo # 1)
H. Active Pixels (use the value obtained from PowerStrip, for full hd it should be 1920)
refresh rate (for me its 60Hz)
Horários detalhados:
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
Concluído. Agora salve o arquivo resultante em algum lugar, você pode abri-lo, é um arquivo de texto.
Você precisa de uma etapa adicional para convertê-lo em um arquivo EDID de 128 bits. Basicamente, vou apontar para o artigo principal descrevendo a transformação , mas resumindo você ' vai ter que
-
strip
tudo do arquivo, exceto a matriz hexadecimal de dígitos - Compile isso:
#include <stdio.h>
int main()
{
while (!feof(stdin))
{
unsigned char i;
scanf("%02X ", &i);
printf("%c", i);
}
return 0;
}
E corra:
# gcc comp.c -o comp
# ./comp < custom_edid.dat > custom_edid.bin
Feito! Reinicie o seu Ubuntu (depois de adicionar a opção de configuração personalizada edid explicada no início do post) e agora no Nvidia X Server Settings, você deve ser capaz de definir a sua resolução personalizada.