Fedora 12 Upgrade Lead to 640×480 Display Resolution — Solution

I recently upgraded my Fedora 12 Linux Machine on which I do development to the latest Kernel. After a reboot, I noticed the display went from my normal 1920×1080 down to 640×480. In addition, the monitor itself complained that this was not an optimum setting. I knew something was wrong, so I did the following:

  • Went to the NVIDIA site and downloaded the latest drivers, mine were just a little old. After installing them, the problem was not solved.
  • Logged in with the 640×480 resolution and ran gnome-display-properties and noticed it could not determine my monitor type.
  • I searched the web some at this point and found two posts.

Post 1 was about setting up the Xorg.conf file to force the NVidia Resolution.. This resulted in the following /etc/X11/xorg.conf file.

Section "Device"
   Identifier  "8800GTX"
   Driver      "nvidia"
Option "NvAGP" "0"
Option "RenderAccel" "true"
Option "UseEdidDpi" "FALSE"
Option "UseEdid" "FALSE"
Option "DPI" "96 x 96"
       Option     "XAANoOffscreenPixmaps" "true"
       Option     "DRI"     "true"
       Option     "HWcursor"
       Option     "CursorShadow"
       Option     "CursorShadowAlpha" "32"
       Option     "CursorShadowXOffset" "2"
       Option     "CursorShadowYOffset" "2"
       Option     "AddARGBGLXVisuals" "true"
       Option     "AllowGLXWithComposite" "true"
EndSection

# **********************************************************************
# Screen sections
# **********************************************************************
# Any number of screen sections may be present.  Each describes
# the configuration of a single screen.  A single specific screen section
# may be specified from the X server command line with the "-screen"
# option.
Section "Screen"
   Identifier  "Screen0" # could also be "Screen 1"
   Device      "8800GTX"
   Monitor     "Belinea"
       DefaultDepth 24
       Option          "NoVirtualSizeCheck"
       Option         "DisableGLXRootClipping" "True"
       Option         "RenderAccel" "True"
       Option         "NoRenderExtension" "False"
       Option         "AllowGLXWithComposite" "True"
       Option         "UseEdidFreqs" "false"
       Option         "AddARGBGLXVisuals" "True"
       Option "DisableGLXRootClipping" "True"
       Option "UseEdidDpi" "FALSE"
       Option "UseEdid" "FALSE"
       Option         "metamodes" "1920x1080_60 +0+0; 1280x1024_60 +0+0; 1024x768_60 +0+0; 1024x768 +0+0; 800x600 +0+0; 640x480 +0+0; 1280x1024 +0+0; 1920x1080 +0+0"
   SubSection     "Display"
       Depth       24
       #virtual    1920 1080
       Modes      "1920x1080" "1280x1024" "1024x768" "1600x1200" "800x600" "640x480"
   EndSubSection
EndSection

Section "Monitor" 
# HorizSync source: xconfig, VertRefresh source: xconfig 
Identifier "Belinea" 
VendorName "Unknown" 
ModelName "CRT-1" 
HorizSync 31.5 - 100.0 
VertRefresh 40.0 - 150.0 
# Option "DPMS" 
EndSection

After making these changes I was able to get a resolution of 1920×1080 in panning mode as the monitor itself would not go past 1280×1024. Monitor Panning annoys me quite a bit as I am constantly moving around the monitor to develop, monitor, and work with my virtual environment, customer virtual environments, and programming. So panning would soon give me a pretty bad headache. I could live with 1280×1024 if I wanted to do so, but I really wanted more.

Post 2 was about setting the proper modelines for the monitor to have the proper resolution. I installed the monitor-edid package to query the edid from the monitor itself. The automatic EDID determinationwas disabled by the xorg.conf file I used, documented above. I ran two commands:

monitor-edid-using-vbe| parse-edid

UPDATE 7/28/11: monitor-edid-using-vbe|monitor-parse-edid

To retrieve the necessary ModeLine to insert into my xorg.conf file. The highlighted section of the xorg.conf file was changed to be by just adding the new ModeLine.

Section "Monitor"
# HorizSync source: xconfig, VertRefresh source: xconfig
Identifier     "Belinea"
VendorName     "Unknown"
ModelName      "CRT-1"
ModeLine "1920x1080" 148.5 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
HorizSync       31.5 - 100.0
VertRefresh     40.0 - 150.0
#    Option         "DPMS"
EndSection

Resetting the X server resulted in a properly configured 1920×1080 display running at 60Mhz.

If my work history did not include working on developing 3D Graphics Libraries for Xorg, I would not have known the root cause of this problem yet the two posts I found would have lead me to a possible solution.

UPDATE: You also have to disable the existing nouveau device and there are two steps to this. The first is to edit /etc/grub.conf and add to the kernel line the following: rdblacklist=nouveau. I.e:

title Red Hat Enterprise Linux (2.6.32-220.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/vg_liberty-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_liberty/lv_root rd_NO_MD rd_LVM_LV=vg_liberty/lv_swap SYSFONT=latarcyrheb-sun16 rhgb crashkernel=1024M quiet  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rdblacklist=nouveau
	initrd /initramfs-2.6.32-220.el6.x86_64.img

The second is to add to /etc/modprobe.d/blacklist.conf a line that reads: blacklist nouveau. These two entries will fully disable the nouveau graphics driver and allow you to use an NVIDIA driver.

Edward Haletky

Edward L. Haletky, aka Texiwill, is an author, analyst, developer, technologist, and business owner. Edward owns AstroArch Consulting, Inc., providing virtualization, security, network consulting and development and TVP Strategy where he is also an Analyst. Edward is the Moderator and Host of the Virtualization Security Podcast as well as a guru and moderator for the VMware Communities Forums, providing answers to security and configuration questions. Edward is working on new books on Virtualization.

Leave a Reply

Your email address will not be published. Required fields are marked *

three + five =