Linux on a Dell X300

This update is long in coming, mostly because I have been enjoying the new laptop (and using it to, you know.. work). Linux seems to be working almost entirely.

Distribution

I am running Debian testing/unstable, mostly because I needed certain things that only the latest Debian Beta Installer supported – namely, the broadcom tg3 NIC driver and better support for my high-speed USB CDROM. More about that later. The new beta installer is quite impressive. Give it a try if you haven’t. The only weird issue I have run into is that if you enter into the 2.6 kernel install, everything works great except that, in fact, it still installs a 2.4.x kernel. I’m sure that will get worked out in future releases. It is beta, after all.

Kernel

First, let me say that my dedication to the 2.4.x kernel took a hit with this laptop. I spent a lot of time fighting with it before moving to 2.6.6 and almost everything just works. Save yourself some time. The x300 has enough whacky new hardware that 2.6.x is a much better fit.

So, without further ado, here’s what works and what doesn’t:

ACPI
I might as well start with the first abject failure. I couldn’t get ACPI to work for shit. Some things work (the processor, for one) marginally but the rest of the modules bombed out with odd errors. I tried various combinations of patches and DSDT replacements as per advice on acpi.sourceforge.net, but nothing seemed to help. To make matters worse, the enabling of ACPI in the kernel in fact disables the dell “function” keys on the keyboard. This includes things like dimming/brightening the LCD, turning the wireless antenna on/off, switching from CRT to LCD, etc. These all now simply handed unhandled scancodes to the kernel. Not having those was unacceptable so my kernel currently has ACPI disabled.
APM
APM is the older alternative to ACPI for power management. There is no APM support in the BIOS (A06 as of writing) for the Dell X300. Bummer. I have no access in software to the battery/AC plug status. However, Dell does include a handy-dandy LED button on the back to see the strength of the battery so this is not a huge deal.
CPU Scaling
Although ACPI is the usual method for handling CPU frequency scaling (for power-saving), the 2.6.x linux kernel actually has support for this independently of it (CONFIG_CPU_FREQ, et al under the power management features). cpudynd is handy for toggling this based on usage of the laptop, but unfortunately it can’t be smart enough to toggle it based on the AC being plugged in or not because, well, no ACPI. Still, you can toggle it manually with echo “powersave” > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Synaptics touchpad
The Synaptics touchpad is detected by the kernel fine, and works fine as “PS/2” in XFree86, however for the touchpad tap functionality you’ll want the touchpad driver for XFree86 to use instead of PS/2.
USB
USB 2.0 ( CONFIG_USB_EHCI_HCD) support works well in 2.6.x, unlike in 2.4.x, where it is still experimental and tends to crash a lot. ehci_hcd is necessary for my USB CDROM, and I also load uhci_hcd and usb-storage for my USB keychain drive, which I use via autofs. (More about this here.) For device detection and module loading, I switched from usbmgr to hotplug, which seems to work better with 2.6.
Broadcom BCM5705M 10/100/1000 NIC
This works great with the Broadcom Tigon3 driver (CONFIG_TIGON3). No problem.
Wireless
Dell gives you the option of going with their Dell mini-PCI wireless cards or Intel’s 2100 or 2200. I opted for the Intel 2200, because it does 802.11g as well as b, however the downside is that there is no native driver for this card in Linux yet. There is a project already in the works to write them, but it’s only a few weeks old and much less mature than its sister project for the intel 2100.</p>

The solution is the very clever idea of writing a wrapper for the windows driver itself. There are two implementations of this idea: ndiswrapper, which is free, and Linuxant Driverloader, which is not. Both of them require the Windows drivers, which you can find here.

I used ndiswrapper with success for a while, however it didn’t work after loading the module until I set the ESSID and turned the antenna off and then back on (with the Dell function key – you can see why ACPI disabling this was particularly crippling now). It also didn’t work with WEP. I simply got “invalid argument” trying to set the WEP key.

Both of these issues were fixed with the Linuxant driverloader wrapper, which I am using the 30-day free trial of, but will definitely be purchasing. </dd>

Sound
The sound card in the Dell x300 is ac97 compatible and works fine with the alsa support in 2.6.x for the intel 810 chipset (CONFIG_SND_INTEL8X0). One weird thing I haven’t quite figured out yet is why xmix seems to use /dev/mixer fine but gkrellm’s volume plugin complains about it. I haven’t messed with it because dealing with sound in Linux generally makes me want to open my wrists.</dl>

You can find my kernel config here.

XFree86

I am amazed these days how well running “X -configure” seems to work. The resulting config is what I started with, and it was a simple matter of fixing the mouse pointer (first as PS/2 and later as the synaptics driver) and I was up and running.

My XF86Config-4.