# Problem with Hal and Alps touchpad. [soooooolved]

## CrankyPenguin

So I recently migrated to Xorg 1.5.3 based upon HAL and the xf86-input-synaptics.  And since then my AlpsPS/2 GlidePoint touchpad functions as a mouse but not as a touchpad, no tap click, no scrolling, nada.  My /etc/hal/fdi/10-x11-input.fdi file is appended below.  A search through the Xorg file (some included below) shows that the synaptics driver is being loaded but that the device in question seems to be found but gets assigned the evdev driver.  Perversely Hal is finding two devices one being run by synaptics and the other by evdev.  So this seems to be a precedent problem.  Is this a case of if one file matches higher levels don't get invoked?

10-x11-input.fdi

```

<?xml version="1.0" encoding="ISO-8859-1"?>

<deviceinfo version="0.2">

  <device>

  <match key="info.capabilities" contains="input.mouse">

   <match key="info.product" contains="AlpsPS/2 ALPS GlidePoint">

    <merge key="input.x11_driver" type="string">synaptics</merge>

    <merge key="input.x11_options.ZAxisMapping" type="integer">4 5</merge>

    <merge key="input.x11_options.Emulate3Buttons" type="string">yes</merge>

    <merge key="input.x11_options.LeftEdge" type="integer">120</merge>

    <merge key="input.x11_options.RightEdge" type="integer">830</merge>

    <merge key="input.x11_options.TopEdge" type="integer">120</merge>

    <merge key="input.x11_options.BottomEdge" type="integer">650</merge>

    <merge key="input.x11_options.FingerLow" type="integer">14</merge>

    <merge key="input.x11_options.FingerHigh" type="integer">15</merge>

    <merge key="input.x11_options.MaxTapTime" type="integer">180</merge>

    <merge key="input.x11_options.MaxTapMove" type="integer">110</merge>

    <merge key="input.x11_options.EmulateMidButtonTime" type="integer">75</merge>

    <merge key="input.x11_options.VertScrollDelta" type="integer">20</merge>

    <merge key="input.x11_options.HorizScrollDelta" type="integer">20</merge>

    <merge key="input.x11_options.MaxSpeed" type="double">0.5</merge>

    <merge key="input.x11_options.MinSpeed" type="double">0.2</merge>

    <merge key="input.x11_options.AccelFactor" type="double">0.01</merge>

    <merge key="input.x11_options.EdgeMotionMaxSpeed" type="integer">15</merge>

    <merge key="input.x11_options.EdgeMotionMinSpeed" type="integer">15</merge>

    <merge key="input.x11_options.UpDownScrolling" type="integer">15</merge>

    <merge key="input.x11_options.PalmDetect" type="bool">True</merge>

    <merge key="input.x11_options.PalmMinWidth" type="integer">9</merge>

    <merge key="input.x11_options.TapButton1" type="integer">1</merge>

    <merge key="input.x11_options.TapButton2" type="integer">2</merge>

    <merge key="input.x11_options.TapButton3" type="integer">3</merge>

    <merge key="input.x11_options.VertEdgeScroll" type="bool">true</merge>

    <merge key="input.x11_options.VertTwoFingerScroll" type="bool">true</merge>

    <merge key="input.x11_options.SHMConfig" type="string">on</merge>

  </match>

    <!-- FIXME: Support tablets too. -->

    <match key="info.capabilities" contains="input.mouse">

      <merge key="input.x11_driver" type="string">mouse</merge>

      <!-- <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"

             string="Linux">

      <merge key="input.x11_driver" type="string">evdev</merge> -->

      </match>

    </match>

<!--    <match key="info.capabilities" contains="input.touchpad">

        <match key="info.product" contains="AlpsPS/2 ALPS">

          <merge key="input.x11_driver" type="string">synaptics</merge>

          <merge key="input.x11_options.SHMConfig" type="string">true</merge>

        </match>

    </match> -->

<!--    <match key="info.capabilities" contains="input.touchpad">

      <merge key="input.x11_driver" type="string">mouse</merge>

      <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"

             string="Linux">

        <merge key="input.x11_driver" type="string">evdev</merge>

      </match>

    </match>

-->

    <match key="info.capabilities" contains="input.keys">

      <!-- If we're using Linux, we use evdev by default (falling back to

           keyboard otherwise). -->

      <merge key="input.x11_driver" type="string">keyboard</merge>

      <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"

             string="Linux">

      <merge key="input.x11_driver" type="string">evdev</merge>

      </match>

    </match>

  </device>

</deviceinfo>

```

Xorg output.

```

(II) config/hal: Adding input device AlpsPS/2 ALPS GlidePoint

(II) LoadModule: "synaptics"

(II) Loading /usr/lib64/xorg/modules/input//synaptics_drv.so

(II) Module synaptics: vendor="X.Org Foundation"

        compiled for 1.5.3, module version = 1.0.0

        Module class: X.Org XInput Driver

        ABI class: X.Org XInput driver, version 2.1

(II) Synaptics touchpad driver version 1.0.0

(**) Option "Device" "/dev/input/event5"

(II) AlpsPS/2 ALPS GlidePoint: x-axis range 0 - 1023

(II) AlpsPS/2 ALPS GlidePoint: y-axis range 0 - 767

(II) AlpsPS/2 ALPS GlidePoint: pressure range 0 - 127

(II) AlpsPS/2 ALPS GlidePoint: finger width range 0 - 0

(II) AlpsPS/2 ALPS GlidePoint: buttons: left right middle

(--) AlpsPS/2 ALPS GlidePoint touchpad found

(**) AlpsPS/2 ALPS GlidePoint: always reports core events

(II) XINPUT: Adding extended input device "AlpsPS/2 ALPS GlidePoint" (type: TOUCHPAD)

(--) AlpsPS/2 ALPS GlidePoint touchpad found

(II) config/hal: Adding input device PS/2 Mouse

(II) LoadModule: "evdev"

```

```

34: udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX3_port_logicaldev_input_0'

  linux.sysfs_path = '/sys/class/input/input5/event5'  (string)

  input.originating_device = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX3_port'  (string)

  info.subsystem = 'input'  (string)

  info.parent = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX3_port'  (string)

  info.product = 'AlpsPS/2 ALPS GlidePoint'  (string)

  info.category = 'input'  (string)

  info.udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX3_port_logicaldev_input_0'  (string)

  info.capabilities = { 'input', 'input.mouse', 'input.touchpad' } (string list)

  linux.hotplug_type = 2  (0x2)  (int)

  linux.subsystem = 'input'  (string)

  input.device = '/dev/input/event5'  (string)

  linux.device_file = '/dev/input/event5'  (string)

  input.product = 'AlpsPS/2 ALPS GlidePoint'  (string)

  input.x11_driver = 'synaptics'  (string)

35: udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX3_port_logicaldev_input'

  linux.sysfs_path = '/sys/class/input/input4/event4'  (string)

  input.originating_device = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX3_port'  (string)

  info.subsystem = 'input'  (string)

  info.parent = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX3_port'  (string)

  info.product = 'PS/2 Mouse'  (string)

  info.category = 'input'  (string)

  info.udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX3_port_logicaldev_input'  (string)

  info.capabilities = { 'input', 'input.mouse' } (string list)

  linux.hotplug_type = 2  (0x2)  (int)

  linux.subsystem = 'input'  (string)

  input.device = '/dev/input/event4'  (string)

  linux.device_file = '/dev/input/event4'  (string)

  input.product = 'PS/2 Mouse'  (string)

  input.x11_driver = 'evdev'  (string)

```

Suggestions?

----------

## DONAHUE

http://en.gentoo-wiki.com/wiki/Synaptics_Touchpad may help you. or http://en.gentoo-wiki.com/wiki/Synaptics_Touchpad/Xorg_7.3

----------

## CrankyPenguin

Thanks Donahue, I saw those and followed the directions to get out of earlier problems.  Unfortunately they didn't correct the present problem.

----------

## CrankyPenguin

I guess I'm not the only one who isn't enjoying Hal.

----------

## gami

Try if changing 

```
type="integer"
```

 to 

```
type="string"
```

 in your fdi file makes a difference for you. I believe the xorg-server accepts only strings from HAL.

----------

## CrankyPenguin

Gami, I tried the string change but it didn't work, thanks though.  

The issue, it seems to me lies in these lines:

 *Quote:*   

> 
> 
> 35: udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX3_port_logicaldev_input_0'
> 
>   linux.sysfs_path = '/sys/class/input/input5/event5'  (string)
> ...

 

Basically the same device is getting two input events and thus being read twice.  From there HAL is assigning synaptics as a driver for one and evdev for the other.  I suspect that the evdev messages are what is getting trapped first.  Either I need to block hal from responding to input event 4 or find out why the same originating device gets two input nodes.  

As a side point eliminating the evdev driver from the system would be problematic as I use an external mouse. [/quote]

----------

## CkoTuHa

my touchpad works, however the more I know the more I hate lenovo...

```

pussy policy # cat shmconfig.fdi

<?xml version="1.0" encoding="ISO-8859-1"?>

<deviceinfo version="0.2">

 <device>

  <match key="input.x11_driver" string="synaptics">

   <merge key="input.x11_options.SHMConfig" type="string">true</merge>

   <merge key="input.x11_options.TapButton1" type="string">1</merge>

  </match>

 </device>

</deviceinfo>

pussy policy # cat use-mouse-driver-thrackpoint.fdi

<?xml version="1.0" encoding="UTF-8"?>

<deviceinfo version="0.2">

   <match key="input.product" string="TPPS/2 IBM TrackPoint">

    <merge key="input.x11_options.EmulateWheel" type="string">true</merge>

    <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>

    <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>

    <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>

    <merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>

    <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>

    <merge key="input.x11_driver" type="string">evdev</merge>

   </match>

        <match key="info.udi" string="/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input">

                <merge key="input.xkb.model" type="string">thinkpad60</merge>

        </match>

</deviceinfo>

pussy policy # cat 11-x11-synaptics.fdi                             

<?xml version="1.0" encoding="ISO-8859-1"?>                                                                                                                                   

<deviceinfo version="0.2">                                                                                                                                                    

  <device>                                                                                                                                                                    

    <match key="info.capabilities" contains="input.touchpad">                                                                                                                 

      <match key="info.product" contains="Synaptics TouchPad">                                                                                                                

        <merge key="input.x11_driver" type="string">synaptics</merge>                                                                                                         

        <!-- Arbitrary options can be passed to the driver using                                                                                                              

             the input.x11_options property since xorg-server-1.5. -->                                                                                                        

        <!-- EXAMPLE:                                                                                                                                                         

        <merge key="input.x11_options.LeftEdge" type="string">120</merge>                                                                                                     

        -->                                                                                                                                                                   

        <!-- Added by Fabio Varesano using setting from xorg.conf after X.org update to 1.5.x                                                                                 

        Following the old xorg.conf settings                                                                                                                                  

        Section "InputDevice"

        Identifier      "Touchpad"

        Driver          "synaptics"

        Option  "Device"        "/dev/input/mouse0"

        Option  "Protocol"      "auto-dev"         

        Option  "LeftEdge"      "1700"             

        Option  "RightEdge"     "5300"             

        Option  "TopEdge"       "1700"             

        Option  "BottomEdge"    "4200"             

        Option  "FingerLow"     "25"               

        Option  "FingerHigh"    "30"               

        Option  "MaxTapTime"    "180"              

        Option  "MaxTapMove"    "220"              

        Option  "VertScrollDelta" "100"            

        Option  "MinSpeed"      "0.06"             

        Option  "MaxSpeed"      "0.12"             

        Option  "AccelFactor" "0.0010"             

        Option  "SHMConfig"     "on"               

        Option  "VertTwoFingerScroll"   "1"        

        Option  "HorizTwoFingerScroll"  "1"        

        MinSpeed/MaxSpeed 0.43                     

        EndSection                                 

        -->                                        

        <merge key="input.x11_options.VertEdgeScroll" type="string">1</merge>

        <merge key="input.x11_options.HorizEdgeScroll" type="string">1</merge>

        <!--<merge key="input.x11_options.TapButton1" type="string">1</merge>-->

        <!--<merge key="input.x11_options.TapButton2" type="string">2</merge>-->

        <!--<merge key="input.x11_options.TapButton3" type="string">3</merge>-->

        <merge key="input.x11_options.VertTwoFingerScroll" type="string">true</merge>

        <merge key="input.x11_options.HorizTwoFingerScroll" type="string">true</merge>

        <merge key="input.x11_options.EmulateTwoFingerMinZ" type="string">90</merge>

        <merge key="input.x11_options.VertScrollDelta" type="string">300</merge>

        <merge key="input.x11_options.HorizScrollDelta" type="string">300</merge>

        <!--<merge key="input.x11_options.CircularScrolling" type="string">true</merge> -->

        <merge key="input.x11_options.MinSpeed" type="string">0.35</merge>

        <merge key="input.x11_options.MaxSpeed" type="string">0.55</merge>

        <merge key="input.x11_options.LeftEdge" type="string">1700</merge>

        <merge key="input.x11_options.RightEdge" type="string">5300</merge>

        <merge key="input.x11_options.TopEdge" type="string">1700</merge>

        <merge key="input.x11_options.BottomEdge" type="string">4200</merge>

        <merge key="input.x11_options.AccelFactor" type="string">0.0050</merge>

      </match>

      <match key="info.product" contains="AlpsPS/2 ALPS">

        <merge key="input.x11_driver" type="string">synaptics</merge>

      </match>

      <match key="info.product" contains="appletouch">

        <merge key="input.x11_driver" type="string">synaptics</merge>

      </match>

      <match key="info.product" contains="bcm5974">

        <merge key="input.x11_driver" type="string">synaptics</merge>

      </match>

    </match>

  </device>

</deviceinfo>
```

I hate it because they don't allow two finger scroll. It is emulated by pressure rather it is sensed by the touchpad. The second reason, the touchpad being connected through PS/2 port eats a lot of cpu cycles - a lot of kernel interrupts, hence poor batterly life ~6 hours on a 9 cell. On win this figure would go to 7-8-9 hours  :Smile: 

The mouse in USB generates a lot less interrupts.

I wish I had a mac hardware now  :Smile:  with gentoo on it. My dream : mac 15 inch with 1920x1200 LED LCD + trackpoint + trackpad and gentoo which looks like mac. I mean fonts, ui and else...will probably never happen  :Smile: 

----------

## mikegpitt

Not sure if you have already visited this thread, but take a look here:

https://forums.gentoo.org/viewtopic-t-756407-highlight-.html

Specifically this post:

https://forums.gentoo.org/viewtopic-p-5679638.html#5679638

You might be having an issue with the touchpad dimensions.

----------

## CrankyPenguin

Thanks Mikegpitt but I don't think it is a dimension problem as tap-click is also not working.

----------

## CrankyPenguin

CkoTuHa, I'm playing around with the changes you suggested, or will do more later.  In one of your files you have the line:

 *Quote:*   

> 
> 
> <match key="info.udi" string="/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input">
> 
>                 <merge key="input.xkb.model" type="string">thinkpad60</merge>
> ...

 

Do you, or does anyone, have two devices showing up on the same input like I do.  As I noted above I have the logicaldev_input and logicaldev_input_0.

  Thanks.

----------

## mikegpitt

I just noticed in your first post that your location for the fdi file might be wrong.  It should go here:

```
/etc/hal/fdi/policy/10osvendor/11-x11-synaptics.fdi
```

This is my configuration.  I don't have tap to click enabled, since I find it annoying, but you might find it helpful:

```
<?xml version="1.0" encoding="ISO-8859-1"?>

<deviceinfo version="0.2">

  <device>

    <match key="info.capabilities" contains="input.touchpad">

        <merge key="input.x11_driver" type="string">synaptics</merge>

        <!-- Add vertical edge scrolling -->

        <merge key="input.x11_options.SHMConfig" type="string">true</merge>

        <merge key="input.x11_options.VertEdgeScroll" type="string">true</merge>

        <!-- Options for ALPS touchpads -->

        <match key="info.product" contains="ALPS">

           <merge key="input.x11_options.Emulate3Buttons" type="string">yes</merge>

           <merge key="input.x11_options.RightEdge" type="string">930</merge>

           <merge key="input.x11_options.SpecialScrollAreaRight" type="string">false</merge>

        </match>

    </match>

  </device>

</deviceinfo>

```

For tap to click you should only need a line like this:

```
<merge key="input.x11_options.MaxTapMove" type="string">2000</merge>
```

Also remember to restart hal after making changes!

----------

## CrankyPenguin

So thanks to your help I've manged to get things partially working.  It turns out I had two 11-x11-synaptics.fdi files one under /usr and the other under /etc.  Removing the one under /usrt and an odd .keep file that arose under /etc caused the system to load the correct one.  Having done that I changed all the inputs to strings (thanks CkoTuHa!) and some of the features (tap click, etc) work.  I still have not yet gotten scrolling to work however.  When I get a chance Mikegpitt I'll try your suggested changes.

----------

## CrankyPenguin

So oddly enough a reboot (not a hal-restart) fixed things.  Taking my original /etc/hal/fdi/policy/11-x11-synaptics.fdi, removing the duplicate, and converting all the values to strings worked for tap click and SMH config but not scrolling.  This morning after a reboot I discovered that scrolling is now working, so it's all good.  Thanks all.

----------

