Installing Ubuntu 9.10 (Karmic Koala) on a ThinkPad X61

From ThinkWiki
Revision as of 12:27, 26 December 2009 by Thosch66 (Talk | contribs) (Increasing battery life: pakage sysfsutil must be installed for using /etc/sysfs.conf)
Jump to: navigation, search

I installed Ubuntu 9.10 on the same ThinkPad X61 that I installed Ubuntu 8.10 on last year.

This time I installed from DVD+R using the Ultrabay Slim Multi-Burner III Drive in the UltraBase X6.

DMI info for this model

# dmidecode -s system-manufacturer
LENOVO
# dmidecode -s system-product-name
7673CTO
# dmidecode -s system-version
ThinkPad X61

Problem: Kernel misdetects memory

Right at the beginning there was an important obstacle to overcome. The installed kernel would panic on boot.

I ran memtest+ from the installation disc to see if I had a memory problem. It reported errors above 4 GiB. That's odd, because I only have 4 GiB of RAM installed.

I surmised that the new kernel, version 2.6.31-14-generic-pae, errs in reckoning the amount of installed RAM. And indeed, the solution to the kernel panic was to add mem=4096M to the kernel boot parameter list.

Suspend & resume

(In Intrepid suspend & resume was unusable because the machine frequently locked up sometime after resume. Furthermore the WLAN card was unusable after resume.)

Having tried it repeatedly I can report that in Karmic suspend & resume does work more or less correctly. After resume the Atheros WLAN card is re-enabled and NetworkManager reconnects to my wireless network. That's progress!

There are still a couple of glitches, though.

  • Once I had to enter my password twice on resume. The password dialog appeared as usual with a black background, but on this one occasion it did not disappear as usual; instead the background was replaced by the desktop with panels which did not respond until I entered my password into the dialog box a second time. Weird.
  • If suspended while playing an audio disk, on resume audio play does not continue. Instead the audio disk is detected as a new disk and the user is invited to start the music player, even though there is already a music player process running.

Docking

Docking

The ThinkPad X61 can be docked in an UltraBase X6 in which case the X61 can use the ports and drives in the UltraBase.

Undocking

Unlike with the previous versions of Ubuntu the X61 can be removed from the UltraBase X6 without danger of locking up. Formerly, drives installed in the Ultrabay had to be deleted before undocking in order to prevent a hard lockup, but now nothing has to be done to prevent a hard lockup on undock. That is progress.

It does seem, however, that the "prepare to undock" button has to be pressed before undocking, otherwise USB devices connected to the UltraBase will not work after redocking.

After pressing the "prepare to undock" button the USB devices connected to the docking station and drives installed in the UltraBase's Ultrabay cease to function—as expected. However, a monitor connected to the docking station's video port continues to function. The desktop remains the same size even after physical undocking; windows that were visible on the external monitor become invisible.

I haven't done more thorough testing yet; e.g., I haven't checked to see what happens if, when undocking, volumes are mounted on devices connected to the UltraBase.

Redocking

After redocking, USB devices, external monitors and UltraBase drives work again. Nice.

Problem: Display configuration not restored on redock

However, there is a bug. After redocking the display is refreshed and the monitors do not have their original relative positions; furthermore the display appearance is different—different icons, etc.—as if the wrong theme is selected. Running System | Preferences | Appearances (without doing anything further) suffices to restore the display configuration.

Contents of /sys/devices/platform/dock.*/

Under /sys/devices/platform there are directories dock.0 through dock.3 with these contents:

/sys/devices/platform$ ls -l dock.0
total 0
-r--r--r-- 1 root root 4096 2009-11-22 18:59 docked
-r--r--r-- 1 root root 4096 2009-11-22 19:22 flags
-r--r--r-- 1 root root 4096 2009-11-22 19:22 modalias
drwxr-xr-x 2 root root    0 2009-11-22 19:22 power
lrwxrwxrwx 1 root root    0 2009-11-22 18:59 subsystem -> ../../../bus/platform
-r--r--r-- 1 root root 4096 2009-11-22 19:22 type
-rw-r--r-- 1 root root 4096 2009-11-22 19:59 uevent
-r--r--r-- 1 root root 4096 2009-11-22 19:22 uid
--w------- 1 root root 4096 2009-11-22 19:22 undock

After pressing the "prepare to undock" button on the UltraBase the content of two of the "docked" files changes.

content of /sys/devices/platform/dock.n/ files
n type content of docked when docked content of docked after pressing "prepare to undock" button
0 dock_station 1 0
1 battery_bay 0 0
2 ata_bay 1 0
3 ata_bay 1 1

On the other hand, if the X61 is removed from the UltraBase without pressing the "prepare to undock" button the content of the docked files remains the same as when the machine was docked.

Keys

Problem: Zoom key not seen by X

The "Zoom" key (Fn-Space) cannot be assigned a function in GNOME.

The key combination is seen and reported by ACPI

$ acpi_listen
ibm/hotkey HKEY 00000080 00001014

but it does not show up in the output of input-events.

Steve Langasek wrote on Ubuntu bug report log 217504:
X can only handly 256 distinct keycodes due to a protocol limitation, and due to evdev the keycodes are now standardized to match the Linux input layer - with no keycode below 256 that could reasonably be substituted for KEY_ZOOM.

Bug report: https://bugs.launchpad.net/ubuntu/hardy/+source/linux/+bug/267682

Table of keycodes for special keys and key combinations in Karmic

References:

The suffix "(*)" indicates that the value has changed since Ubuntu 8.10.

Key combination Extra function symbol Scan code
(showkey -s)
(hex)
Linux key code
(showkey -k)
Input event
(input-events)
... on input device(*) ACPI event
(acpi_listen)
HAL event (lshal -m) X event
(xev)
Keyboard Shortcuts name
⟦◁̸ (loudspeaker icon with stroke) down: e0 20
up: e0 a0
113 KEY_MIN_INTERESTING 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = mute 121 XF86AudioMute
⟦◁ ▾ (loudspeaker icon, down arrow) down: e0 2e
up: e0 ae
114 KEY_VOLUMEDOWN 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = volume-down 122 XF86AudioLowerVolume
⟦◁ ▴ (loudspeaker icon, up arrow) down: e0 30
up: e0 b0
115 KEY_VOLUMEUP 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = volume-up 123 XF86AudioRaiseVolume
ThinkVantage down: e0 1f e0 9f 148 KEY_PROG1 (0x94) 10 ibm/hotkey HKEY 00000080 00001018 computer_logicaldev_input_3 condition ButtonPressed = prog1 156 XF86Launch1
Fn up: e0 63 e0 e3 143 KEY_WAKEUP 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = wake-up 151 XF86WakeUp
Fn-F1 (none) 466 KEY_FN_F1 (0x1d2) 10 ibm/hotkey HKEY 00000080 00001001 (none) (none) (none)
Fn-F2 (padlock) down: e0 12 e0 92 152 KEY_SCREENLOCK (0x98) 10 ibm/hotkey HKEY 00000080 00001002 computer_logicaldev_input_3 condition ButtonPressed = coffee 160 XF86ScreenSaver
Fn-F3 (battery) down: e0 71 e0 f1 236 KEY_BATTERY (0xec) 10 ibm/hotkey HKEY 00000080 00001003 computer_logicaldev_input_3 condition ButtonPressed = battery 244 XF86Battery
Fn-F4 down: e0 5f e0 df
(but sometimes nothing?)
142 KEY_SLEEP (0x8e) 10 ibm/hotkey HKEY 00000080 00001004 computer_logicaldev_input_3 condition ButtonPressed = sleep 150 XF86Sleep
Fn-F5 (radiating computer) down: e0 73 e0 f3 238 KEY_WLAN (0xee) 10 ibm/hotkey HKEY 00000080 00001005 computer_logicaldev_input_3 condition ButtonPressed = wlan 246 XF86WLAN
Fn-F6 (none) 471 KEY_FN_F6 (0x1d7) 10 ibm/hotkey HKEY 00000080 00001006 (none) (none) (none)
Fn-F7 (screen, line, computer) down: e0 56 e0 d6 227 KEY_SWITCHVIDEOMODE (0xe3) 10 ibm/hotkey HKEY 00000080 00001007 computer_logicaldev_input_3 condition ButtonPressed = switch-videomode 235 XF86Display
Fn-F8 (trackpoint, line, trackpad) down: e0 79 e0 f9 192 KEY_F22 (0xc0) 10 ibm/hotkey HKEY 00000080 00001008 computer_logicaldev_input_3 condition ButtonPressed = f22 200 0xc8
Fn-F9 (computer) ⏏ down: 6f ef 194 KEY_F24 (0xc2) 10 ibm/hotkey HKEY 00000080 00001009 computer_logicaldev_input_3 condition ButtonPressed = f24 202 0xc9
Fn-F10 down: e0 63
up: e0 e3
143 KEY_WAKEUP 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = wake-up 151 XF86WakeUp
Fn-F11 (none) 476 KEY_FN_F11 (0x1dc) 10 ibm/hotkey HKEY 00000080 0000100b (none) (none) (none)
Fn-F12 (screen) ▸(diskpack) down: e0 25 e0 a5
(but sometimes nothing?)
205 KEY_SUSPEND (0xcd) 10 ibm/hotkey HKEY 00000080 0000100c computer_logicaldev_input_4 condition ButtonPressed = hibernate 213 XF86Suspend (*)
Fn-Home ☀▴ down: e0 54 e0 d4 225 KEY_BRIGHTNESSUP (0xe1) 6 video LCD0 00000086 00000000 computer_logicaldev_input_0 condition ButtonPressed = brightness-up 233 XF86MonBrightnessUp
Fn-End ☀▾ down: e0 4c e0 cc 224 KEY_BRIGHTNESSDOWN (0xe0) 6 video LCD0 00000087 00000000 computer_logicaldev_input_0 condition ButtonPressed = brightness-down 232 XF86MonBrightnessDown
Fn-PgUp (illuminated overhead lamp) (none) (none) (none) (none) (none) (none) (none) (none)
Fn-Space (screen with magnifying glass, i.e., "zoom" symbol) (none) 372 KEY_ZOOM (0x174) 10 ibm/hotkey HKEY 00000080 00001014 computer_logicaldev_input_4 condition ButtonPressed = zoom (none) (none)
Fn- (barred right arrowhead, i.e., "next" symbol) down: e0 19
up: e0 99
163 KEY_NEXTSONG 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = next-song 171 XF86AudioNext
Fn- (right arrowhead, double bar, i.e., "play/pause" symbol) down: e0 22
up: e0 a2
164 KEY_PLAYPAUSE 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = play-pause 172 XF86AudioPlay
Fn- (barred left arrowhead, i.e., "prev" symbol) down: e0 10
up: e0 90
165 KEY_PREVIOUSSONG 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = previous-song 173 XF86AudioPrev
Fn- ∎ ("stop play" symbol) down: e0 24
up: e0 a4
166 KEY_STOPCD 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = stop-cd 174 XF86AudioStop
◂ ⎗ (left arrowhead, page icon) down: e0 6a
up: e0 ea
158 KEY_BACK 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = back 166 XF86Back
⎘ ▸ (page icon, right arrowhead) down: e0 69
up: e0 e9
159 KEY_FORWARD 4 (none) platform_i8042_i8042_KBD_port_logicaldev_input condition ButtonPressed = forward 167 XF86Forward
On UltraBase X6
(right arrowhead)
down: e0 56
up: e0 d6
227 KEY_SWITCHVIDEOMODE (0xe3) 6 video VID 00000080 00000000 platform_dock_0 property info.docked = false
computer_logicaldev_input_0 condition ButtonPressed = switch-videomode
235 ?
(*) /dev/input/eventn
n name
0 "Power Button"
1 "Lid Switch"
2 "Sleep Button"
3 "Macintosh mouse button emulation"
4 "AT Translated Set 2 keyboard"
5 "Microsoft Comfort Curve Keyboard"
6 "Video Bus"
7 "Microsoft Comfort Curve Keyboard"
8 "Logitech Trackball"
9 "hdaps"
10 "ThinkPad Extra Buttons"
11 "TPPS/2 IBM TrackPoint"
12 "HDA Digital Beep"

Hotkey mask when the above table was compiled:

$ cat /sys/devices/platform/thinkpad_acpi/hotkey_mask
0x008c7fff
$ cat /sys/devices/platform/thinkpad_acpi/hotkey_all_mask
0x00ffffff
$ cat /sys/devices/platform/thinkpad_acpi/hotkey_recommended_mask
0x008c7fff
$ cat /sys/devices/platform/thinkpad_acpi/hotkey_report_mode
1


Compare Default meanings of special keys.

The tp-smapi module

Adding the tp-smapi module

$ sudo aptitude install tp-smapi-source
$ sudo module-assistant build tp-smapi-source
$ sudo module-assistant install tp-smapi-source
$ sudo modprobe -a thinkpad_ec tp_smapi hdaps

Edit the file /etc/modules to add these lines:

 thinkpad_ec
 tp_smapi
 hdaps

Ubuntu 9.10 contains version 0.40 of tp-smapi.

There is currently (19 November 2009) no hdaps-utils package in Karmic and so no hdaps-gl application.

Increasing battery life

I am advised that, to make the battery cells last longer by reducing the number and depth of charge cycles, the charge thresholds should be set as follows.

Edit /etc/sysfs.conf to add the lines:

 # Make battery live longer
 devices/platform/smapi/BAT0/start_charge_thresh = 50
 devices/platform/smapi/BAT0/stop_charge_thresh = 90

The pakage sysfsutil must be installed for using /etc/sysfs.conf.

To effect the change either reboot or do:

$ sudo su 
# echo 50 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
# echo 90 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh

Sound

Sound generally works well.

Problem: No beep

After installation the system beep does not work. In Intrepid this could be fixed by starting the Volume Control application and unmuting Beep. In Karmic that application does not appear to exist so I don't know how to unmute the beep.

is currently a discussion on the linux-thinkpad mailing list about this problem. Stay tuned.