Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm running Ubuntu 10.10 x86_64 version, with Nvidia 9800 GT, installed 270.41.06 Nvidia drivers following this guide. I have a LG42LH30FR LCD TV connected with the dvi link -> RGB PC input

I'm able to get 1024x768 resolution without overscan (I can get 1080i = 1366x768 but there is a lot of hidden screen space to the right and I don't know what to do about it). I want to get full HD

I can get full HD (1080p = 1920x1080) on Windows XP 64-bit with custom resolution created with Nvidia Control Panel, from reading over xorg.conf configurations it seems I need to add a certain modeling to the monitor configuration, but I don't know where to get the appropriate options for this task

any suggestions?

share|improve this question

3 Answers 3

up vote 4 down vote accepted

I was able to do this using a custom EDID in the screen, either by adding this to xorg.conf screen section:

Option "CustomEDID" "DFP-0:/path/to/file/custom_edid.bin"

Or by generating a config:

sudo nvidia-xconfig --custom-edit="CRT-0:/my/monitor.bin"

Now the big question, How to produce an acceptable EDID .bin?

On Windows XP, I had to install two applications: PowerStrip (which is referenced on Wikipedia article about EDID)

The other application we will need is Phoenix EDID Designer.

With PowerStrip, we will get detailed timing info from the current display mode; basically the required information is shown in this article and it sums up to the following:

1) In WinXP, the timings are somewhere in an advanced settings tab. You need:

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) In your /etc/X11/xorg.conf there is a place for modeline that looks something like

Code:

Modeline "1768x992" 74.48 1768 1336 1472 1664 992 721 724 746 -hsync +vsync

Just an example. Do not use this one.

The modeline is in a format of

Code:

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] 

Simple formulas, but it took me weeks of searching to find out how to convert windows timings to a Linux modeline.

For my particular LG42LH30FR LCD TV, the resulting modeline is:

Modeline "1080p" 172.8 1920 2040 2248 2576 1080 1081 1084 1118 -hsync +vsync

I added this to my monitor section but it didn't work, which is why I went to add a custom EDID.


Now to create the EDID

Open the Phoenix EDID Designer, basically I imported an EDID from the Windows Registry, and I used that as a base to modify, this is because I didn't know how to populate the "Color/ Established Timings" section, so prepopulation gave me hopefully sensible values (well its working for me, maybe it was luck), anyhow, click the read-only/modify button which allows edition, the important things to modify

General:

Add whatever you want here

Basic Display Parameters:

  Video Input Definition -> Digital
  Display Type -> RBG color
  sRGB -> check
  gamma value: somewhere over 250 would be ok

Standard Timings: (i disabled everything except timing id #1)

  H. Active Pixels (use the value obtained from PowerStrip, for full hd it should be 1920)
  refresh rate (for me its 60Hz)

Detailed Timings:

  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

Done. Now save the resulting file somewhere, you can open it, it's a text file.

You need one additional step to convert it to a required 128 byte .bin EDID file; basically I will point to the main article describing the transformation, but summarizing you'll have to

  1. strip everything from the file except the hexadecimal matrix of digits
  2. Compile this:

#include <stdio.h>

int main()
{
    while (!feof(stdin))
    {
        unsigned char i;
        scanf("%02X ", &i);
        printf("%c", i);
    }

    return 0;
}

And run:

# gcc comp.c -o comp
# ./comp < custom_edid.dat > custom_edid.bin

Done! Restart your Ubuntu (after adding the custom edid configuration option explained at the beginning of the post) and now on Nvidia X Server Settings, you should be able to set to your custom resolution.

share|improve this answer
    
pretty "straightforward" stuff, right? –  lurscher May 9 '11 at 12:58
    
btw @lurscher I had blogged about something similar sathyasays.com/2008/10/26/… –  Sathya May 10 '11 at 5:39
    
thanks @Sathya for the edit.. i read your blog, very interesting. In fact one of my (failed) attempts was to run get-edid on virtual box image running in seamless mode in windows and get the EDID info, but it seems that even the virtualbox guest additions driver is too lazy to provide a valid implementation of EDID information, which is why i had to make a custom one basically from scratch.. also, nvidia control panel didn't gave me the ability to acquire a EDID –  lurscher May 10 '11 at 5:45

You should be able to simply use Nvidia's driver application to set the appropriate resolution and display output to your HDTV.

Open up a terminal window, and enter

sudo nvidia-settings

After the Nvidia X Server Settings has opened, click on the X Server Display Configuration tab and set up your HDTV display from there.

share|improve this answer
    
nope, in the available resolutions there is auto and below the 1366x768 , 1024x768 , 800x600 and all the lower ones. No way to add a custom resolution –  lurscher May 8 '11 at 8:18

It is probably a EDID checksum problem. If so then just add this on your /etc/X11/xorg.conf :

Option     "UseEDID" "true"
Option     "IgnoreEDIDChecksum" "CRT,DFP,TV"   

In the Section "Device".

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.