How to use a widescreen display (1680x1050 px) with an Intel 82946GZ/GL graphics adapter and xorg

This document describes a Linux software configuration that offers widescreen VGA video output (at 1680x1050 px) for an Acer AL2223W monitor using an integrated Intel 946GZ video adapter (AcerPower desktop workstation).

Manuel Feier, June 2007

Problem description

Although Intel claims to have excellent video drivers for Linux ("Intel's commitment to providing high-quality drivers that meet the needs of the mobile Linux community is second to none."), there are problems running a Intel graphics adapters (in my case a onboard 82946GZ/GL chip) with special video resolutions like 1680x1050 pixels on the X window system.

Solution

As a first step, one should install the latest xorg version and Intel video drivers. At the time of the creation of this document these were xorg-server 1.3.0.0 and xf86-i810 2.0.0. Furthermore, the utility "915resolution" has to be installed. It can be fetched here. This utility is necessary to patch the video memory in order to offer the special video mode. It must be run again at every system boot with the appropriate parameters before the X server is launched, so an automatic startscript needs to be configured/installed (Gentoo Linux offers a nice 915resolution init script that is automatically installed when emerging 915resolution, see also here for more information on this.). In my case, the command that proved successful was:

915resolution 58 1680 1050 32 2240 1089

Explanation: "58" is the video mode that should be overwritten, as listed by "915resolution -l". "1680" and "1050" is the new resolution (X and Y), 32 is the color depth and "2240" and "1089" are [htotal] [vtotal] values belonging to a monitors modeline (not explained in the documentation and called optional in 915resolution program source code). More information about these values and how to find them for a system can be found here. In my case, the "optional" values were needed in order to start X properly. Without specifying the values, it launched with no apparent errors, but screen output was shifted and distorted.

For the X configuration, I suggest to adapt the following xorg.conf that works here:

Section "ServerLayout"
        Identifier     "X.org Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
        RgbPath      "/usr/share/X11/rgb"
        ModulePath   "/usr/lib/xorg/modules"
        FontPath     "/usr/share/fonts/misc/"
        FontPath     "/usr/share/fonts/TTF/"
        FontPath     "/usr/share/fonts/OTF"
        FontPath     "/usr/share/fonts/Type1/"
        FontPath     "/usr/share/fonts/100dpi/"
        FontPath     "/usr/share/fonts/75dpi/"
EndSection

Section "Module"
        Load  "extmod"
        Load  "dri"
        Load  "GLcore"
        Load  "dbe"
        Load  "record"
        Load  "xtrap"
        Load  "glx"
        Load  "freetype"
        Load  "type1"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option "XkbLayout" "ch"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "auto"
        Option      "Device" "/dev/input/mice"
        Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
        #DisplaySize      470   300     # mm
        Identifier   "Monitor0"
        VendorName   "ACR"
        ModelName    "AL2223W"
 ### Comment all HorizSync and VertRefresh values to use DDC:
        HorizSync    31.0 - 81.0
        VertRefresh  56.0 - 75.0
        Option      "DPMS"
        ModeLine "1680x1050" 146.25 1680 1784 1960 2240 1050 1053 1059 1089
        Option "PreferredMode" "1680x1050"
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: < i >: integer, < f >: float, < bool >: "True"/"False",
        ### < string >: "String", < freq >: "< f > Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "NoAccel"                   # []
        #Option     "SWcursor"                  # []
        #Option     "ColorKey"                  # < i >
        #Option     "CacheLines"                # < i >
        #Option     "Dac6Bit"                   # []
        #Option     "DRI"                       # []
        Option     "NoDDC"                      # []
        #Option     "ShowCache"                 # []
        #Option     "XvMCSurfaces"              # < i >
        #Option     "PageFlip"                  # []
        Identifier  "Card0"
        Driver      "intel"
        VendorName  "Intel Corporation"
        BoardName   "82946GZ/GL Integrated Graphics Controller"
        BusID       "PCI:0:2:0"
        Option "MonitorLayout" "CRT,CRT"
#       VideoRam    64
#       Option  "VBERestore" "true"
#       Option "LinearAlloc" "6144"
#       Option "DevicePresence" "true"
#       Option  "DisplayInfo" "true"
#       Option "XVideo" "true"
#       Option "XAANoOffscreenPixmaps" "true"
#       Option "Monitor-VGA" "Monitor0"
#       VideoRam 131072

EndSection

Section "Screen"

        DefaultDepth 24

        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        SubSection "Display"
                Viewport   0 0
                Depth     1
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     4
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     8
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     15
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     16
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     24
                Modes     "1680x1050" "800x600" "640x480"
        EndSubSection
EndSection

Conclusion and remarks

The "video bios hack"-thing that "915resolution" performs seems a bit obscure not only to me but also to other people dealing with similar issues. Some people report this functionality would be be included in the current driver versions, but I still needed "915resolution" despite using the latest driver. Also, some people suggested that it could possibly work correctly on a DVI video output of the same card even when the VGA output is not working properly (I have no DVI output to test, though). Also note the special pieces of xorg-configuration that are used above (Option "PreferredMode" and the custom "ModeLine" that should be adapted to your display/resolution).

As always, there's no guarantee for anything on this page, so don't blame me if your computer explodes or any other nasty things happen ;)