ProLiant 3000 Multiple Monitors under Fedora Core 4

 

Don’t tell my buddies on the Compaq Servers newsgroup! I will get flamed for having the audacity to turn a perfectly good server into a graphics workstation (though I may get extra points for the Compaq beach-towel). The truth is, I don’t have a lot of graphics to process, and I rarely have the need to open more than a few windows at a time. Like many of the truly enjoyable projects, this was just done to see if this could be done. In addition, I was able to acquire this 3000 locally for $5.50 and I had more than a handful of accumulated 17” monitors collecting dust in the garage. I did beef up the memory and slide in three 18.2G drives, bringing the total cost for this project to a whopping $38.75. Here are some final specs for the machine:

 

Compaq ProLiant 3000

Dual PIII 550MHz processors

2.0G PC100 ECC SDRAM

2DH Smart Array Controller

3x18.2G 7200rpm drives (RAID0 system partition of 52.4G)

3x4.3G 7200rpm drives (RAID0 /share partition of 12.6G)

4/8G SCSI Tape drive (I had to see how Linux would handle it)

 

But the real hardware item, worthy of note, is the graphics card. This is a Colorgraphic Predator Pro quad-channel card providing 32M of video RAM per channel. These cards were considered VERY high end items at the turn of the millennium, but today they can be picked up quite reasonably when they can be found. The card uses the S4 Savage chipset, which is a standard “sure to be included” driver in most Linux installations. For those of us familiar with Linux, I must now mention a fact which is painful for the Linux thumpers to hear, but it is true nevertheless: Linux is very bad at healing itself. It’s true! We hope this will change as the OS evolves, but the fact is if you choose to add new hardware after the OS has been installed, you are in for some discomfort. The only way to minimize the misery is to have all of the hardware firmly mounted and functioning BEFORE you begin the installation. I learned this lesson the hard way, there is no reason that you should have to…just take my word for it.

 

I will now describe the setup in the form of several sections, beginning (as all ProLiant setups MUST begin) with the firmware.

 

1) Firmware setup

 

The ProLiant 3000 needs SmartStart 5.50 (easily downloaded free from http://h18004.www1.hp.com/support/files/server/us/subscription/ssdownloads_ss550.html). This download will allow you to receive a 364M ISO image from which a bootable CD can be burned. Create the CD in the way you normally would…I can’t get into the mechanics of CD burning for the sake of this article.

 

After SmartStart is booted and running, the first thing we need to do is run the Hardware Setup Utility. Check the settings (using “view or edit”) and see that all of the devices have been found. Also check to see that OS Type is set to Linux. I also take the time here to play (totally unnecessary) with the default LCD display, as you can see here:

You can make the idle screen say whatever you wish (within the number of characters available). Be creative.

 

After the HSU has been run, and the configuration saved, it is always a good idea to run the RomPaq to make sure your motherboard is running the latest available firmware.

Next we have to run the Array Configuration Utility. I don’t need to tell you Compaq people anything more then you already know about this. Your controller, your drives, your array, your configuration. Just be advised that you will want 10G for the system partition AT THE VERY LEAST.

 

2) OS Installation

 

I obtained the ISO images of Fedora Core 4 from www.redhat.com. There were four files, resulting in four disks. The first disk is bootable. I really have very little to say regarding the FC4 installation, other than it works extremely well. The OS sensed and happily configured itself to use the Compaq Array, and failed to complain about any of the hardware it found. It even chose and installed the smp kernel (for mulit-processors) without any input on my part.

 

For the purpose of testing as many applications as possible, I chose the “install everything” option, and it took a couple of hours to complete (no surprise, it takes about that long on a P4 machine).

 

When the install completes and the system restarts, you will immediately discover that only the first monitor shows any display. FC4 will not automatically configure multiple displays…that will comprise the meat of this article. We have to do the configuring manually, and to do so we have to dig into how XORG works. It sounds intimidating, but with a little care it turned out to be pretty easy.

 

Before proceeding to our modifications, it is a good idea to stop and do all of the system updates first. You can use the graphical “up2date” utility supplied with FC4, but I prefer to run yum from a terminal window. I type this command: yum –y update Then I walk away for about an hour. In my case the update included a new kernel (always a good thing). At the time I am writing this the latest approved release is 2.6.12smp.

 

3) Configuring X-window

 

To get the four monitors to display, we need to manually edit the configuration file /etc/X11/xorg.conf. You will have to make these changes as root, or you won’t be able to save the file when you are finished. I used the default Text Editor found under System Tools to make these changes. It is, as usual, a good idea to make a backup copy of your xorg.conf before you begin. At this point, let me paste on my completed configuration file, we will then talk about the sections one-at-a-time:

 

# Xorg configuration created by Jeffrey Alsip for Multiple Monitors

 

Section "ServerLayout"

      Identifier     "multi-head configuration"

      Screen 0       "Screen0" 0 0

      Screen 1       "Screen1" RightOf "Screen0"

      Screen 2       "Screen2" RightOf "Screen1"

      Screen 3       "Screen3" RightOf "Screen2"

      InputDevice    "Mouse0" "CorePointer"

      InputDevice    "Keyboard0" "CoreKeyboard"

EndSection

 

Section "ServerFlags"

      Option             "Xinerama" "true"

EndSection

 

Section "Files"

# RgbPath is the location of the RGB database.  Note, this is the name of the

# file minus the extension (like ".txt" or ".db").  There is normally

# no need to change the default.

 

# Multiple FontPath entries are allowed (they are concatenated together)

# By default, Red Hat 6.0 and later now use a font server independent of

# the X server to render fonts.

 

      RgbPath      "/usr/X11R6/lib/X11/rgb"

      FontPath     "unix/:7100"

EndSection

 

Section "Module"

      Load  "dbe"

      Load  "extmod"

      Load  "fbdevhw"

      Load  "glx"

      Load  "record"

      Load  "freetype"

      Load  "type1"

      Load  "dri"

EndSection

 

Section "InputDevice"

# Specify which keyboard LEDs can be user-controlled (eg, with xset(1))

#     Option      "Xleds"           "1 2 3"

 

# To disable the XKEYBOARD extension, uncomment XkbDisable.

#     Option      "XkbDisable"

 

# To customise the XKB settings to suit your keyboard, modify the

# lines below (which are the defaults).  For example, for a non-U.S.

# keyboard, you will probably want to use:

#     Option      "XkbModel"  "pc102"

# If you have a US Microsoft Natural keyboard, you can use:

#     Option      "XkbModel"  "microsoft"

#

# Then to change the language, change the Layout setting.

# For example, a german layout can be obtained with:

#     Option      "XkbLayout" "de"

# or:

#     Option      "XkbLayout" "de"

#     Option      "XkbVariant"      "nodeadkeys"

#

# If you'd like to switch the positions of your capslock and

# control keys, use:

#     Option      "XkbOptions"      "ctrl:swapcaps"

# Or if you just want both to be control, use:

#     Option      "XkbOptions"      "ctrl:nocaps"

#

      Identifier  "Keyboard0"

      Driver      "kbd"

      Option          "XkbModel" "pc105"

      Option          "XkbLayout" "us"

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    "Gateway EV700"

      DisplaySize  320  240

      HorizSync    30.0 - 70.0

      VertRefresh  50.0 - 160.0

      Option          "dpms"

EndSection

 

Section "Monitor"

      Identifier   "Monitor1"

      VendorName   "Monitor Vendor"

      ModelName    "Gateway EV700"

      DisplaySize  320  240

      HorizSync    30.0 - 70.0

      VertRefresh  50.0 - 160.0

      Option          "dpms"

EndSection

 

Section "Monitor"

      Identifier   "Monitor2"

      VendorName   "Monitor Vendor"

      ModelName    "NEC MultiSync XP17"

      DisplaySize  320  240

      HorizSync    31.0 - 82.0

      VertRefresh  55.0 - 100.0

      Option          "dpms"

EndSection

 

Section "Monitor"

      Identifier   "Monitor3"

      VendorName   "Monitor Vendor"

      ModelName    "Compaq V700"

      DisplaySize  320  240

      HorizSync    30.0 - 70.0

      VertRefresh  50.0 - 140.0

      Option          "dpms"

EndSection

 

Section "Device"

      Identifier  "Videocard0"

      Driver      "savage"

      VendorName  "Colorgraphic"

      BoardName   "S3 Savage4"

      BusID       "PCI:02:01:0"

EndSection

 

Section "Device"

      Identifier  "Videocard1"

      Driver      "savage"

      VendorName  "Colorgraphic"

      BoardName   "S3 Savage4"

      BusID       "PCI:02:02:0"

EndSection

 

Section "Device"

      Identifier  "Videocard2"

      Driver      "savage"

      VendorName  "Colorgraphic"

      BoardName   "S3 Savage4"

      BusID       "PCI:02:03:0"

EndSection

 

Section "Device"

      Identifier  "Videocard3"

      Driver      "savage"

      VendorName  "Colorgraphic"

      BoardName   "S3 Savage4"

      BusID       "PCI:02:04:0"

EndSection

 

Section "Screen"

      Identifier "Screen0"

      Device     "Videocard0"

      Monitor    "Monitor0"

      DefaultDepth     24

      SubSection "Display"

            Viewport   0 0

            Depth     16

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

      SubSection "Display"

            Viewport   0 0

            Depth     24

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

EndSection

 

Section "Screen"

      Identifier "Screen1"

      Device     "Videocard1"

      Monitor    "Monitor1"

      DefaultDepth     24

      SubSection "Display"

            Viewport   0 0

            Depth     16

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

      SubSection "Display"

            Viewport   0 0

            Depth     24

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

EndSection

 

Section "Screen"

      Identifier "Screen2"

      Device     "Videocard2"

      Monitor    "Monitor2"

      DefaultDepth     24

      SubSection "Display"

            Viewport   0 0

            Depth     16

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

      SubSection "Display"

            Viewport   0 0

            Depth     24

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

EndSection

 

Section "Screen"

      Identifier "Screen3"

      Device     "Videocard3"

      Monitor    "Monitor3"

      DefaultDepth     24

      SubSection "Display"

            Viewport   0 0

            Depth     16

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

      SubSection "Display"

            Viewport   0 0

            Depth     24

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

EndSection

 

Section "DRI"

      Group        0

      Mode         0666

EndSection

 

 

 

 

 Okay, this looks kind of intimidating, now that I scan back over it. But it only requires some logic with a touch of fearlessness. The syntax used by XORG is, of course, critical…I hope my explanation will be as concise as you need it to be.

 

First, let’s look at the video card section. The critical information required is the PCI BUS ID…in our case you can see that the system considers the single four-port Predator Pro to be four separate video cards. That’s cool…let it think what it wants. In order to determine the bus ID numbers (under FC4) you simply open a terminal and run the command lspci. The resulting output will include the numbers we need in their proper format. We then create for full identical sections…one for each video card (or virtual cards if you prefer) as thus:

 

Section "Device"

      Identifier  "Videocard0"

      Driver      "savage"

      VendorName  "Colorgraphic"

      BoardName   "S3 Savage4"

      BusID       "PCI:02:01:0"

EndSection

 

Section "Device"

      Identifier  "Videocard1"

      Driver      "savage"

      VendorName  "Colorgraphic"

      BoardName   "S3 Savage4"

      BusID       "PCI:02:02:0"

EndSection

 

Section "Device"

      Identifier  "Videocard2"

      Driver      "savage"

      VendorName  "Colorgraphic"

      BoardName   "S3 Savage4"

      BusID       "PCI:02:03:0"

EndSection

 

Section "Device"

      Identifier  "Videocard3"

      Driver      "savage"

      VendorName  "Colorgraphic"

      BoardName   "S3 Savage4"

      BusID       "PCI:02:04:0"

EndSection

 

Note that the BusID is the only difference between each section. The initial OS installation actually made the first section that you see. I simply cut and pasted it three more times and then went back and edited each section with the proper data. I changed the Identifier on each to something I could easily understand, and I inserted the correct BusID numbers. Not too tough.

 

Now let’s talk about the monitors. As I said, I pulled four out of the garage, and they were of course different models. My four (in order) are:

 

1) Gateway EV700

2) Gateway EV700

3) NEC MultiSync XP17

4) Compaq V700

 

The monitors you use will naturally be different. If you can manage to get your hands on four monitors of identical make and model, then good for you! Your setup will be a little easier. The bottom line is this: you really only need to determine the exact vertical and horizontal synchronization rates for each monitor. I found all of mine quickly and easily on the internet by looking on the manufacturer’s web page. If there is some grand list of every monitor’s specs somewhere, then I am not aware of it. Here is the final XORG section for my four monitors:

 

Section "Monitor"

      Identifier   "Monitor0"

      VendorName   "Monitor Vendor"

      ModelName    "Gateway EV700"

      DisplaySize  320  240

      HorizSync    30.0 - 70.0

      VertRefresh  50.0 - 160.0

      Option          "dpms"

EndSection

 

Section "Monitor"

      Identifier   "Monitor1"

      VendorName   "Monitor Vendor"

      ModelName    "Gateway EV700"

      DisplaySize  320  240

      HorizSync    30.0 - 70.0

      VertRefresh  50.0 - 160.0

      Option          "dpms"

EndSection

 

Section "Monitor"

      Identifier   "Monitor2"

      VendorName   "Monitor Vendor"

      ModelName    "NEC MultiSync XP17"

      DisplaySize  320  240

      HorizSync    31.0 - 82.0

      VertRefresh  55.0 - 100.0

      Option          "dpms"

EndSection

 

Section "Monitor"

      Identifier   "Monitor3"

      VendorName   "Monitor Vendor"

      ModelName    "Compaq V700"

      DisplaySize  320  240

      HorizSync    30.0 - 70.0

      VertRefresh  50.0 - 140.0

      Option          "dpms"

EndSection

 

As with the video card section, the initial install made the section for the first monitor for me…I just copied and pasted it three more times, then went back and edited the data. Again, if you have the right numbers it’s not too tough.

 

At this point take a look at what we have entered as Identifiers (in both the video card and the monitor sections), as this is the information we need to use next.

 

Now let’s look at the Screens Section:

 

Section "Screen"

      Identifier "Screen0"

      Device     "Videocard0"

      Monitor    "Monitor0"

      DefaultDepth     24

      SubSection "Display"

            Viewport   0 0

            Depth     16

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

      SubSection "Display"

            Viewport   0 0

            Depth     24

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

EndSection

 

Section "Screen"

      Identifier "Screen1"

      Device     "Videocard1"

      Monitor    "Monitor1"

      DefaultDepth     24

      SubSection "Display"

            Viewport   0 0

            Depth     16

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

      SubSection "Display"

            Viewport   0 0

            Depth     24

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

EndSection

 

Section "Screen"

      Identifier "Screen2"

      Device     "Videocard2"

      Monitor    "Monitor2"

      DefaultDepth     24

      SubSection "Display"

            Viewport   0 0

            Depth     16

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

      SubSection "Display"

            Viewport   0 0

            Depth     24

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

EndSection

 

Section "Screen"

      Identifier "Screen3"

      Device     "Videocard3"

      Monitor    "Monitor3"

      DefaultDepth     24

      SubSection "Display"

            Viewport   0 0

            Depth     16

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

      SubSection "Display"

            Viewport   0 0

            Depth     24

            Modes    "1280x1024" "1024x768" "800x600" "640x480"

      EndSubSection

EndSection

 

Again, there are four sections for four different screens (duh!). The install made the first one and I copied it three times and went back and did some editing. All I had to change on each was: Identifier, Device, and Monitor. Now you can see why I was so careful to keep the Identifiers so consistent in the previous sections. It is pretty straight-forward when I can associate Screen1 with Videocard1 and Monitor1…I’m sure you will agree. I kept the modes the same on all the displays, as I wanted the best resolution that EVERY monitor could handle…in my case that was 1280x1024. Your possible resolutions may be better or worse than mine, but you should pick your highest possible resolution as the one that the weakest monitor can handle…this information is also available on the spec sheets you access on the manufacturer’s websites. (To my surprise, the Compaq was the weakest monitor in my setup! What’s up with that?)

 

Finally, we need to look at the placement of the monitors. Mine are placed in a single row (see picture) and are in order (monitor0, monitor1, etc.), so my screen placement section came out like this:

 

Section "ServerLayout"

      Identifier     "multi-head configuration"

      Screen 0       "Screen0" 0 0

      Screen 1       "Screen1" RightOf "Screen0"

      Screen 2       "Screen2" RightOf "Screen1"

      Screen 3       "Screen3" RightOf "Screen2"

      InputDevice    "Mouse0" "CorePointer"

      InputDevice    "Keyboard0" "CoreKeyboard"

EndSection

 

Note that the tag ServerLayout was there by default. I changed the Identifier and added the different Screens. In my case, each new screen was to the “RightOf” the one before it. You may wish to use other monitor placements. You can, of course, substitute “LeftOf” or “AboveOf”, etc.

 

Now that the changes to xorg.conf have been made, it can be saved. The system then needs to be rebooted. If your edits were clean and followed the simple rules you should see all four displays appear even before you actually log in.

 

I hope my descriptions were not confusing, but let’s face it…this may be one of the more difficult file edits you ever have to do.

 

4) Background Display

 

I want to mention this because the default background screens are really ugly when they have to be stretched out of recognition to fit across four displays. I was overjoyed to find some free backgrounds specifically designed for multiple monitors on the 9XMedia’s website. Here’s the link: http://www.9xmedia.com/Pages-Downloads/2000-Backgrounds.html

 

You can see, by the picture, that I have a scene of the Grand Canyon stretched across all four monitors, displayed in high resolution. The monitor on the far right shows a terminal window running a yum update (just so you wouldn’t think I was pulling a fast one with trick photography).

 

This has been a fun project and very gratifying to see accomplished. If you have any questions you can email me at jeffreyalsip@hotmail.com.