Missing resolutions with laptop LCD.

Hello

The recent ~331.20 nvidia drivers has broken the resolution settings. Only with the nvidia-settings panel seems have the ability to use the non native resolutions on my laptop screen.

Editing the xorg.conf by adding metamodes (by using the nvidia-control’s "save to X configuration file’), seems also failing. It has got effect, for example when I set 1280800 with nvidia settings then added the metamodes with nvidia.settings, I will boot into a 1280800 resolution, but still I will recieve a 1280*1024 resolution virtually. My 12.04 ubuntu will simply scroll the screen when the mouse pointer is being moved. Manual one time setting works without bugs though.

Here is a xrandr report about the available resolutions. LVDS-0 is my notebook screen, as you can see I can only select the netive maximum resolution from there.

$ xrandr
Screen 0: minimum 8 x 8, current 1280 x 1024, maximum 8192 x 8192
VGA-0 disconnected (normal left inverted right x axis y axis)
TV-0 disconnected (normal left inverted right x axis y axis)
LVDS-0 connected (normal left inverted right x axis y axis)
   1440x900       60.0 +   60.0  
DVI-D-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
   1280x1024      60.0*+   75.0  
   1024x768       75.0     70.1     60.0  
   800x600        75.0     72.2     60.3     56.2  
   640x480        75.0     72.8     59.9

Using randr protocol 1.1, it provides the resolutions though. But since almost all applications probably use 1.3 version when a program wants a 640*480 resolution it simply fails. Also with 1.1 randr, I cant choose which monitor I will use laptop LCD or external screen. It just mixes all resolutions of laptop screen and external monitor. For example, when I switch to 1280x800, it will use my laptop LCD, even if I close my laptop, and use an external monitor. All fullscreen applications with lower resolutions than native will suffer from this I think.
For example, Wine has been patched to revert to the old xrandr version. It still does not in my ubuntu 12.04 though probably I will try a beta version of wine someday. But I have a fear about that it will just mix the laptop LCD, and external screen resolutions.

$ xrandr --q1
 SZ:    Pixels          Physical       Refresh
*0   1280 x 1024   ( 301mm x 245mm )   50  *51  
 1   1440 x 900    ( 338mm x 215mm )   52   54  
 2   1440 x 809    ( 338mm x 193mm )   53  
 3   1280 x 720    ( 301mm x 172mm )   55  
 4   1024 x 768    ( 240mm x 184mm )   56  
 5    800 x 600    ( 188mm x 143mm )   57  
 6   1200 x 900    ( 282mm x 215mm )   58  
 7   1440 x 810    ( 338mm x 194mm )   59  
Current rotation - normal
Current reflection - none
Rotations possible - normal left inverted right 
Reflections possible - X Axis Y Axis

After reading this, I expect this will be broken for the next upcoming years. And legacy programs will fail since the recent nvidia drivers has dropped backwards compatibility as I understand there. Something that was working in the past now working with only workarounds:( At least we should have an option in nvidia-settings to bring the old behavior back.

For example, I can set any resolutions with my command with typing ‘setres 1280x800’ but thats not mean its user friendly. Also applications still use the xrandr for resolution change. Perhaps a wrapper script which add metamode support “virtually” to xrandr should work.

#!/bin/bash
RESOLUTION=$1
nvidia-settings --assign CurrentMetaMode="LVDS-0: nvidia-auto-select @$RESOLUTION +0 +0 {ViewPortIn=$RESOLUTION, ViewPortOut=$RESOLU

This is how RandR >= 1.2 works. If you are having problems with it, I suggest bringing it up on the xorg@lists.freedesktop.org mailing list.