Comment 2 for bug 39315

Revision history for this message
Mike Basinger (mike.basinger) wrote : Re: Keyboard random repeat

Same here on a Toshiba M30 laptop.

This use to work on other Linux distros
One solution for this, is to change the refresh rate of the mouse.
To do this become root (su -) then run: modprobe psmouse rate=40

But this does not work in the latest Dapper Kernel.

Here is a old fix for it
   1. Download the latest kernel source
   2. then open up the file ./drivers/input/mouse/psmouse-base.c with your favorite editor.
   3. Find this section in the code: (More recent kernels will have different code)

      /*
       * Try Synaptics TouchPad
       */
            if (psmouse_max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse)) {
                      synaptics_hardware = 1;
                      psmouse->vendor = "Synaptics";
                      psmouse->name = "TouchPad";

                      if (psmouse_max_proto > PSMOUSE_IMEX) {
                              if (synaptics_init(psmouse) == 0)
                                      return PSMOUSE_SYNAPTICS;

      /*
       * Some Synaptics touchpads can emulate extended protocols (like IMPS/2).
       * Unfortunately Logitech/Genius probes confuse some firmware versions so
       * we'll have to skip them.
       */
                            psmouse_max_proto = PSMOUSE_IMEX;
                      }
              }

      And replace it with this:

      /*
       * Try Synaptics TouchPad
       */
      /* if (psmouse_max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse)) {
                      synaptics_hardware = 1;
                      psmouse->vendor = "Synaptics";
                      psmouse->name = "TouchPad";

                      if (psmouse_max_proto > PSMOUSE_IMEX) {
                              if (synaptics_init(psmouse) == 0)
                                      return PSMOUSE_SYNAPTICS;
      */
      /*
       * Some Synaptics touchpads can emulate extended protocols (like IMPS/2).
       * Unfortunately Logitech/Genius probes confuse some firmware versions so
       * we'll have to skip them.
       */
      /* psmouse_max_proto = PSMOUSE_IMEX;
                      }
              }
      */

      (Basically the entire if statement has been commented out)
   4. Now open up the file ./drivers/input/keyboard/atkbd.c
   5. Find this section in the code:

      switch (atkbd->keycode[code]) {
       case ATKBD_KEY_NULL:
        break;
       case ATKBD_KEY_UNKNOWN:
        printk(KERN_WARNING "atkbd.c: Unknown key %s (%s set %d, code %#x on %s).n",
         atkbd->release ? "released" : "pressed",
         atkbd->translated ? "translated" : "raw",
         atkbd->set, code, serio->phys);
         if (atkbd->translated && atkbd->set == 2 && code == 0x7a)
          printk(KERN_WARNING "atkbd.c: This is an XFree86 bug. It shouldn't access hardware directly.n");
         else
          printk(KERN_WARNING "atkbd.c: Use 'setkeycodes %s%02x ' to make it known.n",code & 0x80 ? "e0" : "", code & 0x7f);
        break;
       case ATKBD_SCR_1:
        scroll = 1 - atkbd->release * 2;
        break;
       case ATKBD_SCR_2:
        scroll = 2 - atkbd->release * 4;
        break;
       case ATKBD_SCR_4:
        scroll = 4 - atkbd->release * 8;
        break;
       case ATKBD_SCR_8:
        scroll = 8 - atkbd->release * 16;
        break;
       case ATKBD_SCR_CLICK:
        click = !atkbd->release;
        break;

      And replace it with this:

      switch (atkbd->keycode[code]) {
       case ATKBD_KEY_NULL:
        break;
      /* case ATKBD_KEY_UNKNOWN:
        printk(KERN_WARNING "atkbd.c: Unknown key %s (%s set %d, code %#x on %s).n",
         atkbd->release ? "released" : "pressed",
         atkbd->translated ? "translated" : "raw",
         atkbd->set, code, serio->phys);
         if (atkbd->translated && atkbd->set == 2 && code == 0x7a)
          printk(KERN_WARNING "atkbd.c: This is an XFree86 bug. It shouldn't access hardware directly.n");
         else
          printk(KERN_WARNING "atkbd.c: Use 'setkeycodes %s%02x ' to make it known.n",code & 0x80 ? "e0" : "", code & 0x7f);
         break;
      */ case ATKBD_SCR_1:
        scroll = 1 - atkbd->release * 2;
        break;
       case ATKBD_SCR_2:
        scroll = 2 - atkbd->release * 4;
        break;
       case ATKBD_SCR_4:
        scroll = 4 - atkbd->release * 8;
        break;
       case ATKBD_SCR_8:
        scroll = 8 - atkbd->release * 16;
        break;
       case ATKBD_SCR_CLICK:
        click = !atkbd->release;
        break;

      (Basically commenting out the second switch case)
   6. Now recompile the kernel. A really good guide for re-compiling the kernel with debian can be found at NewbieDoc