Issue #14 December 2005

Doing more with...more: Dual-head display

Think about the language of computer interfaces for a moment. You refer to your computer screen as a desktop; you refer to the background as wallpaper upon which you open windows. At the beginning of the graphical computing age, it was important to create terminology that would enable office workers to feel comfortable as they exchanged ledger books for database applications. But as important as that was, there was also the connotation of size: that 800x600, 15-inch screen was just like your desktop. (You may decide for yourself how effective that suggestion was.)

Thankfully, hardware is cheaper now, so you may be reading this on a 19-inch monitor (or larger) at 1280x1024 (or higher). But as great an improvement as this is, it is still a long way from providing you with the space of your real desktop—and that is something of a problem.

According to an article in Signal vs. Noise, a test found that a person's performance on a 42-inch monitor was 10% to 44% faster than on a 15-inch monitor. Surprisingly, these results included tests of cognition—such as memorizing phone numbers. Apparently the clutter of a small screen affected how well the person coped with all intellectual demands—not just tasks on the computer.

But although a 42-inch monitor is probably unobtainable, you can have the next best thing: a system that has a second monitor (which is know as a dual-headed system).

Setting up your system to use a second monitor

The two components of interest are the graphics card(s) that drive the monitors and the monitors themselves.

Your options for graphics cards

Your graphics card may have a single output or multiple outputs.

If your card has multiple outputs, you may want to go directly to Configuring the system for the second monitor.

If your card has a single output and you have an available PCI slot, you could buy a second graphics card for that spare slot, or you could buy a dual-output card. For performance reasons, you should buy a dual-output graphics card that connects to your system's motherboard, not to a PCI slot. If your motherboard offers a PCI-X, PCI-E, or similar connector, buy a card that exploits the full potential of that hardware.

There are two general categories of dual-output graphics cards:

  • There are relatively inexpensive graphics cards that have two different output types: analog (VGA) and digital (Digital Visual Interface (DVI)). These were probably designed to help customers as they upgrade from analog monitors to digital, but they can drive two monitors concurrently. The output types are significantly different in quality, so if you have a digital-capable (LCD) monitor, you will want that for your primary viewing.
  • There are more expensive cards that have dual-DVI output.

Which type of graphics card you buy will depend both on the cost of the card and the type of monitors you want to hook up:

  • If you have two analog monitors, you can buy an VGA/DVI card and get an additional DVI-to-VGA adaptor for the DVI output. While this is not ideal, it will enable you to upgrade one monitor to digital at some point in the future.
  • If you have an analog and a digital monitor, you can buy an VGA/DVI card and be ready to go. Alternatively, you could buy a DVI/DVI card and an additional DVI-to-VGA adaptor so that you could upgrade to a second digital monitor later.
  • If you have two digital-capable LCD monitors, you need a DVI/DVI card.

Configuring the system for the second monitor on Red Hat Enterprise Linux 4 and Fedora Core 4

To configure the system for the second monitor, select Main Menu => System Settings => Display, or at a shell prompt, enter the command system-config-display as root.

Note:
On Fedora Core 4, the path is Main Menu => Desktop => System Settings => Display.

Click on the Dual head tab, as shown in Figure 1. "Dual-Head Display Settings".

Figure 1. Dual-Head Display Settings

To enable the second monitor, check Use dual head.

To configure the second monitor's settings, click Configure.

To enable both monitors to use an enlarged single workspace, set the Desktop layout option to Spanning Desktops. To create a pair of independent workspaces, set the Desktop layout option to Individual Desktops. With "spanned desktops" you can drag windows from one monitor to another; with individual desktops only the mouse cursor can move between desktops.

After changing the settings, log out of the graphical desktop then log back in to see the changes.

Tip:
It is possible that the system will not detect the second monitor. This can be caused by having an out-of-date driver. Go to the web site for your monitor's manufacturer and see if there is a new driver for your monitor type. Install the driver according to the instructions on the web site.

Thriving with two monitors

If there are particular programs you want to start automatically when you log in, do the following:

  1. Create a start-up script:
    1. Create a file called startup.sh in your home directory.
    2. In startup.sh, set the first display and type in the applications you want to start there. Then, set the second display and type in the applications you want to start on that monitor. You may want to put the "intrusive" applications (email, IRC) on the secondary monitor.

      Here is an example start-up script for a dual-independent display (that is, on in which you specify either DISPLAY=:0.0 or DISPLAY=:0.1):

      # Applications on the left monitor
      export DISPLAY=:0.1
      evolution&
      xchat&
      
      # Applications on the right monitor
      export DISPLAY=:0.0
      firefox&
      gnome-terminal&
      gaim&
      
    3. Make startup.sh executable:
      chmod 744 startup.sh
      
      
  2. Add the start-up script to the GNOME startup programs:
    1. Select Main Menu => Preferences => More Preferences => Sessions => Startup Programs.

      Note:
      On Fedora Core 4, the path is Main Menu => Desktop => Preferences => More Preferences => Sessions => Startup Programs.
    2. Click the Startup Programs tab.
    3. Click Add.
    4. In the Add Startup Program dialog, click Browse to search for startup.sh. Select it and click Open.
    5. In the Add Startup Program dialog, you can accept the default Order value. Click OK.
    6. In the Sessions dialog, click Close.
  3. Log out and log in again to see the changes take effect.
Tip:
The startup script technique makes it easy for you to change the programs you run at startup. If you prefer, you can just add individual programs to the Add Startup Program dialog. For example, if you have unified desktop (that is, one in which the Desktop layout is set to Spanning Desktops, you could follow step 2 above and in the Add Startup Program dialog type in a command similar to:
env DISPLAY=:0.0 xterm -geometry -0+0
This will start an xterm window in the upper-right corner of the rightmost monitor.

Type man X for more information about placing windows in particular locations on the desktop.

Going farther

If space on your physical desktop is not a limitation, you can buy graphics cards to set up a triple-headed system. However, this configuration is quite a bit more difficult to set up. Basically, you have to edit your /etc/X11/xorg.conf file (which replaces the /etc/X11/XF86config file of older Linux distributions.)

The sample xorg.conf file that follows may assist you in setting up a three-headed system, but as you will see, you are required to specify the operation of the video cards and the monitors in detail. One way to get this information is to set up your system for a dual-headed display with one pair of cards, save a copy of the /etc/X11/xorg.conf file, replace one of the cards and save a copy of xorg.conf again, then merge the two files using the example below as a template.

# Xorg configuration created by system-config-display

Section "ServerLayout"
	Identifier     "Multihead layout"
	Screen         "Screen0" LeftOf "Screen1"
	Screen         "Screen1" LeftOf "Screen2"
	Screen         "Screen2" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
	Option	    "Xinerama" "on"
	Option	    "Clone" "off"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "IMPS/2"
	Option	    "Device" "/dev/input/mice"
	Option	    "ZAxisMapping" "4 5"
	Option	    "Emulate3Buttons" "yes"
EndSection

Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "ViewSonic P815"
	HorizSync    30.0 - 115.0
	VertRefresh  50.0 - 160.0
	Option	    "dpms"
EndSection

Section "Monitor"
	Identifier   "Monitor1"
	VendorName   "Monitor Vendor"
	ModelName    "ViewSonic P815"
	HorizSync    30.0 - 115.0
	VertRefresh  50.0 - 160.0
	Option	    "dpms"
EndSection

Section "Monitor"
	Identifier   "Monitor2"
	VendorName   "Monitor Vendor"
	ModelName    "Nokia 447Xi"
	HorizSync    30.0 - 91.0
	VertRefresh  50.0 - 150.0
	Option	    "dpms"
EndSection

Section "Device"
	Identifier  "Videocard0"
	Driver      "mga"
	VendorName  "Videocard vendor"
	BoardName   "Matrox Millennium II"
	VideoRam    8192
        BusID       "PCI:2:1:0"
EndSection

Section "Device"
	Identifier  "Videocard1"
	Driver      "r128"
	VendorName  "Videocard Vendor"
	BoardName   "ATI Rage 128"
	BusID       "PCI:1:0:0"
#	Screen      1
EndSection

Section "Device"
	Identifier  "Videocard2"
	Driver      "mga"
	VendorName  "Videocard vendor"
	BoardName   "Matrox Millennium II"
	VideoRam    8192
        BusID       "PCI:2:12:0"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "Videocard0"
	Monitor    "Monitor0"
	DefaultDepth     16
	SubSection "Display"
		Viewport   0 0
		Depth     16
		Modes    "1600x1200"
	EndSubSection
EndSection

Section "Screen"
	Identifier "Screen1"
	Device     "Videocard1"
	Monitor    "Monitor1"
	DefaultDepth     16
	SubSection "Display"
		Viewport   0 0
		Depth     16
		Modes    "1600x1200"
	EndSubSection
EndSection

Section "Screen"
	Identifier "Screen2"
	Device     "Videocard2"
	Monitor    "Monitor2"
	DefaultDepth     16
	SubSection "Display"
		Viewport   0 0
		Depth     16
		Modes    "1280x1024"
	EndSubSection
EndSection

About the author

Michael Behm is a technical writer at Red Hat.