two fingers scrolling on a linux synaptics notebook touchpad with X.org 7.4 (xorg-server 1.5)

X.org version 7.4 with xorg-server 1.5 introduces a new way of handling input devices (keyboards, mouses, touchpads, trackball, etc..).

Instead of using some configuration rules in xorg.conf like in Xorg 7.3 and previous versions, input devices are now automatically configured and enabled in Xorg once the system found them.

This process is called Xorg input hotplugging and relies on HAL and Dbus to notify Xorg of additions or removing of input devices. This is a good step forward for Xorg and Linux as Desktop system as it removes all the problems related on having configurations hard coded in the xorg.conf file.

X.org Input Hotplugging and Synaptics Touchpads

Obviously this change introduces differences in how the various input devices are configured. After Archlinux, the linux distribution I use, has upgraded its packages to Xorg 7.4 I had to modify some of the configurations I had for my synaptics touchpad. Obviously I didn’t want to loose the two fingers scrolling.

You will need the following packages: xf86-input-evdev and xf86-input-synaptics (your linux distribution might have called them differently). Moreover you will need to have HAL and Dbus enabled and correctly working in your system.

As the new input discovering and configuration now relies on HAL, the synaptics touchpad configurations will be inserted in an HAL .fdi policy rule file. You should find some examples of such files under /usr/share/hal/fdi/policy/10osvendor/ (your distribution might use a different path). Those files are XML policies rules used for configuring hardware devices.

By default HAL uses the rules available at /usr/share/hal/fdi/. Configurations and changes to those rule files should be made inserting modified policy files in /etc/hal/fdi/. Policies files inserted into that folder will have priority on the rules available by default in /usr/share/hal/fdi/.

So.. to configure a Synaptic Touchpad you can create a file called 11-x11-synaptics.fdi in your /etc/hal/fdi/policy/ folder.

Remember that each time you change a HAL policy file you have to restart the HAL daemon and, if the policy file are relevant to Xorg, it’s better to also restart Xorg.

11-x11-synaptics.fdi

This is the content of my configuration file:

<?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"        
        EndSection                                 
        -->                                        
        <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.FingerLow" type="string">25</merge>
        <merge key="input.x11_options.FingerHigh" type="string">30</merge>
        <merge key="input.x11_options.MaxTapTime" type="string">180</merge>
        <merge key="input.x11_options.MaxTapMove" type="string">220</merge>
        <merge key="input.x11_options.VertScrollDelta" type="string">100</merge>
        <merge key="input.x11_options.MinSpeed" type="string">0.10</merge>
        <merge key="input.x11_options.MaxSpeed" type="string">0.70</merge>
        <merge key="input.x11_options.AccelFactor" type="string">0.00150</merge>
        <merge key="input.x11_options.SHMConfig" type="string">on</merge>
        <merge key="input.x11_options.VertTwoFingerScroll" type="string">1</merge>
        <merge key="input.x11_options.HorizTwoFingerScroll" type="string">1</merge>
        <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>
      </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>

For your reference I inserted in the file my old xorg.conf touchpad settings. They are commented into the HAL configuration file and have been deleted into xorg.conf as no more used.

You can see that the new settings are pretty similar to the old ones: it’s just changed the syntax but the settings name and some values are actually the same.

As you can note by comparing the speed and acceleration values from the current configuration and the old one seems that the new Synaptics Drivers have a lower sensitivity. So I had to make those values higher to get the same pointer speed I was used to. The affected values are MinSpeed, MaxSpeed and AccelFactor.

Moreover, as tapping and scrolling now have to be explicitly enabled, we now have 5 new settings: VertEdgeScroll, HorizEdgeScroll, TapButton1, TapButton2 and TapButton3. The first two enabled vertical and horizontal edge scrolling while the last three enable tapping.

Changes to xorg.conf

Obviously there are settings in xorg.conf which are now useless.

In the ServerLayout section you might comment out (add a # at the beginning of the line) each InputDevice line as we no more use input devices configured in xorg.conf.

Section "ServerLayout"
        Identifier     "Simple Layout"
        Screen      0  "aticonfig-Screen[0]" 0 0
#       InputDevice    "Mouse1" "CorePointer"
#       InputDevice    "Touchpad"  "SendCoreEvents"
#       InputDevice    "Keyboard1" "CoreKeyboard"
EndSection

Then we will have to comment out each InputDevice section we migh have.

Always remember to restart HAL and Xorg once doing such changes.

Scroll to Top