Warning: this page was written in March 2007 and is now obsolete. Presently (2012) I use Debian GNU/Linux on a Dell Latitute E6500, a Dell Latitude E6220, and an Aleutia T1, and its works almost out of the box.
Dell offers the possibility to buy machines without any operating system. This is what I did with a Latitude D420 laptop. I installed Debian GNU/Linux testing/unstable (March 2007) by network install via a USB stick. The F12 keyboard key allows to enter the BIOS menu in order to boot from the stick. The Debian package linux-image-2.6-686 provided automatically a 2.6.18 Linux kernel via its dependencies. This kernel image is both SMP and ACPI capable, which is good for the Intel Core Duo CPU of the D420. It also provides a huge collection of loadable kernel modules. Like for most modern laptops, the integrated peripherals of the D420 are on PCI or USB or I2C buses. Debian works on the D420 almost out of the box, and minor additional efforts detailed in the sequel provide an even better support. However, perfection is still far away...
Hardware and integrated peripherals (see also the outputs section):
| Hardware Components | Debian GNU/Linux April 2007 kernel 2.6.18-4 |
Notes |
|---|---|---|
| Screen 12.1" Screen WXGA TFT LCD 1280 x 800 (Matte).
Video Intel Mobile 945GM/GMS/940GML Express video controller Up to 224MB of shared video memory (stolen from main RAM) Input Full-size keyboard with touchpad and pointing stick Wireless network Intel Pro Wireless 3945BG ACPI power suspend to RAM and to disk |
Works | See below |
|
CPU Intel Dual Core CPU (2 x Yonah U2005 @ 1.2GHz)
USB Intel 82801G (ICH7) Controller (USB UHCI, USB2 EHCI) RAM 1.5 GB of DDR-II-533 SDRAM HDD 1.8" Toshiba MK8009GAH 80 GB PATA Hard Disk (4200 RPM) Power 65W AC Adaptor and 9-Cells/85 WHr "Smart" Li-Ion battery Wired network Broadcom NetXtreme BCM5752 Gigabit (Tigon3) Sound Intel High Definition Audio controller (ICH7 HDA) PCMCIA Ricoh Co Ltd RL5c476 II CardBus yenta_socket |
Works | Out of the box |
|
Firewire Ricoh Co Ltd R5C552 IEEE 1394
Memcards Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro CD-RD/DVD External 24x Combo HL-DT-ST DVD+-RW GSA-T11N Consists in a D-Bay with a special USB plug |
Detected and probably works |
Not tested |
| Winmodem & IrDa | Not detected | Not tested |
Most peripherals are automatically detected via udev and the corresponding kernel modules are automatically loaded.
Suspend to ram and suspend to disk can be activated by the kpowersave applet (KDE), or via command line via powersave --suspend-to-disk, or even via the more crude s2disk command. The powersave method is better because it allows the automatic loading and unloading of kernel modules. The configutation is in /etc/powersave. It is not wise to use a direct echo in the /proc/ file system.
The acpid daemon manages the ACPI events, like lid (open and close), power button pressure or Fn-Esc key combination. The acpid daemon provides many scripts in /etc/acpid/ which are not really useful with the D420. However, the acpid deamon handles the ACPI events, which are thus available to the powersaver daemon via D-Bus and HAL.
Some modules need to be unloaded before suspend in order to avoid problems during the next suspend cycle. The corresponding lines in the /etc/powersave/sleep file are:
UNLOAD_MODULES_BEFORE_SUSPEND2DISK="tg3 sbp2" UNLOAD_MODULES_BEFORE_SUSPEND2RAM="tg3 sbp2"
The lid open and close events can be used for suspend to RAM. Here are some lines in /etc/powersave/events:
EVENT_BUTTON_LID_OPEN="switch_vt" EVENT_BUTTON_LID_CLOSED="suspend_to_ram"
Suspend to RAM is not directly accessible since the D420 is black listed, as pointed out by the s2ram command. To force suspend to RAM, one can adjust a variable in /etc/powersave/sleep:
SUSPEND2RAM_FORCE="yes"
There is an USB bug in powersave. Sometimes, the usbcore module is not removed and refuses to suspend. The message in /var/log/syslog is
suspend_device(): usb_generic_suspend+0x0/0xe4 [usbcore]() returns -16 Could not suspend device 2-2.3.2: error -16 Some devices failed to suspend
This problem is probably a bug in the kernel. A work around consists simply in removing the usbcore module. This is not possible if the filesystem /proc/bus/usb is mounted, even if no USB device is used. This problem can be solved by adding an usb step in /etc/powersave/events:
EVENT_GLOBAL_RESUME_SUSPEND2RAM="restore_after_suspend_to_ram usb-on" EVENT_GLOBAL_RESUME_SUSPEND2DISK="restore_after_suspend_to_disk usb-on" EVENT_GLOBAL_SUSPEND2RAM="usb-off prepare_suspend_to_ram screen_saver do_sus pend_to_ram" EVENT_GLOBAL_SUSPEND2DISK="usb-off prepare_suspend_to_disk screen_saver do_suspend_to_disk"
Here usb-on corresponds to the bash script /usr/lib/powersave/scripts/usb-on:
#!/bin/bash
# usb-on script
# first get helper functions (e.g. DEBUG, load_scheme, ...)
. "${0%/*}/helper_functions"
for m in usbcore ehci_hcd uhci_hcd; do modprobe $m; done
mount -t usbfs none /proc/bus/usb
$SCRIPT_RETURN $EV_ID 0 "USB fixup finished for $1"
EXIT 0
and usb-off to the bash script /usr/lib/powersave/scripts/usb-off:
#!/bin/bash
# usb-off script
# first get helper functions (e.g. DEBUG, load_scheme, ...)
. "${0%/*}/helper_functions"
for m in ehci_hcd uhci_hcd usbcore; do modprobe -r $m; done
umount /proc/bus/usb/
$SCRIPT_RETURN $EV_ID 0 "USB fixup finished for $1"
EXIT 0
Beware that these scripts do not handle mounted filesystems on USB devices. You must umount all USB keys etc before doing a suspend to RAM.
The ethernet network adapter is a Tigon3, reported by lspci as Broadcom Corporation NetXtreme BCM5752 Gigabit Ethernet PCI Express. The kernel module is named tg3. It works fine, exept for suspend, see above.
The wireless IEEE802.11g network adapter is an Intel Pro Wireless 3945BG. The corresponding kernel module is ipw3945. This module is not provided by the Debian standard kernel package. This chipset needs a firmware and an external daemon. One can install the following Debian packages: ipw3945-modules-2.6-686, firmware-ipw3945, ipw3945d. It works fine. The forthcoming next generation Linux Kernel wireless stack will probably greatly simplify and enhence the support for this chipset.
One can install the Debian package network-manager, which makes networking very cool. From the NetworkManager web page “ For both, Wireless LAN and Wired LAN, NetworkManager supports devices known to HAL. Unless working in offline mode, NetworkManager tries to keep the system connected at any time. For this, NetworkManager follows the following policy. Once started, NetworkManager asks HAL about available network interfaces. If a wired network interface with a carrier is found, NetworkManager connects to this. Either by DHCP (default) or by setting up previously defined static configuration. Later on, when KNetworkManager starts up, NetworkManager will expose its information about network devices and wireless networks found by scanning to the applet. At this point, if a user decides to unplug the wired connection, NetworkManager will not connect to an arbitrary wireless network. By default all available networks are untrusted. Only if a user decides to connect to a network manually once, this specific network n henceforth being marked as trusted. “
Here is my /etc/network/interfaces/ file:
auto lo iface lo inet loopback address 127.0.0.1 netmask 255.0.0.0 # allow-hotplug eth0 iface eth0 inet dhcp # allow-hotplug eth2 iface eth2 inet dhcp
One can also install the network-manager-kde Debian package which provides a KDE applet called KNetworkManager. The ESSID and WEP/WAP keys are stored by kwallet. Notice that the KDE wallet subsystem must be configured and enabled. One can safely remove the knemo, kwifimanager, and knetworkconf Debian packages.
The video controller is an Intel Mobile 945GM/GMS/940GML Express. The Debian package xserver-xorg-video-i810 provides a working automatic configuration in xorg.conf using the i810 driver of X.org. The package 915resolution provides a video mode vBIOS correction and enables the 1200x800 mode, very usefull for the wide screen of the D420.
You can switch between video modes with the xrandr command:
xrandr -s 1024x768 xrandr -s 1280x800
These commands are useful in scripts when connecting an external VGA video display. Aternatively, one can use an applet like KRandRTray provided by the kcontrol Debian package in order to switch between video modes by mouse. It seems that if you play too much with video mode switching, the resume after suspend can crash the machine.
The traditional Ctrl+Alt+Keypad-Plus and Ctrl+Alt+Keypad-Minus key combinations do not work. However, one can associate other key combinations to the X events XF86_Next_VMode and XF86_Prev_VMode, by using the xmodmap program.
The LCD brightness keys Fn-up and Fn-down work well, as well as the Fn-left key to automatically adjust the brightness. The brightness sensor is a small dark red square below the screen.
The D420 provides both touch pad and stick à la thinkpad. One can install the packages xserver-xorg-input-synaptics and ksynaptics. The touchpad pointer speed is slow and one can add these lines to the InputDevice section related to the touchpad in the /etc/X11/xorg file:
Option "MinSpeed" "0.8" Option "MaxSpeed" "0.8"
The Beryl 3D-Desktop works well on the Dell Latitude D420, without much efforts. Here are for instance some Beryl and VLC screenshots under KDE on my D420...
So how to install Beryl? One can start by adding few lines to /etc/modules to ensure the loading of AGP and DRI/DRM support for i915
intel_agp agpgart drm i915
This ensures the loading at boot time. You may now reboot your system or use directly modprobe by hand on each module listed above. Next, check that your /etc/X11/xorg.conf file looks like...
Section "Module"
# ...
Load "bitmap"
Load "ddc"
Load "extmod"
Load "freetype"
Load "record"
Load "int10"
Load "vbe"
Load "dri"
Load "dbe"
Load "glx"
EndSection
# ...
# various sections not displayed here
# ...
Section "Device"
Identifier "Intel Corporation Mobile 945GM/GMS/940GML Express"
Driver "i810"
BusID "PCI:0:2:0"
Option "DRI" "true"
Option "XAANoOffscreenPixmaps"
EndSection
Section "Screen"
# ...
Option "AddARGBGLXVisuals" "true"
DefaultDepth 24
# ...
EndSection
# ...
Section "ServerLayout"
# ...
Option "AIGLX" "true"
# ...
EndSection
# ...
Section "DRI"
Mode 0666
EndSection
Section "Extensions"
Option "Composite" "Enable"
EndSection
Next, install the Mesa OpenGL packages as follows.
sudo apt-get install libgl1-mesa-dri libgl1-mesa-glx libglu1-mesa mesa-utils xlibmesa-gl libxcomposite1
After restarting the X server / KDE session, just test OpenGL with glxinfo. Now, add the following line to your /etc/apt/source.list file:
deb http://debian.beryl-project.org/ etch main
and install the Beryl packages (aquamarine and emerald are Beryl window decorators for KDE):
wget http://ubuntu.beryl-project.org/root@lupine.me.uk.gpg -O- | sudo apt-key add - sudo apt-get install aquamarine beryl beryl-manager beryl-plugins beryl-settings beryl-settings-simple emerald emerald-themes
If you don't use sudo, just exec the commands above as root. Now you can restart your X server / KDE session and launch Beryl ! There is a docking applet called beryl-manager which can be found in the KDE System submenu. You can launch Beryl by launching this appel or by launching beryl. Your KDE session will remember this command and launch it automatically at log-on. Try Cltr-Alt-Arrows or Ctrl-Alt-LeftButton-MoveYourPointer or Ctrl-Alt-PgDown or Alt-MouseWheel, you will see! You will find may other fancy effects on the Beryl user guide web page. Actually, the CPU & RAM consumption of Beryl is reasonable. But beyond the proof of concept, one can decide to disable Beryl when running on batteries.
According to the Beryl project user guide, the AIGLX users of the i810 driver may find that they get better performance out of Beryl if they set their xservers default depth in their xorg.conf to 16. This will result in some stepping on gradients but is generally acceptable for most everything else. Consequently, one can replace DefaultDepth "24" by DefautDepth "16" in the /etc/X11/xorg.conf file. Note that a depth of n corresponds by definition to n bits per pixel (bpp), in other words to 2n colors per pixel, so approximately 10n*0.3 colors per pixel.
In case of problems due to the configuration or update with Beryl, the deletion of ~/.beryl* can help. In order to avoid possible display problems with Videolan (VLC), one may select the X11 output in Settings/Preferences/Video/OutputModules (you need to check the "Advanced options" checkbox to show it). Unfortunately, the X11 output of VLC is a little bit more CPU consuming...
For the Xine video engine used for instance by Kaffeine, one may use the Xshm output driver for rendering. This is valid when using the Xorg server with a Depth of 16 Bpp. With a Depth of 24 Bpp, the Xv output driver works fine.
For the MPlayer video engine used for instance by KPlayer, one may use the X11 output driver, or the Xv output driver like for Xine if Xorg is configured with a 24 Bpp.
By the way, you will find various multimedia Debian packages on the Debian-Multimedia repository. You can add the following line to your /etc/apt/source.list.
deb http://www.debian-multimedia.org testing main
You can add the GPG key of this repository by using the following command.
gpg --keyserver hkp://wwwkeys.eu.pgp.net --recv-keys 1F41B907 && gpg -a --export 1F41B907 | sudo apt-key add -
I haven't tried yet Metisse.
The chipset is an Intel HDA. It works quite well with the corresponding ALSA module. The sound volume buttons can be easily mapped as follows. One can add a file /etc/X11/Xsession.d/63xmodmap containing:
/usr/bin/xmodmap /etc/X11/xmodmap
and a file /etc/X11/xmodmap containing:
keycode 160 = XF86AudioMute keycode 174 = XF86AudioLowerVolume keycode 176 = XF86AudioRaiseVolume keycode 210 = XF86Sleep
Next, one can install the kmilo Debian package to take into account these X events under KDE.
The D420 has only one poor 1W mono speaker. However, the mini-jack output is stereo. There is also a microphone mini-jack input, useful for SIP.
For the Grub boot loader, one can use the 0x318 video mode by using the line kopt=root=/dev/hda1 ro vga=0x318 in /boot/grub/menu.lst. Do not forget to call the update-grub command!
The Debian packages i8kutils and gkrellm-i8k allow to get or set some specific informations related to Dell laptops like temperature, fans and power status. You need to load the i8k module, for instance by puting the name i8k in /etc/modules.
Bluetooth and various other optional non present peripherals can be disabled via BIOS options. This turns off some few USB errors at boot time.
The external CD/DVD reader/burner is recognized as a USB device. Here is the message in /var/log/messages after plug-in the cable.
usb 1-6: new high speed USB device using ehci_hcd and address 3 usb 1-6: configuration #1 chosen from 1 choice Initializing USB Mass Storage driver... scsi0 : SCSI emulation for USB Mass Storage devices usbcore: registered new driver usb-storage USB Mass Storage support registered. Vendor: HL-DT-ST Model: DVD+-RW GSA-T11N Rev: A103 Type: CD-ROM ANSI SCSI revision: 00 sr0: scsi3-mmc drive: 24x/24x writer cd/rw xa/form2 cdda tray Uniform CD-ROM driver Revision: 3.20 sr 0:0:0:0: Attached scsi generic sg0 type 5
Beware: add your username to the groups dialout, cdrom, floppy, audio, video, plugdev, netdev, powerdev. Otherwise, you will experience problems with the corresponding peripherals and automatic mecanisms.
VGA output, Firewire (IEEE1394), PCMCIA card reader, SD-Card reader, IrDa, Docking station, external CD/DVD reader and burner. One can notice that udev loads automatically several modules related to these aspects: mmc_core sdhci (for SD-Card), pcmcia_core pcmcia yenta_socket rsrc_nonstatic (for PCMCIA), sbp2 eth1394 ohci1394 ieee1394 (for Firewire).
When booting with the wifi switch on (i.e. radio off) the system may hang during the boot sequence. Additionally, it seems that the ipw3945 module does not handle the off/on cycle correctly, and one may reload the kernel module (for instance with modprobe) in order to reenable the wifi interface.
Modem not shown explicitely by lspci or lsusb. One can probably use alternatively the hwinfo package. It is probably a Conexant Winmodem. One can try to use the hsfmodem linmodem software package. Beware that there are currently some problems with sound and suspend.
After a resume, the sound chipset does not produce any sound and one must turn it off and on for instance by using a mixer like kmix. The networkmanager is also in off-line mode after a resume, and must be turned on for instance via KNetworKmanager. A possible workaround is to automatically call at resume the D-Bus script /etc/dbus-1/event.d/*NetworkManager* or to use
dbus-send --system --dest=org.freedesktop.NetworkManager \ /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.wake
Add support for the Fn-F1 key combination and for the wifi killer switch. The first one does not give any event. The wifi killer is noticed by the system (see Bouttier's page on the D420).
00:00.0 0600: 8086:27a0 (rev 03) 00:02.0 0300: 8086:27a2 (rev 03) 00:02.1 0380: 8086:27a6 (rev 03) 00:1b.0 0403: 8086:27d8 (rev 01) 00:1c.0 0604: 8086:27d0 (rev 01) 00:1c.1 0604: 8086:27d2 (rev 01) 00:1c.2 0604: 8086:27d4 (rev 01) 00:1d.0 0c03: 8086:27c8 (rev 01) 00:1d.1 0c03: 8086:27c9 (rev 01) 00:1d.2 0c03: 8086:27ca (rev 01) 00:1d.3 0c03: 8086:27cb (rev 01) 00:1d.7 0c03: 8086:27cc (rev 01) 00:1e.0 0604: 8086:2448 (rev e1) 00:1f.0 0601: 8086:27b9 (rev 01) 00:1f.1 0101: 8086:27df (rev 01) 00:1f.3 0c05: 8086:27da (rev 01) 02:01.0 0607: 1180:0476 (rev b4) 02:01.1 0c00: 1180:0552 (rev 09) 02:01.2 0805: 1180:0822 (rev 18) 09:00.0 0200: 14e4:1600 (rev 02) 0c:00.0 0280: 8086:4222 (rev 02)
-[0000:00]-+-00.0 Intel Corporation Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub
+-02.0 Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller
+-02.1 Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller
+-1b.0 Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller
+-1c.0-[0000:0b]--
+-1c.1-[0000:0c]----00.0 Intel Corporation PRO/Wireless 3945ABG Network Connection
+-1c.2-[0000:09]----00.0 Broadcom Corporation NetXtreme BCM5752 Gigabit Ethernet PCI Express
+-1d.0 Intel Corporation 82801G (ICH7 Family) USB UHCI #1
+-1d.1 Intel Corporation 82801G (ICH7 Family) USB UHCI #2
+-1d.2 Intel Corporation 82801G (ICH7 Family) USB UHCI #3
+-1d.3 Intel Corporation 82801G (ICH7 Family) USB UHCI #4
+-1d.7 Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller
+-1e.0-[0000:02-06]--+-01.0 Ricoh Co Ltd RL5c476 II
| +-01.1 Ricoh Co Ltd R5C552 IEEE 1394 Controller
| \-01.2 Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter
+-1f.0 Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge
+-1f.1 Intel Corporation 82801G (ICH7 Family) IDE Controller
\-1f.3 Intel Corporation 82801G (ICH7 Family) SMBus Controller
Bus# 5
`-Dev# 1 Vendor 0x0000 Product 0x0000
Bus# 4
`-Dev# 1 Vendor 0x0000 Product 0x0000
Bus# 3
`-Dev# 1 Vendor 0x0000 Product 0x0000
Bus# 2
`-Dev# 1 Vendor 0x0000 Product 0x0000
`-Dev# 2 Vendor 0x413c Product 0xa005
`-Dev# 3 Vendor 0x0b97 Product 0x7761
`-Dev# 4 Vendor 0x0b97 Product 0x7762
Bus# 1
`-Dev# 1 Vendor 0x0000 Product 0x0000
rocessor : 0 vendor_id : GenuineIntel cpu family : 6 model : 14 model name : Genuine Intel(R) CPU U2500 @ 1.20GHz stepping : 8 cpu MHz : 800.000 cache size : 2048 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc pni monitor vmx est tm2 xtpr bogomips : 2397.64 processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 14 model name : Genuine Intel(R) CPU U2500 @ 1.20GHz stepping : 8 cpu MHz : 800.000 cache size : 2048 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc pni monitor vmx est tm2 xtpr bogomips : 2394.77
Module Size Used by uhci_hcd 21164 0 ehci_hcd 28136 0 usb_storage 71840 0 usbcore 112644 4 uhci_hcd,ehci_hcd,usb_storage arc4 2112 1 ieee80211_crypt_wep 5056 1 binfmt_misc 10984 1 cpufreq_ondemand 6636 1 cpufreq_userspace 4448 0 cpufreq_powersave 1920 0 speedstep_centrino 8384 2 freq_table 4576 1 speedstep_centrino ipv6 226016 22 button 6672 0 ac 5188 0 battery 9636 0 dm_snapshot 15552 0 dm_mirror 19152 0 dm_mod 50232 2 dm_snapshot,dm_mirror i915 17600 3 drm 61332 4 i915 i8k 6072 1 sbp2 20840 0 scsi_mod 124168 1 sbp2 loop 15048 0 joydev 9088 0 tsdev 7520 0 pcmcia 34140 0 ipw3945 179972 1 snd_hda_intel 17332 4 snd_hda_codec 137856 1 snd_hda_intel i2c_i801 7468 0 yenta_socket 24460 1 rsrc_nonstatic 11840 1 yenta_socket ieee80211 29416 1 ipw3945 psmouse 35016 0 snd_pcm 68676 3 snd_hda_intel,snd_hda_codec snd_timer 20996 2 snd_pcm snd 47012 10 snd_hda_intel,snd_hda_codec,snd_pcm,snd_timer soundcore 9248 1 snd i2c_core 19680 1 i2c_i801 sdhci 16844 0 mmc_core 23168 1 sdhci eth1394 18212 0 pcmcia_core 36852 3 pcmcia,yenta_socket,rsrc_nonstatic ieee80211_crypt 5952 2 ieee80211_crypt_wep,ieee80211 snd_page_alloc 9640 2 snd_hda_intel,snd_pcm serio_raw 6660 0 rtc 12372 0 intel_agp 21148 1 pcspkr 3072 0 firmware_class 9600 2 pcmcia,ipw3945 agpgart 29896 3 drm,intel_agp evdev 9088 2 ext3 119240 2 jbd 52456 1 ext3 mbcache 8356 1 ext3 ide_disk 14848 4 generic 5476 0 [permanent] ehci_hcd 28136 0 piix 9444 0 [permanent] uhci_hcd 21164 0 ide_core 110504 4 usb_storage,ide_disk,generic,piix tg3 94948 0 ohci1394 30800 0 ieee1394 86904 3 sbp2,eth1394,ohci1394 usbcore 112644 3 ehci_hcd,uhci_hcd thermal 13608 0 processor 28840 2 speedstep_centrino,thermal fan