Comment 141 for bug 549727

Revision history for this message
Bob B (tenbob1) wrote : Re: [10.04] Touchpad stops working after login

IMPORTANT - this contains steps to reproduce the problem.

Comment #103 above has the solution - but it's slightly more subtle than this.

I can easily reproduce the problem on my Acer netbook which has a dedicated keypress (Fn F7) to toggle the touchpad on or off. I'm running Ubuntu 10.04.2 LTS Netbook.

It seems like the touchpad is enabled in two different places. The one we know about is at /desktop/gnome/peripherals/touchpad/touchpad_enabled. The other is elsewhere, presumably in the Synaptics device driver. Both persist over a reboot.

Normally when you hit Fn F7 the touchpad toggles reliably between the enabled and disabled states.

But it's like two electrical switches in series. Provided they both remain in step it works. But if there's ever a glitch that causes one switch to be off while the other is on, there's no easy way to correct it. Hitting Fn F7 will just reverse the existing state. But with one switch on and the other off the touchpad never gets enabled.

Steps to reproduce.

(1) Use gconftool-2 to monitor the state of the relevant gconf key using the command below.
gconftool-2 -g /desktop/gnome/peripherals/touchpad/touchpad_enabled

Press Fn F7 repeatedly and each time check the results with gconftool-2. As expected, you can see the key toggle from true to false and back again. At the same check that the touchpad is being enabled and disabled correctly. This is the normal behaviour.

(2) Finish up with the key value set to false. Now use gconftool-2 to change the key to true using the command below.
gconftool-2 --type bool --set /desktop/gnome/peripherals/touchpad/touchpad_enabled true
Note that this sets the two flags out of step with each other.

After this you can keep on hitting FnF7 and see the gconf key change from true to false. But whatever you do you can't get the touchpad to work. Whenever gconf thinks the keypad is enabled the other flag thinks it is disabled and vice versa.

To solve this, the software needs to link the two flags together so they can never have different values.