Stuck keys

From OLPC
Jump to navigation Jump to search
This page is about keys sticking on an XO keyboard when you don't want them to. For the X accessibility feature, see stickykeys.

It has been reported (Trac #5658) that some XOs experience sticky or broken keys.

Apparently, the left ALT key is usually affected.

Why this happens

This is not a problem in increased "stickiness", it is a problem of ineffective insulation between the two conductive membranes. There are several problems with the keyboard manufacture that can cause this problem. One is a mis-registration of the different membranes making up the keyboard. While there are several mechanical pins to maximize registration, a slight warping of the bottom layer (which is stuck to a metal plate) can still occur. Even if not mis-registered, the slight buckling of the bottom membrane which results can cause a sticky key. This problem was addressed in pre-production, and hasn't been seen on dissected failing production units.

Another likely hypothesis is the spacing/insulating compound which is placed between the keyboard membranes is inadequate around certain keys. The bottom membrane contains a serpentine array of traces which are shorted out by contacts attached to the upper membrane during a key press. There is a printed pattern of rubbery glue which separates the two membranes and holds the contacts apart when the key is not pressed. This rubbery layer is laid out into 3mm wide linear traces between key rows, and as 2mm, diamond shaped dots, or 0.5 mm dots internal to the key. Most keys have an array of 4 contact dots with a 2mm, diamond shaped spot of glue directly between all 4 contacts. However the Ctrl, both Hand and Alt keys as well as the ] key have 6 contact dots with only two 0.5mm dots of glue to hold the contacts apart. The center pair of dots in the group of 6 have no glue dots at all between the upper and lower membranes and therefore may be more prone to failure.

Apparently these keys are the ones which are reported to stick the most often. [1] In response, a new silkscreen mask for this compound has been prepared, which both decreases the available contact area and increases the size of the central spacing dots under the problem keys.

To test whether this is indeed the problem

If your XO has a developer key or has security disabled:

  • Reboot and enter Open Firmware (the Ok prompt) by pressing the Esc key (Esc.png).
  • Run the keyboard test.
 ok test keyboard

Symptoms

  • Press the LEFT ALT key several times. The key is stuck on, but may turn off as the key is pressed, until it comes on again when fully depressed.

As an alternate method to get to this keyboard diagnostic, hold the "Rocker left" key during boot up to invoke diagnostics. The last diagnostic invoked is the keyboard test.

Very Temporary One-Time Workaround Key

When this (Left Alt key stuck; e.g. pressing Tab without anything would switch Activities, etc.) happened to me, pressing other keys like normal letters or digits didn't help the stuck key, but tapping (pressing once or a few times) the Right Alt Gr key "unreleased" the stuck key!

Temporary software workaround

As a (temporary?) workaround, the left ALT key can be disabled with the following commands, and remapped to the Left Grab (Here we assume that the Left Grab has a keycode of 133. To confirm this, you should use xev. (In my case it was 115)):

xmodmap -e "remove mod1 = Alt_L"
xmodmap -e "keycode 64 ="
xmodmap -e "keycode 133 = Alt_L Meta_L"
xmodmap -e "add mod1 = Alt_L"

In order to apply these settings on startup, the respective commands can be added to .xsession.

  • if /home/olpc/.xsession does not exist:
    • in the Terminal activity, execute the following command: cp /home/olpc/.xsession-example /home/olpc/.xsession
  • open .xsession with the following command: nano -w /home/olpc/.xsession
  • at the end, add the following lines
# remove broken Left ALT key from modifier map
xmodmap -e "remove mod1 = Alt_L"
# disable broken Left ALT key
xmodmap -e "keycode 64 ="
# replace Left ALT with Left Hand key
xmodmap -e "keycode 133 = Alt_L Meta_L"
# add the Left Hand (as Alt_L) to the modifier map
xmodmap -e "add mod1 = Alt_L"
  • save the file by hitting CTRL+X, then enter "y" to confirm

To fix the keys in the console (when X isn't running), you can use the "loadkeys" command as follows:

echo -ne "keymaps 0-15\nkeycode 125 = Alt\nkeycode 56 =\n" | loadkeys

(To view the existing mapping, use "dumpkeys". man dumpkeys/man loadkeys is your friend. Remember, this does not affect the X environment. "showkey" will show you the console (NOT X) keycodes of any keys you press.)


This is a workaround for a sticky CTRL key: the left CTRL key can be disabled with the following commands, and remapped to the Left Grab (Here we assume that the Left Grab has a keycode of 133. To confirm this, you should use xev. This worked for FC 9 builds(joyrides) but not FC 7 (7xx) builds. I added this to my .xsession file.

# remove broken Left CTRL key from modifier map
xmodmap -e "remove Control = Control_L"
# disable broken Left CTRL key
xmodmap -e "keycode 37 ="
# replace Left CTRL with Left Hand key
xmodmap -e "keycode 133 = Control_L"
#xmodmap -e "keycode 133 = Control_L Meta_L"
# add the Left Hand (as Control_L) to the modifier map
xmodmap -e "add Control = Control_L"

Fix

Howto fix the Left Alt stuck key problem.

Assuming the problem is the inadequate spacing compound between the two keyboard membranes -- that is, there isn't enough of it, which can lead to premature keypresses -- you can fix it by placing a thin slice of electrical tape over the poorly formed spacers, as shown in the diagram to the right. Note, this will involve Disassembly of the bottom portion to get to the keyboard. You will also have to peel a bit of the membrane off. (You don't need to peel quite as much as shown in the image; just enough to reach the problematic key.)

This works for me, I used packaging tape. ffm 22:48, 6 July 2008 (UTC)
Packaging tape worked for me too. xuxa 01:00, 8 Aug 2008 (UTC)
worked for me too 79.225.169.76 16:35, 19 August 2008 (UTC)

Key Codes

Other keys - such as left control key (LCTRL) - have been reported to be broken as well. Here is a list of commonly required key codes:

Key Key Code Key Designation
LCTRL 37 Control_L
LALT 64 Alt_L
LSHIFT 50 Shift_L
ALT GR 108 [tbc]
LGRAB 133 [tbc]
RGRAB 134 [tbc]

Reporting: Add your serial to this list.

If you are having this issue, please add your serial number to this wiki page: Stuck_keys_SN

OLPC is currently looking for further data on the stuck key problem.

http://lists.laptop.org/pipermail/community-support/2008-April/001922.html

See Also