Force Feeding Ubuntu
I was unable to get a clean install with a default ThinkPad W500 configuration and a 32 bit Ubuntu 8.10 downloaded ISO burned to CD. I referenced this post from the ubuntu forums which allowed me to complete the Ubuntu installation.
Go into BIOS and change your display settings to:
- Default Primary Video Device = PCI Express
- Boot Display Device = ThinPad LCD
- Graphics Device = Discrete Graphics
- OS Detection for Switchable Graphics = Disabled
The W500 has switchable graphics and Ubuntu is unable to determine which graphics card to use without these BIOS settings to point the way.
- GUI: Yes
- Wireless: Yes
- My wireless did not work out of the box with a 64-bit 8.10 installation. I had to deactivate the default driver (by going to System->Administration->Hardware drivers and deactivating Support for Atheros 802.11 wireless cards). Then, it was only a matter of grabbing the madwifi sources, doing make, sudo make install and sudo modprobe ath_pci. Also, don't forget to place the ath_pci module on /etc/modules so it gets loaded everytime you boot up. -Compassnico
- W500 has multiple wireless options. The Intel AGN 5100 (and reportedly the AGN 5300, although I haven't tested) works out of the box with 32 bit and 64 bit Ubuntu 8.10 (kernel 2.6.27). It does not work with Ubuntu 8.04 (kernel 2.6.24) or earlier kernels. Don't know about kernels between 2.6.24 and 2.6.27, somewhere between the wi-fi for this card was implemented and/or fixed in the kernel. -gatman3
- wireless(as well as ethernet) support was added in 2.6.27 with the e1000e and iwlagn drivers. But beware, kernel versions before 2.6.27-r4 can brick the ethernet by overwriting the eeeprom -nils.schlupp
- Trackpad: No (Yes when I used TrackPoint under Ubuntu 8.10 using HAL)
Failures and Annoyances
- Skype: Isn't working. I believe its a microphone issue.
- The regular Skype build did not work at all (neither sound input nor output) for me, but I installed the skype-static-oss package from the medibuntu repository and now everything works, although my mic's volume is a bit low. -Compassnico
(User gatman3 reports being able to get an entirely clean out-of-the-box install on W500 model 4062 with Intel AGN 5100 wi-fi using the released Ubuntu 8.10, both 32 bit and 64 bit. Did not have to set Default Primary Video Device to PCI Express. Setting Graphics Device to Integrated (Intel) results in Xorg automatically using the Intel driver, although the default resolution was 1680x1050, not 1920x1200 as my model supports. Setting Graphics Device to Discrete (ATI) results in Xorg automatically using the Radeon driver. For ATI graphics, I recommend switching to the proprietary fglrx driver, which provides very good 3d acceleration, suspend/hibernate work IF Desktop Effects and Xv video playback are not used, and consumes significantly less power - although slightly more than the Intel graphics).
Slackware 12.2 (with 2.6.28)
After changing the display setting as stated above and installing Slackware 12.2 with the default huge-smp-184.108.40.206-smp kernel, I was not able to get wireless to work. It appears the reason is probably due to the fact that /usr/src/linux-220.127.116.11/drivers/net/wireless/iwlwifi/iwl-agn.c does not have an entry for my wireless card (AGN 5350).
03:00.0 Network controller: Intel Corporation Unknown device 423b
Instead of adding the entry and hoping, I decided that upgrading the kernel would probably work better (since I was going to have to compile one anyways).
Things to keep in mind when upgrading the kernel:
- If you plan on using fglrx (ATI's closed source driver, I did) then make sure DRM is a module and not compiled in
- Device Drivers → Graphics support → [M]Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) (DRM)
- The sleep/hibernate scripts that I found and tweeked suggest removing the uhci_usb beforehand, so make a module
- Device Drivers → USB support → Support for Host-side USB → [M]UHCI HCD (most Intel and VIA) support (USB_UHCI_HCD)
- If you plan on using hibernate, it can't hurt to tell your kernel where your swap is (I don't know what happens if you don't)
- Power management and ACPI options → Default resume partitionHibernation (aka 'suspend to disk') (PM_STD_PARTITION)
- If you have >3GB of ram then you'll need to make sure your kernel can support it
- Processor type and features → High Memory Support → [Y]64GB (HIGHMEM64G)
For some reason I had to rerun mkswap on my swap partition after changing this. Selecting 4GB here gave me only 3GB of physical memory and 1GB of swap
After the kernel upgrade the wireless should work, you may have to put updated firmware (iwlwifi-5000-1.ucode) in /lib/firmware.
The next step for me was installing fglrx. I used Catalyst 8.12 because 8.10 did not seem to compile with the new kernel, unfortunately 8.12 is almost completely garbage. Despite the fact that getting DRI/Compiz to work is easy and possible, using 8.12 only allowed me to have one instance of X open (opening a second with fglrx causes an error). Using VESA for the second instance works for a bit, until you switch away and come back, then it appears to have screwed up its color depth. Also, closing my xserver and restarting it requires me to either
# modprobe -r fglrx before restarting, or receive an error message followed by a crash, whichever I feel like.
The volume buttons were the next hump to get over. Where as the mute button muted the system, the volume up/down buttons didn't work. Further more
# echo "up" > /proc/acpi/ibm/volume and
# echo "down" > /proc/acpi/ibm/volume did nothing. Poking around it *appears* that Lenovo made them keyboard buttons instead of controlling a hardware mixer (which is gone now?). I ended up looking for a program to watch my keyboard and run commands based on keys. I stumbled upon esekeyd. It seems to work fine, my esekeyd config file looks as such:
VOLUMEDOWN:/usr/bin/amixer set Master 2dB-
VOLUMEUP:/usr/bin/amixer set Master 2dB+
Annoyingly when in a real console (Vtx) the volume down button worked, but produced a '~' on the command line. Unsatisfied and lazy, I edited /usr/share/kbd/keymaps/i386/qwerty/defkeymap.map.gz and cleared the entries for 114 (volume down) and 115 (volume up), which were the values I got from
$ showkey. Then over to /etc/rc.d/rc.local to put in
/bin/loadkeys -d to make it load the keymap I just edited.
The multimedia keys weren't really a priority for me, but since it was so easy, I figured I'd tell my window manager about them anyways. Being lazy I just put them in the default /usr/X11R6/lib/X11/xinit/.Xmodmap
keycode 234 = XF86Back
keycode 233 = XF86Forward
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 153 = XF86AudioNext
keycode 144 = XF86AudioPrev
The top two keys being the page left and right keys (no clue what they are really called, but they are with the arrow keys), the bottom four the Fn+Arrow audio keys. All values came from
At this point I was getting increasingly lazy, so instead of making separate acpi rules for sleep and hibernate, I just edited /etc/acpi/acpi_eventhandler.sh. It ended up looking like this:
# Default acpi script that takes an entry for all actions
case "$1" in
case "$2" in
power) /sbin/init 0
*) logger "ACPI action $2 is not defined"
case "$2" in
case "$5" in
00001004) #Sleep button Fn+F4
0000100c) #Hibernate button Fn+F12
logger "ibm / hotkey $5 undefined"
logger "IBM $1 / $2 / $3 / $4 / $5 / is not defined"
logger "ACPI group $1 / action $2 is not defined"
The sleep script /etc/acpi/sleep.sh was completely ripped off from How to configure acpid. For /etc/acpi/hibernate.sh I just reused sleep by changing "mem" into "disk" and had it disconnect me from the network before going down.
At this point I have confirmed working
- Graphics/DRI with fglrx
- Volume/multimedia buttons
- Wireless ethernet
- Wired ethernet
- Sleep and hibernate
- The "nub"
Things that don't appear to work right now
- The fingerprint reader, looks like there aren't Linux drivers for it yet (January 8th, 2008)
What I have not tried
- SD card reader
- Vga out
- DisplayPort out
- Microphone/ headphone
- The touch pad, I hate them so much that the first thing I did after receiving the laptop was disable it, before even booting it once.