Dell Latitude D600
From ArchWiki
Contents |
Installing Arch on a Dell Latitude D600
The d600 was a released by Dell on 3/12/03. At the time of its release it was met with great reviews. Despite being almost 5 years old this business laptop is perfectly capable of delivering a satisfying Linux experience.
Introduction
This is not a guide on how to install Arch (for help with that see the installation guide), but rather an attempt to cover the steps of how to take full advantage of the laptop's hardware. Despite being an Arch-wiki page, everything explained here should apply to other Linux distributions as well.
Getting most of the hardware to work correctly under Linux, is not overly difficult (in fact these days most things are auto-detected, and "just work"TM. Keep in mind I am by no means an expert of hardware in Linux so you may find better solutions than the ones presented here. If you do please edit this guide so that other people may benefit as well.
Documentation
As always the documentation for a Dell laptop is almost non-existant. The only documentation you are going to find for the d600 is the spec sheet and some useless pdf files (although the service guide can be useful if you need to take the laptop apart for some reason). So with that being said the only way to find out useful information is to inspect each individual hardware component.
Hardware
Here's the output of
00:00.0 Class 0600: Intel Corp.
Overview
- Intel Pentium M Processor
- ATI Radeon 9000 (RV250 Mobility FireGL 9000 4x AGP)
- Intel 2200 Pro/Wireless LAN card OR
- Broadcom 54g Wireless card
- Broadcom BCM570 Ethernet card
- Integrated Intel 82801 (intel8x0) sound card
- PCMCIA card port
- Alps touchpad
- Function/Audio keys
- CD/RW, DVD+/-RW
- IRDA
Working
- Cpu frequency scaling
- Video Card: including framebuffer (open source radeon driver)
- Intel 2200 Pro/Wireless Lan card (ipw2200 driver)
- Broadcom 54g Wireless card (ndiswrapper with windows driver bcmwl5 or native kernel module)
- Soundcard (including mixing with alsa)
- Function/audio keys
- Touchpad
- PCMCIA
- CD/RW, DVD+/-RW
- Ethernet Card
- Hardware monitoring (i8k kernel module)
Untested
- IRDA
- Modem (not planning on testing)
- ACPI Sleep States
Pre-Installation
Bios Update
Now before you delete the Windows partition, you'll want to update the bios to the newest version (rev. A16 as of this writing), to avoid any potential non-OS hardware related problems. Grab the executable and install it.
Post Installation
PC Speaker
The first thing to do is to disable that annoying PC speaker, for our current session.
(No output means it was successful.)
Now to make it permanent. Edit /etc/inputrcand add or uncomment the following:
set bell-style none
Make a User
If you forgot to make a user now is the time to do so. Arch comes equipped with adduser which is a nice command line interface for useradd. So use that. When prompted for Initial group you should most likely take the default of users. For Additional groups lp,wheel,network,video,audio,optical,floppy,storage,camera will probably cover most everything. You can always add a user to a group later via:
# gpasswd -a USERNAME DESIRED_GROUP
Compiling from Source
Chances are you'll probably want to setup ABS so that you can use the AUR. (For more complete instructions see the appropriate wikis.) Edit /etc/abs/abs.confto your liking, and then setup the ABS tree via:
Connected to 66.211.213.17 Updating collection core/cvs Checkout base... ...
Once the tree is built it's a good idea to create a build directory, so
$ mkdir /home/your_user/packages
Now whenever you want to build a package put the PKGBUILD in the packagesfolder and build it by
$ fakeroot # makepkg -i
Now that we have our build environment setup, the next step is to configure GCC to optimize our package builds. To do this lets take a look at the CPU.
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 9 model name : Intel(R) Pentium(R) M processor 1400MHz stepping : 5 cpu MHz : 600.000 cache size : 1024 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr mce cx8 sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm pbe up est tm2 bogomips : 1196.60 clflush size : 64
(Information taken shamelessly from here).
Most of the information isn't critical although some of it is interesting, so here it is for the curious. (If you are going to do a lot of your own package building and want to know more about optimization, then you may be interested in /include/asm/cpufeature.h
processor | Linux's denotation of what processor is being used. |
---|---|
vendorID | The vendor of your processor. Intel/AMD/Cyrix/etc. |
CPU family | Indexed indication of your processor's architecture. |
model | ??? |
model name | English language string specifying what CPU your computer has. |
stepping | CPU revision number (more or less). |
cpu MHz | Speed of CPU. |
cache size | Amount of cache your CPU has. |
*_bug | Tells whether or not your CPU is susceptible to some well known processor bugs. |
fpu | Whether your processor has a math co-processor (floating point unit). |
fpu_exception | Whether your processor follows the IEEE specifications for handling floating point exceptions. |
cpuid level | Allows programs to get specifications from the CPU. |
wp | ??? |
bogomips | A Linux approximation of your processor speed. |
Now that we know about our processor it's time to setup /etc/makepkg.conf. An example file using safe Cflags with optimization set for a pentium M is listed below.
... CARCH="i686" CHOST="i686-pc-linux-gnu" #-- Exclusive: will only run on i686 # -mtune builds exclusively for an architecture CFLAGS="-mtune=pentium-m -O2 -pipe -fomit-frame-pointer" CXXFLAGS="${CFLAGS}" MAKEFLAGS="-j2" # number jobs to run simultaneously BUILDENV=(fakeroot !distcc color !ccache) ...
Locales
A common error is to not set a locale which leads to pacman complaining with "warning: current locale is invalid; using default "C" locale". So uncomment your locale from
en_US.UTF-8 UTF-8
and then run
Generating locales... en_US.UTF-8... done Generation complete.
Wireless
The D600 comes with either an Intel Pro Wireless 2200 or a Broadcom BCM43xx. The BCM43xx can be quite fickle under Linux, however the Intel Pro Wireless works flawlessly and is trivial to install. As the driver is already included in the kernel the only thing that needs to be done is to install the firmware.
# pacman -S ipw2200-fw
Now add the entry ipw2200 in the modules section of /etc/rc.conf, and add/change the line NET_PROFILES=(main). Now make a main network-profile in /etc/network-profilefollowing the template in that directory. It will look something like the following.
# Network Profile DESCRIPTION="Default Network Profile" # Network Settings INTERFACE=eth1 HOSTNAME=home # Wireless Settings (optional) ESSID=Router IWOPTS="dhcp $ESSID" #WIFI_INTERFACE=wlan0 # use this if you have a special wireless interface # that is linked to the real $INTERFACE WIFI_WAIT=2 # seconds to wait for the wireless card to
If you run into the strange problem of your wireless interface switching between eth0 and eth1 at boot then you may want to use nameif. Simply put your network id followed by the mac address in /etc/mactab.
eth0 00:0C:DB:E8:38:5A wlan0 00:1F:12:62:2E:CC
(Taken from here.) In addition, a small change to /etc/rc.d/network is necessary to run the nameif command prior to configuring the interfaces. The following excerpt from /etc/rc.d/network shows the lines that need to be added. This change simply checks for the existance of the /etc/mactab file and if it exists executes nameif to assign interface names.
stat_busy "Starting Network" error=0 ##### begin nameif change ##### # set names if [ -n /etc/mactab ]; then /sbin/nameif fi ##### end nameif change ##### # bring up bridge interfaces bridge_up # bring up ethernet interfaces
If you are using a Broadcom wireless card you will probably have issues trying to get the Gnome or KDE network gui's to manage your card correctly. wicd doesn't seem to have any problems managing this card, however.
CPU Scaling
See here.
Suspend to Ram
This is easily accomplished by installing uswsusp from AUR. Contrary to the ominous output from pacman no additional configuration is needed. Additionally, s2ram will probably output an error message saying that This machine can only suspend without framebuffer. but I have not encountered problems with resuming from suspend.
This machine can be identified by: sys_vendor = "Dell Computer Corporation" sys_product = "Latitude D600 " sys_version = "" bios_version = "A16"
# s2ram -f
Frame Buffer
Todo
Kernel
The pre-compiled Arch kernel certainly works, however, it has a lot of bloat so you'll probably want to compile your own. It's possible to make a custom kernel via ABS, however, building a kernel manually is just as easy. Grab the source from kernel.org and extract it to /usr/src/linux. Make a simlink (ln -s /usr/src/linux /usr/src/kernel-folder) and then make menuconfig.
(NOTE: You probably need to install make (for obvious reasons) and diffutils or you will probably get the following error message.)
/bin/sh: cmp: command not found Inconsistent kallsyms data Try setting CONFIG_KALLSYMS_EXTRA_PASS make: *** [vmlinux] Error 1
If you need a starting point for your kernel, here is a .config.
(IMPORTANT: if you use this you will probably have to edit /etc/fstaband grub.conf/menu.lstto use /dev/hdax and not /dev/sdax or else your kernel will not boot!!)
When the .config is to your liking do:
# make prepare # make # make modules_install; # cp /usr/src/linux/arch/i386/boot/bzImage /boot/kernel_name
Before you reboot be sure to edit grub.conf/menu.lst.
# general configuration: timeout 5 default 0 color light-blue/black light-cyan/blue # (1) Arch Linux title Arch Linux (2.6.23.12) root (hd0,1) kernel /kernel-2.6.23.12.arch root=/dev/hda3 vga=792 video=vesafb:mtrr:yrap splash=verbose,theme:darch console=tty1 processor.max_cstate=2 initrd /fbsplash-darch-1024x768 # (2) Windows title Windows rootnoverify (hd0,0) makeactive chainloader +1
Aside: The kernel line processor.max_cstate=2 disables the CPU from going into the 2 higher power saving states. While this causes the battery to use several hundred more mW of power it also disables the annoying CPU wine that is usually very noticeable. (This problem also exists in Windows.) It seems that the kernel module usb-uhci is partially related to this problem. Disabling this is an option but it will disables USB support...
Xorg
With the constant stream of updates, and TONS of outdated documentation on the web, Xorg can be a pain to configure.
Video Card
Use the open source "xf86-video-ati" radeon driver. ATI dropped support for the Radeon (RV250) Mobility FireGL 9000 after catalyst driver version 8.28.8. The binary and the userspace tools are available in the AUR, however they WILL NOT load with Xorg >= 7.2.
Note: Don't specify AGPFastWrite or AccelMethod in the xorg.conf Device section as it will cause X not to start.
Fonts
To make your fonts look better you can follow the wiki directions here and/or here and install cairo-lcd and libxft-lcd. Personally I don't think those packages look nearly as good as Fedora's, so I use those. Get rpmextract from pacman and then download the packages. Extract the .so files and copy them into /usr/lib. (IMPORTANT! Copying over the old files may crash your current X-session, so it's best to do this from a console.)
Dual Monitors
Setting up dual monitors used to be an insanely frustrating ordeal because you would have to edit xorg.conf and then start/test/reset X. Luckily RandR fixes this. To summarize from here and here "RandR 1.2 provides automatic discovery of modes (resolutions, refresh rates, etc.) coupled with the ability to configure outputs dynamically (resize, rotate, move, etc.)." The only thing required by the user is to specify a virtual display area, and run the appropriate xrandr command. (For a nice tutorial see here.)
Notes
- Xinerama is deprecated and will cause X to segfault. This is a known regression by the X developers and they have no intention of fixing it as Xinerama was basically a hack anyways.
- MergedFB has now been completely replaced by RandR.
This particular setup uses an external 20" LCD running at 1680x1050 and is connected to a docking station via a DVI cable. Now, it would be useful if the external monitor was auto detected and configured whenever we started the computer. Now because the computer is a laptop we also don't want to try and configure the screen if it isn't connected. The following bash script will do just that.
#!/bin/bash monitor=`xrandr | grep -i DVI | cut -d" " -f2` if [ $monitor = "connected" ]; then xrandr --output DVI-0 --right-of LVDS --mode 1680x1050 else xrandr --output DVI-0 --off fi
Mice
Getting both the touchpad and an external mouse to play nicely together can be tricky. If you use the evdev driver then you don't have to specify the ButtonMapping, however, I've had better luck using the regular mouse driver. This particular setup specifies a Logitech MX400 USB mouse as the core pointer and Alps touchpad as a secondary device. (For more complete instructions see here.)
Xorg.conf
#Xorg configuration file created by Matt Beisser (Dec 2004) # One external Screen running at 1680x1050 # Note to myself: fglrx for D600 requires v28.8? and breaks, so # I need to use the opensource Radeon drivers # Update: Still not sure on fonts... # # Feb 2007: Changed to work with Arch # Dec 2007: xinerama is depracated use Virtual Screens instead Section "ServerLayout" Identifier "Dualhead Layout" Screen 0 "Default Screen" 0 0 # Screen 1 "ACER Screen" Rightof "Laptop Screen" InputDevice "External Mouse" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" InputDevice "Synaptics" "SendCoreEvents" Option "AllowMouseOpenFail" "true" Option "OffTime" "30" Option "AIGLX" "true" EndSection Section "DRI" Group "video" Mode 0666 EndSection Section "Extensions" Option "Composite" "true" EndSection Section "Files" RgbPath "/usr/share/X11/rgb" ModulePath "/usr/lib/xorg/modules" FontPath "/usr/share/fonts/misc:unscaled" FontPath "/usr/share/fonts/Type1" FontPath "/usr/share/fonts/TTF" # Additional fonts: Locale, Gimp, TTF... FontPath "/usr/share/fonts/cyrillic" FontPath "/usr/share/fonts/util" FontPath "/usr/share/fonts/speedo" FontPath "/usr/share/fonts/OTF" FontPath "/usr/share/fonts/75dpi:unscaled" FontPath "/usr/share/fonts/100dpi:unscaled" FontPath "/usr/share/fonts/artwiz-fonts" EndSection Section "Module" Load "drm" Load "type1" Load "ddc" Load "freetype" Load "type1" Load "bitmap" Load "dbe" Load "extmod" Load "record" Load "glx" # Load "dri" EndSection #################################################### # Input Devices #################################################### Section "InputDevice" Identifier "Keyboard0" Driver "kbd" # Driver "keyboard" Option "CoreKeyboard" Option "XkbRules" "xorg" Option "XkbModel" "pc105" Option "XkbLayout" "us" Option "XkbVariant" "" EndSection Section "InputDevice" Identifier "External Mouse" Driver "mouse" Option "Name" "Logitech MX400 Optical Mouse" Option "Resolution" "1200" # Option "Protocol" "auto-dev" Option "Protocol" "auto" # Option "Protocol" "IMPS/2" Option "Device" "/dev/input/mice" Option "Buttons" "9" Option "ButtonMapping" "1 2 3 6 7 8 9" Option "ZAxisMapping" "4 5" Option "Emulate3Buttons" "no" Option "SendCoreEvents" "yes" EndSection Section "InputDevice" Identifier "Synaptics" Driver "synaptics" Option "Device" "/dev/input/mice" Option "Protocol" "auto-dev" Option "Emulate3Buttons" "yes" Option "LeftEdge" "120" Option "RightEdge" "830" Option "TopEdge" "120" Option "BottomEdge" "650" Option "FingerLow" "14" Option "FingerHigh" "15" Option "MaxTapMove" "110" Option "VertScrollDelta" "20" Option "HorizScrollDelta" "20" Option "MinSpeed" "0.5" Option "MaxSpeed" "1.5" Option "SHMConfig" "true" EndSection #################################################### # Monitors #################################################### Section "Monitor" Identifier "Laptop Monitor" Option "DPMS" "true" #HorizSync 28.0 - 96.0 # Warning: This may fry old Monitors #VertRefresh 50.0 - 75.0 # Very conservative. May flicker. #VertRefresh 50.0 - 62.0 # Extreme conservative. Will flicker. TFT default. ModeLine "1400x1050" 122.61 1400 1488 1640 1880 1050 1051 1054 1087 -HSync +Vsync # 1400x1050 @ 72.00 Hz (GTF) hsync: 78.77 kHz; pclk: 149.34 MHz ModeLine "1400x1050" 149.34 1400 1496 1648 1896 1050 1051 1054 1094 -HSync +Vsync # 1400x1050 @ 75.00 Hz (GTF) hsync: 82.20 kHz; pclk: 155.85 MHz # ModeLine "1400x1050" 155.85 1400 1496 1648 1896 1050 1051 1054 1096 -HSync +Vsync # 1400x1050 @ 85.00 Hz (GTF) hsync: 93.76 kHz; pclk: 179.26 MHz # ModeLine "1400x1050" 179.26 1400 1504 1656 1912 1050 1051 1054 1103 -HSync +Vsync # 1400x1050 @ 100.00 Hz (GTF) hsync: 111.20 kHz; pclk: 214.39 MHz # ModeLine "1400x1050" 214.39 1400 1512 1664 1928 1050 1051 1054 1112 -HSync +Vsync DisplaySize 370 277 #1400x1050 96dpi EndSection Section "Monitor" Identifier "ACER Monitor" VendorName "Acer" ModelName "X203W" #HorizSync 30-83 #VertRefresh 55-75 Option "DPMS" EndSection ################################################### ## "DualHead" (default) Layout #################################################### Section "Device" Identifier "ATI Radeon 9000" Driver "radeon" # Option "AccelMethod" "EXA" # Option "AccelMethod" "XAA" Option "AGPMode" "4" # Option "AGPFastWrite" "Yes" Option "EnablePageFlip" "on" Option "ColorTiling" "on" Option "RenderAccel" "on" Option "XAANoOffscreenPixmaps" "true" Option "DRI" "true" # Option "GARTSize" "64" Option "DynamicClocks" "on" Option "Monitor-DVI-0" "ACER Monitor" Option "Monitor-LVDS-0" "Laptop Monitor" EndSection Section "Screen" Identifier "Default Screen" Device "ATI Radeon 9000" Monitor "Laptop Monitor" DefaultColorDepth 24 SubSection "Display" Depth 24 ViewPort 0 0 Virtual 3080 1050 Modes "1400x1050" "1680x1050" EndSubSection SubSection "Display" Depth 16 ViewPort 0 0 Virtual 3080 1050 Modes "1400x1050" "1680x1050" EndSubSection EndSection #Section "Screen" # Identifier "ACER Screen" # Device "ATI Radeon 9000" # Monitor "ACER Monitor" # DefaultColorDepth 16 # SubSection "Display" # Depth 24 # Modes "1680x1050" # EndSubSection # SubSection "Display" # Depth 16 # Modes "1680x1050" # EndSubSection #EndSection
Printer
An Epson Stylus Color C86 is used in this setup. It uses gutenprint (formerly gimp-print) for it's driver and can be setup via Firefox at http://localhost:631.
Authors
mbeisser - (Jan '08) Initial version completed.