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.