Installing Ubuntu on a Dell Latitude C600e

Table of Contents

Overall Impression

Install CD

Sound

Networking

Update, Upgrade and dist-upgrade

X Window System

TV Out

VGA Out and Multi-Head

Function Keys

Suspend and DRI

Overall Impression

I am very happy with Ubuntu 7.04 on the Latitude c600. It took some time to install, especially with the CD problems, but once installed Ubuntu provided everything I wanted.

Install CD

I downloaded the Ubuntu Edgy Eft (6.10) Desktop Edition iso from http://ww.ubuntu.com. The Laptop CDROM drive had a lot of trouble reading the CD-ROM. Eventually I got it to boot by pressing F6 to modify the boot command and adding the nodma instruction to the boot command. But it was slow. The Desktop Edition iso is a live boot CD which includes an option to install to hard drive. The actual installation process was very simple - a few easy questions followed by about an hour copying files to the local hard drive.

Create a swap partition. Create a swap partition on the target driver before booting the ubuntu CD (use knoppix or a rescue tools CD to create the swap partition). Then boot ubuntu and most of the performance problems will disappear. Thanks to Jon L. Gardner for this tip.

Sound

The sound worked perfectly with the default installation.

Network: Ethernet, Modem, Wireless Ethernet

It took me a while to figure out why the laptop's ethernet port didn't work. It turned out that on the Latitude c600 the ethernet and modem sockets are attached to the case, but the controllers are on a mini-PCI card which can be found by removing the memory compartment cover on the bottom of the laptop. Tiny wires connect the controllers to the sockets. But someone had removed the mini-PCI card. So the ethernet and modem ports on this machine are dead.

Fortunately I had a Dlink DFE650TX PCMCIA ethernet card in my spare parts box. I plugged in the DFE650, ubuntu detected it without any problems. I used the network-admin utility to configure the card and the network appeared.

The laptop came with a NovaTech "Wireless PC Card". That's the actual model name! It is a 802.11b/g card using the RT2500 chipset. Hooray! There is a rt2500 driver in the kernel! Kindly provided by http://rt2x00.serialmonkey.com. But I couldn't get it working using network-admin. Instead, I had to edit the config files by hand. I left the interface marked as disabled in network-admin and added these lines to my /etc/networking/interfaces file to get the rt2500 card to work with my WEP128 wireless b network (use your own values for essid and key, of course):

auto ra0
iface ra0 inet dhcp
pre-up iwconfig ra0 essid linksys
pre-up iwconfig ra0 mode managed
pre-up iwconfig ra0 key 11111111111111111111111111

Update, Upgrade and dist-upgrade

Now that the network is working I can fix the package management's /etc/apt/sources.list file. First, I change to the nearest ubuntu mirror, in my case http://ubuntu.mirror.rafal.ca. Next I add the universe and multiverse repositories. Then I did the familiar:

bash# apt-get update
bash# apt-get upgrade

You could probably do this using the GUI package manager (synaptic?) but I prefer the command line. Then I add the http://medibuntu.sos-sts.com/repo repository for some non-free software such as mplayer and lame, and install them using this command:

apt-get -y install gstreamer0.8-plugins w32codecs xine-ui libflash-mozplugin mplayer \
                gstreamer0.10-plugins-ugly gstreamer0.8-plugins-multiverse \
                gstreamer0.10-plugins-bad-multiverse gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad \
                libxine-extracodecs libxine-main1 faad sox lame ffmpeg mjpegtools vorbis-tools \
                libxvidcore4 gstreamer0.10-pitfdll w32codecs libdvdcss2 timidity \
                timidity-interfaces-extra freepats flashplugin-nonfree sun-java5-bin \
                sun-java5-plugin totem-gstreamer rar gtk-gnutella frozen-bubble \
                msttcorefonts gsfonts-x11 xfonts-intl-european libdvdread3

Ubuntu 7.04 (feisty) came out the day after I finished installing ubuntu 6.10. So I added feisty to my sources.list and did an apt-get dist-upgrade. Here is my final sources.list file:

#
# edgy
#

deb http://ubuntu.mirror.rafal.ca/ubuntu/ edgy main restricted universe multiverse
deb-src http://ubuntu.mirror.rafal.ca/ubuntu/ edgy main restricted universe multiverse
deb http://ubuntu.mirror.rafal.ca/ubuntu/ edgy-updates main restricted
deb-src http://ubuntu.mirror.rafal.ca/ubuntu/ edgy-updates main restricted

deb http://ca.archive.ubuntu.com/ubuntu/ edgy-backports main restricted universe multiverse
deb-src http://ca.archive.ubuntu.com/ubuntu/ edgy-backports main restricted universe multiverse
deb http://medibuntu.sos-sts.com/repo/ edgy free non-free
deb-src http://medibuntu.sos-sts.com/repo/ edgy free non-free

deb http://archive.canonical.com/ubuntu edgy-commercial main

deb http://security.ubuntu.com/ubuntu edgy-security main restricted universe 
deb-src http://security.ubuntu.com/ubuntu edgy-security main restricted universe

#
# feisty
#

deb http://ubuntu.mirror.rafal.ca/ubuntu/ feisty main restricted universe multiverse
deb-src http://ubuntu.mirror.rafal.ca/ubuntu/ feisty main restricted universe multiverse
deb http://ubuntu.mirror.rafal.ca/ubuntu/ feisty-updates main restricted
deb-src http://ubuntu.mirror.rafal.ca/ubuntu/ feisty-updates main restricted

deb http://ca.archive.ubuntu.com/ubuntu/ feisty-backports main restricted universe multiverse
deb-src http://ca.archive.ubuntu.com/ubuntu/ feisty-backports main restricted universe multiverse
deb http://medibuntu.sos-sts.com/repo/ feisty free non-free
deb-src http://medibuntu.sos-sts.com/repo/ feisty free non-free

deb http://archive.canonical.com/ubuntu feisty-commercial main

deb http://security.ubuntu.com/ubuntu feisty-security main restricted universe 
deb-src http://security.ubuntu.com/ubuntu feisty-security main restricted universe

X Window System

X worked fine on the default Edgy install. But I have had problems with the the default Ubuntu xorg.conf file in other systems because it contains too many input device configurations. Also, Edgy used the ati driver, and I wanted the r128 driver (the chipset is an ATI Rage Mobility M3 AGP 2x). So I used a slightly different xorg.conf:

# xorg.conf for dell latitude c600 by A. Howlett and others

Section "ServerLayout"
        Identifier      "Default Server Layout"
        Screen          0 "Screen0"
        InputDevice     "Keyboard0" "CoreKeyboard"
        InputDevice     "Mouse0" "CorePointer"
        InputDevice     "Generic Mouse" "AlwaysCore"
EndSection

Section "Files"
    RgbPath     "/usr/X11R6/lib/X11/rgb"  
    FontPath    "/usr/share/fonts/local"
    FontPath    "/usr/share/fonts/misc"
    FontPath    "/usr/share/fonts/75dpi:unscaled"
    FontPath    "/usr/share/fonts/100dpi:unscaled"
    FontPath    "/usr/share/fonts/Type1"
    FontPath    "/usr/share/fonts/CID"
    FontPath    "/usr/share/fonts/Speedo"
    FontPath    "/usr/share/fonts/cyrillic"
    FontPath    "/usr/share/fonts/artwiz-aleczapka"
    FontPath    "/usr/share/fonts/TTF"
    FontPath    "/usr/share/fonts/util"
    FontPath    "/usr/local/share/fonts"
    FontPath    "/usr/share/fonts"
    FontPath    "/usr/share/fonts"
    FontPath    "/usr/share/fonts/aquafont"
    FontPath    "/usr/share/fonts/artwiz"
    FontPath    "/usr/share/fonts/artwiz-aleczapka-en"
    FontPath    "/usr/share/fonts/corefonts"
    FontPath    "/usr/share/fonts/freefont"
EndSection

Section "Module"
        Load  "GLcore"
        Load  "dbe"
        Load  "dri"
        Load  "extmod"
        Load  "glx"
        Load  "pex5"
        Load  "record"
        Load  "xie"
        Load  "v4l"
        Load  "freetype"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "keyboard"
        Option      "XkbModel" "pc104"
        Option      "XkbLayout"       "us"
EndSection

Section "InputDevice"
        Identifier      "Mouse0"
        Driver          "mouse"
        Option          "CorePointer"
        Option          "Device"                "/dev/psaux"
        Option          "Protocol"            "PS/2"
        Option          "Emulate3Buttons"     "true"
        Option          "ZAxisMapping"                "4 5"
EndSection

Section "InputDevice"
        Identifier      "Generic Mouse"
        Driver          "mouse"
        Option          "SendCoreEvents"      "true"
        Option          "Device"              "/dev/input/mice"
        Option          "Protocol"            "ImPS/2"
        Option          "Emulate3Buttons"     "true"
        Option          "ZAxisMapping"                "4 5"
EndSection

Section "Monitor"
        Identifier "laptop LCD"
        VendorName "Dell"
        ModelName  "Latitude C600"
        HorizSync 31.5-48.5
        VertRefresh 40-70
EndSection

Section "Device"
        Identifier  "Video0"
        Driver      "r128"
        VideoRam     8192
        Option      "EnablePageFlip" "true"
        Option      "AGPFastWrite"  "true"
        Option      "AGPMode"     "2" 
        BusID       "PCI:01:00:0"
        Screen      0
        Option      "Display"  "FP"
        Option      "MonitorLayout"  "CRT, LFP"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device "Video0"
        Monitor "laptop LCD"
        DefaultDepth 16
        Subsection "Display"
                Depth 32
                Modes "1024x768"
        EndSubSection
        Subsection "Display"
                Depth 24
                Modes "1024x768"
        EndSubSection
        Subsection "Display"
                Depth 16
                Modes "1024x768"
        EndSubSection
        Subsection "Display"
                Depth 8
                Modes "1024x768"
        EndSubSection
EndSection

Section "DRI"
        Mode    0666
EndSection

Notice that the default depth is set to 16 bits per pixel. On this laptop DRI will only work at 16 bpp. You need DRI if you want to play games or watch videos. If you don't play games or watch videos then you can increase the default depth to 24 (DRI will be de-activated).

TV Out

There are three tricks to getting TV-out working on this machine. The first is to download the atitvout program:

bash# apt-get install atitvout

The second trick is to have the TV on and connected to the laptop before you turn the laptop on. This is very important because atitvout uses BIOS data that initialize when the laptop boots. If the TV isn't detected when your laptop boots, then no BIOS TV data and no TV Out.

The third trick is to use this command (as root):

bash# atitvout -f t

This command changes video output to the TV. To change back to the LCD, use this command:

bash# atitvout -f l

Here's a hack to get mirrored display on the LCD and TV. I couldn't get the display activated on both the TV and the LCD using atitvout -f lt. That command should work but it doesn't. I discovered that when I have the output directed to the TV and use mplayer to play a movie, mplayer activated the LCD screen and played the movie on both the LCD and the TV. After mplayer stopped the output remained active on both the TV and the LCD. So you can get mirrored output on the LCD and TV by switching to the TV, then briefly running and stopping mplayer.

VGA Out, Mirror and Dual Head

VGA Out worked with the r128 driver and my xorg.conf file with an external LCD monitor in mirror mode. To switch to dual head I had to add the following to the end of myxorg.conf file:

#
#  Following lines are added to support multihead
#

Section "Monitor"
    Identifier "external LCD"
    Option "DPMS"
End Section

Section "Device"
    Identifier "Video1"
    Driver  "r128"
    VideoRam  8192
    BusID  "PCI:01:00:0"
    Option  "Display" "FP"
    Screen 1
EndSection

Section "Screen"
    Identifier "Screen1"
    Device "Video1"
    Monitor "external LCD"
    DefaultDepth 16
    SubSection "Display"
        Depth   8
        Modes  "1024x768"
    EndSubSection
    SubSection "Display"
        Depth 16
        Modes  "1024x768"
    EndSubSection
EndSection

Section "ServerLayout"
    Identifier      "Multihead"
    Screen          0 "Screen0"
    Screen          1  "Screen1" rightof "Screen0"
    InputDevice     "Keyboard0" "CoreKeyboard"
    InputDevice     "Mouse0" "CorePointer"
    InputDevice     "Generic Mouse" "AlwaysCore"
EndSection

Section "ServerFlags"
    Option "xinerama" "true"
    Option "DefaultServerLayout" "Multihead"
EndSection

These commands define a second server layout named Multihead. This second layout uses a second screen (the external monitor) and places it on the right side of the laptop screen. So if you move your mouse off the right edge of the laptop screen it will appear on the left edge of the external monitor. By convention, when the window manager opens a new window it will not split the window across the two monitors, but you can resize windows if you wish.

Function Keys

Ubuntu installs the Gnome Desktop. Gnome recognized and used the eject, volume up, volume down, mute, CRT/LCD, and Suspend function keys.

I like the fluxbox window manager. Fluxbox didn't support the sound function keys. But you can add support to fluxbox by adding these lines to ~/.fluxbox/keys:

None 176 :exec amixer -q set Master 10%+
None 174 :exec amixer -q set Master 10%-
None 160 :exec amixer -q set Master toggle

Suspend and DRI

The Latitude C600 supports two different types of suspend: both are incompatible with DRI. If you watch videos or play games then you need DRI and you can't use suspend. If you don't watch videos or play games then you must deactivate DRI before trying suspend. To de-activate DRI all you have to do is set the default depth in the xorg.conf file to 24. (DRI only works at depth 16.)

The first way to do software suspend is to use the Fn-Esc key combination. This suspend function has nothing to do with linux - I think it is implemented in BIOS. It works ... sort of. It suspends fine. Then when I restart the computer it seems to restore correctly, but then it stops and goes back to sleep. On the second restart it restores correctly. A bit weird, but it works.

The second way to suspend is to use the hibernate command either in a shell or bind it to a key. The hibernate command works fine without any modifications.

Back to Andrew's Projects.