Configuring SuSE Linux for Multihead

Support knowledgebase (wessels_multihead)
Applies to

SuSE Linux: Versions since 7.0
XFree86: Version 4.x.x, SaX2 up to Version 2.43(453)

Situation:

You want to run SuSE Linux with several screens.

Procedure:

The requisites for this configuration are: at least two graphics cards, two monitors, and XFree86 in the version 4.x.x. XFree86 3.3.6 does not enable the operation with several monitors.

Please note that Multihead ranks among the advanced possibilities of the X11 configuration and, therefore, exceeds the scope of our free installation support. In case of problems, please refer to the Advanced Support Services and the SuSE Support Services.

In order to configure MultiHead or DualHead, finish your graphical interface (X) and boot your system in the runlevel 3. Then, run the command sax2 -p in order to list the hardware:


Chip: 0  is -> 3Dfx Voodoo 3                   00:16:0 0x121a 0x0005 PCI tdfx
Chip: 1  is -> NVidia RIVA TNT2 Model 64       01:00:0 0x10de 0x002d AGP nv

In this example, a NVIDIA AGP graphics card and a 3dfx Voodoo PCI card are used to configure Multihead.

It may occur that certain combinations of graphics cards do not work with each other. In such cases, your only choice is to change the hardware.

Please note that the primary output DEVICE is the card first initialized in the BIOS. In modern systems, this option (VGA boot from or VGA BIOS Sequence) is usually set to AGP. Now start SaX2 to perform the configuration as such.

SaX2 configuration:

The configuration process with SaX2 differs only slightly from that of a normal configuration. Start SaX2, select Change configuration from the button alter, and go through the configuration normally. The first difference from a normal configuration process arises in the section graphics setup.

Graphics Setup

Both graphics cards are listed and can be configured now. In the case of some graphics cards it might be necessary to add certain options to the XF86Config file. These options can be selected under Properties -&gT Expert -> Miscellaneous/Options.

Useful information about specific driver options is available at the XFree86 home page in the documentation corresponding to each respective XFree release or in the driver readme (e.g., for the NVIDIA driver).

If you do not need any specific settings, you can skip this dialogue and continue with the monitor configuration .

Monitor Setup

Set up your monitors with the required resolutions and refresh rates. In the case of TFT/LC displays you should pay attention to the appropriate frequencies. You can select LCD -> XGA1024x786@60Hz as monitor in order to control the TFT with 60 Hz.

Screens alignment

When all settings have been adjusted, you have to inform the X server about how your monitors are arranged. Click on Finish in the last dialogue. Subsequently, by shifting the monitors you can specify on which side of your primary display the secondary(ies) monitor(s) are. In addition, this menu enables you to adjust the different multihead modes (Traditional, Xinerama, and Clone).


Traditional: Two different Desktops.
Xinerama:    Desktop is displayed in all monitors.
Clone:	     The main screen is mirrored.

Once these steps have been completed, you can start the test server. If problems arise and the test server does not start, search for the problem in the file /var/log/SaX.log. However, for this you have to leave SaX2 and view the file with the command:


less /var/log/SaX.log

Use the key q to quit.

XF86Config

After SaX2 has written XF86Config, the file can be found in /etc/x11/XF86Config. In this example, the two graphics cards specified above have been used to create the following configuration. As for the monitors, two TFT screens were used:


# /.../
# SaX generated XFree86 config file
# Created on: 2002-06-25.
#
# Version: 4.3
# Contact: Marcus Schaefer <sax@suse.de>, 2001
#
# Automatically generated by [SaX2] (4.3)
# PLEASE DO NOT EDIT THIS FILE!
#

Section "Files"
  FontPath     "/usr/X11R6/lib/X11/fonts/misc:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/local"
  FontPath     "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/Type1"
  FontPath     "/usr/X11R6/lib/X11/fonts/URW"
  FontPath     "/usr/X11R6/lib/X11/fonts/Speedo"
  FontPath     "/usr/X11R6/lib/X11/fonts/PEX"
  FontPath     "/usr/X11R6/lib/X11/fonts/cyrillic:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/latin2/misc:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/latin2/75dpi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/latin2/100dpi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/latin2/Type1"
  FontPath     "/usr/X11R6/lib/X11/fonts/latin7/75dpi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/baekmuk:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/japanese:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/kwintv:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/truetype"
  FontPath     "/usr/X11R6/lib/X11/fonts/uni:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/CID"
  FontPath     "/usr/X11R6/lib/X11/fonts/ucs/misc:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/ucs/75dpi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/ucs/100dpi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/hellas/misc:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/hellas/75dpi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/hellas/100dpi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/hellas/Type1"
  FontPath     "/usr/X11R6/lib/X11/fonts/misc/sgi:unscaled"
  FontPath     "/usr/X11R6/lib/X11/fonts/xtest"
  ModulePath   "/usr/X11R6/lib/modules"
  RgbPath      "/usr/X11R6/lib/X11/rgb"
EndSection

Section "ServerFlags"
  Option       "AllowMouseOpenFail"
EndSection

Section "Module"
  Load         "type1"
  Load         "speedo"
  Load         "extmod"
  Load         "freetype"
EndSection

Section "InputDevice"
  Driver       "Keyboard"
  Identifier   "Keyboard[0]"
  Option       "MapName" "Standard Keyboard [ pc104 ]"
  Option       "Protocol" "Standard"
  Option       "XkbLayout" "de"
  Option       "XkbModel" "pc104"
  Option       "XkbRules" "xfree86"
  Option       "XkbVariant" "nodeadkeys"
EndSection


Section "InputDevice"
  Driver       "mouse"
  Identifier   "Mouse[1]"
  Option       "Device" "/dev/mouse"
  Option       "Emulate3Buttons" "on"
  Option       "Emulate3Timeout" "50"
  Option       "InputFashion" "Mouse"
  Option       "Name" "Autodetection"
  Option       "Protocol" "ps/2"
  Option       "Vendor" "Sysp"
EndSection


Section "Monitor"
  Option       "CalcAlgorithm" "UseFrameBufferTiming"
  DisplaySize  300 230
  HorizSync    31.5-65
  Identifier   "Monitor[0]"
  ModelName    "XGA 1024X768@60HZ"
  Option       "DPMS"
  VendorName   "--> LCD"
  VertRefresh  42-72
  UseModes     "Modes[0]"
EndSection

Section "Monitor"
  Option       "CalcAlgorithm" "UseFrameBufferTiming"
  HorizSync    31.5-65
  Identifier   "Monitor[1]"
  ModelName    "XGA 1024X768@60HZ"
  Option       "DPMS"
  VendorName   "--> LCD"
  VertRefresh  42-72
  UseModes     "Modes[1]"
EndSection


Section "Modes"
  Identifier   "Modes[0]"
  Modeline 	"1024x768" 74 1024 1048 1184 1328 768 771 777 806
EndSection

Section "Modes"
  Identifier   "Modes[1]"
  Modeline 	"1024x768" 74 1024 1048 1184 1328 768 771 777 806
EndSection


Section "Screen"
  DefaultDepth 16
  SubSection "Display"
    Depth      15
    Modes      "1024x768" "800x600" "640x480"
  EndSubSection
  SubSection "Display"
    Depth      16
    Modes      "1024x768" "800x600" "640x480"
  EndSubSection
  SubSection "Display"
    Depth      24
    Modes      "1024x768" "800x600" "640x480"
  EndSubSection
  SubSection "Display"
    Depth      32
    Modes      "1024x768" "800x600" "640x480"
  EndSubSection
  SubSection "Display"
    Depth      8
    Modes      "1024x768" "800x600" "640x480"
  EndSubSection
  Device       "Device[0]"
  Identifier   "Screen[0]"
  Monitor      "Monitor[0]"
EndSection

Section "Screen"
  DefaultDepth 16
  SubSection "Display"
    Depth      15
    Modes      "640x480"
  EndSubSection
  SubSection "Display"
    Depth      16
    Modes      "1024x768" "800x600" "640x480"
  EndSubSection
  SubSection "Display"
    Depth      24
    Modes      "640x480"
  EndSubSection
  SubSection "Display"
    Depth      32
    Modes      "640x480"
  EndSubSection
  SubSection "Display"
    Depth      8
    Modes      "640x480"
  EndSubSection
  Device       "Device[1]"
  Identifier   "Screen[1]"
  Monitor      "Monitor[1]"
EndSection


Section "Device"
  BoardName    "RIVA TNT2 Model 64"
  BusID        "1:0:0"
  Driver       "nv"
  Identifier   "Device[0]"
  Option       "IgnoreEDID"
  Option       "SWCursor"
  Screen       0
  VendorName   "NVidia"
EndSection

Section "Device"
  BoardName    "Voodoo 3"
  BusID        "0:16:0"
  Driver       "tdfx"
  Identifier   "Device[1]"
  Screen       0
  VendorName   "3Dfx"
EndSection


Section "ServerLayout"
  Identifier   "Layout[all]"
  InputDevice  "Keyboard[0]" "CoreKeyboard"
  InputDevice  "Mouse[1]" "CorePointer"
  Option       "Clone" "off"
  Option       "Xinerama" "on"
  Screen       "Screen[0]" RightOf "Screen[1]"
  Screen       "Screen[1]"
EndSection

Section "DRI"
    Group      "video"
    Mode       0660
EndSection

The double entries for:


Section "Monitor"

Section "Modes"

Section "Screen"

and


Section "Device"

are characteristic for this configuration and configure one device (monitor, modelines, graphics card, and start options for the X server).

Start options:

Traditional, Xinerama, and Clone

Two entries must be entered in the section "ServerLayout" to be able to use the different multihead modes:


  Option       "Clone" "off"

  Option       "Xinerama" "on"

In this example, Xinerama is set as default mode when the X server is started. To activate Clone, set its parameter to "on" and the one of Xinerama to "off". The mode Traditional will be automatically utilized when both parameters are set to "off".

Switching between Single and Multihead:

Even if Multihead presents a lot of advantages, in some situations it might be advisable not to use it, e.g. if you want to use the 3D features of your graphics card or if you want to work with higher resolutions not supported by the other monitors. If you want to use only one monitor, you have to add a second "ServerLayout" section.

Open the file /etc/X11/XF86Config with an editor of your choice. We have used mcedit for our example:


mcedit /etc/X11/XF86Config

Go to the end of the file where the first "ServerLayout" section is located and change the line Identifier from:


Section "ServerLayout"
  Identifier   "Layout[all]"
  InputDevice  "Keyboard[0]" "CoreKeyboard"
  InputDevice  "Mouse[1]" "CorePointer"
  Option       "Clone" "off"
  Option       "Xinerama" "on"
  Screen       "Screen[0]" RightOf "Screen[1]"
  Screen       "Screen[1]"
EndSection

to

Section "ServerLayout"
  Identifier   "Multi"
  InputDevice  "Keyboard[0]" "CoreKeyboard"
  InputDevice  "Mouse[1]" "CorePointer"
  Option       "Clone" "off"
  Option       "Xinerama" "on"
  Screen       "Screen[0]" RightOf "Screen[1]"
  Screen       "Screen[1]"
EndSection

Now set a second "ServerLayout" section. For this purpose, you do not have to take over all the entries of the example above but insert only the following lines:


Section "ServerLayout"
  Identifier   "Single"
  InputDevice  "Keyboard[0]" "CoreKeyboard"
  InputDevice  "Mouse[1]" "CorePointer"
  Screen       "Screen[0]"
EndSection

Save the changes (F2 -> Enter) and leave the editor by hitting F10. These entries will not be read by SaX2 during a new configuration and might be overwritten if you have not made a backup of your XF86Config.

Starting different configurations:

Execute the following command to control the different layouts:


startx -- -layout layoutname

layoutname stands for the name you have defined as Identifier in the "ServerLayout" sections. Depending on the configuration in the XF86Config, X will start with the selected entry.


Keywords: MULTIHEAD, SAX2, GRAPHICS CARDS, MATROX, NVIDIA, SCREEN, ATI, DUALHEAD, XINERAMA, TRADITIONAL, CLONE

SDB-wessels_multihead, Copyright SuSE Linux AG, Nürnberg, Germany - Version: 24. Jul 2002
SuSE Linux AG - Last generated: 29. Jul 2002 by ip (sdb_gen 1.40.0)