Difference between revisions of "Touchpad Synaptics"

From ArchWiki
Jump to: navigation, search
(Advanced Configuration: Added natural scrolling config)
m (fix ja link)
 
(242 intermediate revisions by 91 users not shown)
Line 1: Line 1:
 +
[[Category:Input devices]]
 
[[de:Synaptics Touchpad Treiber]]
 
[[de:Synaptics Touchpad Treiber]]
 
[[es:Touchpad Synaptics]]
 
[[es:Touchpad Synaptics]]
 
[[fr:Touchpad Synaptics]]
 
[[fr:Touchpad Synaptics]]
 
[[it:Touchpad Synaptics]]
 
[[it:Touchpad Synaptics]]
 +
[[ja:Synaptics タッチパッド]]
 
[[ru:Touchpad Synaptics]]
 
[[ru:Touchpad Synaptics]]
 
[[zh-CN:Touchpad Synaptics]]
 
[[zh-CN:Touchpad Synaptics]]
[[Category:Input devices]]
+
{{Related articles start}}
{{Article summary start}}
+
{{Related|Xorg}}
{{Article summary text|This article details the installation and configuration of the Synaptics input driver in Arch Linux. }}
+
{{Related articles end}}
{{Article summary heading|Related}}
+
{{Article summary wiki|Xorg}}
+
{{Article summary wiki|Touchpad Synaptics/10-synaptics.conf example}}
+
{{Article summary end}}
+
 
+
 
This article details the installation and configuration process of the '''''Synaptics input driver''''' for Synaptics (and ALPS) touchpads found on most notebooks.
 
This article details the installation and configuration process of the '''''Synaptics input driver''''' for Synaptics (and ALPS) touchpads found on most notebooks.
 +
 +
{{Tip|An alternative touchpad driver is [[libinput]]. It implements a different approach to recognize and process multitouch features.}}
 +
 +
{{Note|1=If you want to configure touchpad via GNOME control center, you need to use the [[libinput]] driver.[https://bugzilla.gnome.org/show_bug.cgi?id=764257#c12]}}
  
 
== Installation ==
 
== Installation ==
The Synaptics driver can be [[pacman|installed]] with the package {{Pkg|xf86-input-synaptics}}, available in the [[official repositories]].
+
 
 +
The Synaptics driver can be [[installed]] with the package {{Pkg|xf86-input-synaptics}}.
  
 
== Configuration ==
 
== Configuration ==
The primary method of configuration for the touchpad is through an [[Xorg]] server configuration file. After installation of {{ic|xf86-input-synaptics}}, a default configuration file is located at {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}}.
 
  
Users can edit this file to configure the various driver options available, for a complete list of all available options users should refer to the synaptics manual page:
+
The primary method of configuration for the touchpad is through an [[Xorg]] server configuration file. After installation of {{ic|xf86-input-synaptics}}, a default configuration file is located at {{ic|/usr/share/X11/xorg.conf.d/70-synaptics.conf}}. Users can copy this file to {{ic|/etc/X11/xorg.conf.d/}} and edit it to configure the various driver options available. Refer to the {{ic|synaptics(4)}} manual page for a complete list of available options. Machine-specific options can be discovered using [[#Synclient|synclient]].
  
{{bc|$ man synaptics}}
+
=== Frequently used options ===
  
{{Note|Synaptics 1.0 and higher support input device properties if the driver is running on X server 1.6 or higher. On these driver versions, Option "SHMConfig" is not needed to enable run-time configuration. See man page for more info.}}
+
The following example file configures some common options, including vertical, horizontal and circular scrolling as well as tap-to-click:
  
=== Frequently used options ===
+
{{hc|/etc/X11/xorg.conf.d/70-synaptics.conf|<nowiki>
The following lists options that many users may wish to configure. Note that all these options can simply be added to the main configuration file in {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}}, as shown in this example configuration file where we have enabled vertical, horizontal and circular scrolling:
+
Section "InputClass"
{{hc|/etc/X11/xorg.conf.d/10-synaptics.conf|<nowiki>
+
    Identifier "touchpad"
Section "InputClass"
+
    Driver "synaptics"
      Identifier "touchpad"
+
    MatchIsTouchpad "on"
      Driver "synaptics"
+
        Option "TapButton1" "1"
      MatchIsTouchpad "on"
+
        Option "TapButton2" "3"
              Option "TapButton1" "1"
+
        Option "TapButton3" "2"
              Option "TapButton2" "2"
+
        Option "VertEdgeScroll" "on"
              Option "TapButton3" "3"
+
        Option "VertTwoFingerScroll" "on"
              Option "VertEdgeScroll" "on"
+
        Option "HorizEdgeScroll" "on"
              Option "VertTwoFingerScroll" "on"
+
        Option "HorizTwoFingerScroll" "on"
              Option "HorizEdgeScroll" "on"
+
        Option "CircularScrolling" "on"
              Option "HorizTwoFingerScroll" "on"
+
        Option "CircScrollTrigger" "2"
              Option "CircularScrolling" "on"
+
        Option "EmulateTwoFingerMinZ" "40"
              Option "CircScrollTrigger" "2"
+
        Option "EmulateTwoFingerMinW" "8"
              Option "EmulateTwoFingerMinZ" "40"
+
        Option "CoastingSpeed" "0"
              Option "EmulateTwoFingerMinW" "8"
+
        Option "FingerLow" "30"
              Option "CoastingSpeed" "0"
+
        Option "FingerHigh" "50"
              ...
+
        Option "MaxTapTime" "125"
EndSection
+
        ...
 +
EndSection
 
</nowiki>}}
 
</nowiki>}}
  
Line 60: Line 62:
 
; '''HorizTwoFingerScroll''': (boolean) enables horizontal scrolling using two fingers.
 
; '''HorizTwoFingerScroll''': (boolean) enables horizontal scrolling using two fingers.
 
; '''EmulateTwoFingerMinZ/W''': (integer) play with this value to set the precision of two finger scroll.
 
; '''EmulateTwoFingerMinZ/W''': (integer) play with this value to set the precision of two finger scroll.
 +
; '''FingerLow''': (integer) when finger pressure drops below this value, the driver counts it as a release.
 +
; '''FingerHigh''': (integer) when finger pressure goes above this value, the driver counts it as a touch.
 +
; '''MaxTapTime''': Determines how "crisp" a tap must be to be considered a real tap.  Decrease the value to require a more crisp tap.  Properly adjusting this parameter can reduce false positives when the hands hover over or lightly touch the pad.
 +
; '''VertScrollDelta''' and '''HorizScrollDelta''': (integer) configures the speed of scrolling, it is a bit counter-intuitive because higher values produce greater precision and thus slower scrolling. Negative values cause natural scrolling like in macOS.
  
[[Touchpad_Synaptics/10-synaptics.conf_example|An example]] with a brief description of all options. As usual settings will vary between machinesIt is recommended that you discover your own options using [[Touchpad_Synaptics#Synclient|synclient]].
+
{{Note|
 +
* If you find that your hand frequently brushes your touchpad, causing the TapButton2 option to be triggered (which will more than likely paste from your clipboard), and you do not mind losing two-finger-tap functionality, set {{ic|TapButton2}} to 0. Alternatively, see [[#Disable touchpad while typing]].
 +
* Recent versions include a "Coasting" feature, enabled by default, which may have the undesired effect of continuing almost any scrolling until the next tap or click, even if you are no longer touching the touchpad. This means that to scroll just a bit, you need to scroll (by using the edge, or a multitouch option) and then almost immediately tap the touchpad, otherwise scrolling will continue forever. If wish to avoid this, set {{ic|CoastingSpeed}} to 0.
 +
* If your touchpad is too sensitive, use higher values for {{ic|FingerLow}} and {{ic|FingerHigh}} and vice versa. Remember that {{ic|FingerLow}} should be smaller than {{ic|FingerHigh}}
 +
}}
  
{{Note|If you find that your hand frequently brushes your touchpad, causing the TapButton2 option to be triggered (which will more than likely paste from your clipboard), and you do not mind losing two-finger-tap functionality, set {{ic|TapButton2}} to -1.}}
+
=== Configuration on the fly ===
  
{{Note|Recent versions include a "Coasting" feature, enabled by default, which may have the undesired effect of continuing almost any scrolling until the next tap or click, even if you are no longer touching the touchpad. This means that to scroll just a bit, you need to scroll (by using the edge, or a multitouch option) and then almost immediately tap the touchpad, otherwise scrolling will continue forever. If wish to avoid this, set {{ic|CoastingSpeed}} to 0.}}
+
Next to the traditional method of configuration, the Synaptics driver also supports on the fly configuration. This means that users can set certain options through a software application, these options are applied immediately without needing to restart Xorg. This is useful to test configuration options before you include them in the configuration file or a script. Note that on the fly configuration is not persistent and lasts only until the Xorg server exists.
  
=== Other options ===
+
==== Console tools ====
; '''VertScrollDelta''' and '''HorizScrollDelta''': (integer) configures the speed of scrolling, it's a bit counter-intuitive because higher values produce greater precision and thus slower scrolling. Negative values cause natural scrolling like in OS X.
+
  
; SHMConfig: (boolean) Switch on/off shared memory for run-time debugging. This option does not have an effect on run-time configuration anymore and is only useful for hardware event debugging.
+
* {{App|[[#Synclient|Synclient]]|command line utility to configure and query Synaptics driver settings|http://xorg.freedesktop.org/|{{Pkg|xf86-input-synaptics}}}}
 +
* {{App|[[#Using xinput to determine touchpad capabilities|xinput]]|general-purpose utility to configure X input devices|http://xorg.freedesktop.org/|{{Pkg|xorg-xinput}}}}
 +
 
 +
==== Graphical tools ====
  
=== GNOME ===
+
* {{App|GPointing Device Settings|Provides graphical on the fly configuration for several pointing devices connected to the system, including your synaptics touch pad. This application replaces GSynaptics as the preferred tool for graphical touchpad configuration through the synaptics driver.|https://wiki.gnome.org/Attic/GPointingDeviceSettings|{{Pkg|gpointing-device-settings}}}}
Users of [[GNOME]] may have to edit its configuration as well, because in default it is set to disable tapping to click, horizontal scrolling and not to allow touchpad disabling while typing.
+
* {{App|kcm_touchpad|New configuration tool for [[KDE]] Plasma 5. It provides a module under input devices in System Settings. It is to be considered a replacement for {{AUR|synaptiks}}{{Broken package link|{{aur-mirror|synaptiks}}}} and the old ''kcm-touchpad'' module.|3=https://quickgit.kde.org/?p=plasma-desktop.git&a=tree&f=kcms%2Ftouchpad|4={{Pkg|plasma-desktop}}}}
  
To change these settings in '''Gnome 2''':
+
=== Xfce4/Cinnamon ===
# Run {{ic|gconf-editor}}
+
# Edit the keys in the {{ic|/desktop/gnome/peripherals/touchpad/}} folder.
+
  
To change these settings in '''Gnome 3''':
+
To change these settings in ''XFCE 4''':
 
# Open ''System Settings''.
 
# Open ''System Settings''.
 
# Click ''Mouse and Touchpad''.
 
# Click ''Mouse and Touchpad''.
 
# Change the settings on the ''Touchpad'' tab.
 
# Change the settings on the ''Touchpad'' tab.
  
Gnome settings daemon may override existing settings (for example ones set in {{ic|xorg.conf.d}}) for which there is no equivalent in any of the graphical configuration utilities. It is possible to stop gnome from touching mouse settings at all:
+
To change these settings in '''Cinnamon''':
# Run {{ic|dconf-editor}}
+
# Open ''Cinnamon System Settings''.
# Edit {{ic|/org/gnome/settings-daemon/plugins/mouse/}}
+
# Click ''Mouse and Touchpad''.
# Uncheck the '''active''' setting
+
# Change the settings on the ''Touchpad'' tab.
It will now respect your system's existing synaptics configuration.
+
  
 
=== MATE ===
 
=== MATE ===
As with [[GNOME]], it is possible configure the way MATE handles the touchpad:
 
  
# Run {{ic|mateconf-editor}}
+
It is possible configure the way MATE handles the touchpad:
# Edit the keys in the {{ic|desktop/mate/peripherals/touchpad/}} folder.
+
 
 +
# Run {{ic|dconf-editor}}
 +
# Edit the keys in the {{ic|org.mate.peripherals-touchpad}} folder.
  
 
To prevent Mate settings daemon from overriding existing settings, do as follows:
 
To prevent Mate settings daemon from overriding existing settings, do as follows:
# Run {{ic|mateconf-editor}}
+
# Run {{ic|dconf-editor}}
# Edit {{ic|/apps/mate_settings_daemon/plugins/mouse/}}
+
# Edit {{ic|org.mate.SettingsDaemon.plugins.mouse}}
 
# Uncheck the '''active''' setting.
 
# Uncheck the '''active''' setting.
  
 +
== Advanced configuration ==
  
 +
=== Using xinput to determine touchpad capabilities ===
  
=== Configuration on the fly ===
 
Next to the traditional method of configuration, the Synaptics driver also supports on the fly configuration. This means that users can set certain options through a software application, these options are applied immediately without needing a restart of X or udev. This is useful to test configuration options before you include them in the configuration file.
 
 
{{Warning|On-the-fly configuration is non-permanent and will not remain active though a reboot, suspend / resume or restart of udev. This should only be used to test, fine-tune or script configuration features.}}
 
 
In order for many of these tools to work you need to have the {{ic|SHMConfig Option}} enabled in '''10-synaptic.conf''', as shown below.
 
{{hc|/etc/X11/xorg.conf.d/10-synaptics.conf|
 
 
Option "SHMConfig" "on" # or Option "SHMConfig"  "true"
 
 
}}
 
 
==== Console tools ====
 
* {{App|[[Touchpad_Synaptics#Synclient|Synclient]] (Recommended)|command line utility to configure and query Synaptics driver settings on a live system, the tool is developed by the synaptics driver maintainers and is provided with the synaptics driver|http://xorg.freedesktop.org/|{{Pkg|xf86-input-synaptics}}}}
 
* {{App|[[Touchpad_Synaptics#xinput|xinput]]|small general-purpose CLI tool to configure devices|http://xorg.freedesktop.org/|{{Pkg|xorg-xinput}}}}
 
 
==== Graphical tools ====
 
* {{App|GPointing Device Settings|provides graphical on the fly configuration for several pointing devices connected to the system, including your synaptics touch pad. This application replaces GSynaptics as the preferred tool for graphical touchpad configuration through the synaptics driver|http://live.gnome.org/GPointingDeviceSettings|{{AUR|gpointing-device-settings}}}}
 
:{{Note|For GPointingDeviceSettings to work with Synaptics touchpads both {{Pkg|xf86-input-synaptics}} and {{Pkg|libsynaptics}} have to be installed!}}
 
* {{App|GSynaptics (Deprecated!)|allows the user to configure options such as horizontal, vertical and circular scrolling as well as the option to enable or disable the touchpad. The [http://gsynaptics.sourceforge.jp/ GSynaptics website] mentions that its development has stopped and that it will eventually be outdated, the application functions perfectly with xorg 1.11, through users looking for a graphical tools are suggested to use '''GPointingDeviceSettings''' instead, GSynaptics should only be used as a last resort|http://gsynaptics.sourceforge.jp/|{{Pkg|gsynaptics}}}}
 
* {{App|Synaptiks|touchpad configuration and management tool for [[KDE]]. It provides a System Settings module to configure basic and advanced features of the touchpad. Additionally it comes with a little system tray application, which can switch the touchpad automatically off, while an external mouse is plugged or while you are typing.|http://synaptiks.lunaryorn.de|{{Pkg|synaptiks}}}}
 
 
== Advanced Configuration ==
 
=== Using xinput to determine touchpad capabilities ===
 
 
Depending on your model, synaptic touchpads may have or lack capabilities. We can determine which capabilities your hardware supports by using {{ic|xinput}}.
 
Depending on your model, synaptic touchpads may have or lack capabilities. We can determine which capabilities your hardware supports by using {{ic|xinput}}.
 
* left, middle and right hardware buttons
 
* left, middle and right hardware buttons
Line 134: Line 122:
  
 
First, find the name of your touchpad:
 
First, find the name of your touchpad:
{{bc|$ xinput -list}}
+
 
 +
$ xinput list
  
 
You can now use {{ic|xinput}} to find your touchpad's capabilities:
 
You can now use {{ic|xinput}} to find your touchpad's capabilities:
 +
 
  $ xinput list-props "SynPS/2 Synaptics TouchPad" | grep Capabilities
 
  $ xinput list-props "SynPS/2 Synaptics TouchPad" | grep Capabilities
+
 
      Synaptics Capabillities (309):  1, 0, 1, 0, 0, 1, 1
+
  Synaptics Capabilities (309):  1, 0, 1, 0, 0, 1, 1
  
 
From left to right, this shows:
 
From left to right, this shows:
Line 150: Line 140:
 
* (1) device can configure horizontal resolution
 
* (1) device can configure horizontal resolution
  
Use {{ic|xinput list-props "SynPS/2 Synaptics TouchPad"}} to list all device properties.
+
Use {{ic|xinput list-props "SynPS/2 Synaptics TouchPad"}} to list all device properties. See {{ic|synaptics(4)}} for full documentation of the Synaptics properties.
  
 
=== Synclient ===
 
=== Synclient ===
 +
 
Synclient can configure every option available to the user as documented in {{ic|$ man synaptics}}. A full list of the current user settings can be brought up:
 
Synclient can configure every option available to the user as documented in {{ic|$ man synaptics}}. A full list of the current user settings can be brought up:
{{bc|$ synclient -l}}
+
 
 +
$ synclient -l
  
 
Every listed configuration option can be controlled through synclient, for example:
 
Every listed configuration option can be controlled through synclient, for example:
$ synclient PalmDetect=1 (to enable palm detection)
 
$ synclient TapButton1=1 (configure button events)
 
$ synclient TouchpadOff=1 (disable the touchpad)
 
  
After you have successfully tried and tested your options through synclient, you can make these changes permanent by adding them to {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}}.
+
* Enable palm detection: {{ic|1=$ synclient PalmDetect=1}}
 +
* Configure button events (right button event for two finger tap here): {{ic|1=$ synclient TapButton2=3}}
 +
* Disable the touchpad: {{ic|1=$ synclient TouchpadOff=1}}  
  
The synclient monitor can display pressure and placement on the touchpad in real-time, allowing further refinement of the default Synaptics settings.
+
After you have successfully tried and tested your options through synclient, you can make these changes permanent by adding them to {{ic|/etc/X11/xorg.conf.d/70-synaptics.conf}}.
  
You can start the Synaptics monitor with the following command:
+
=== evtest ===
{{bc|$ synclient -m 100}}
+
Where -m activates the monitor and the following number specifies the update interval in milliseconds.
+
  
This monitor provides information about the current state of your touchpad. For example, if you move the mouse with the touchpad, the x and y values in the monitor will change. Therewith you can easy figure out your touchpad's dimension which is defined in the LeftEdge-, RightEdge-, BottomEdge- and TopEdge-Options.
+
The tool {{Pkg|evtest}} can display pressure and placement on the touchpad in real-time, allowing further refinement of the default Synaptics settings. The evtest monitoring can be started with:
  
The abbreviations for the parameters are as follow:
+
$ evtest /dev/input/event''X''
  
{| class="wikitable"
+
''X'' denotes the touchpad's ID. It can be found by looking at the output of {{ic|cat /proc/bus/input/devices}}.
|- align="left"
+
!width="200"|Abbreviation
+
!width="400|Description
+
|-
+
|'''time'''
+
|Time in seconds since the logging was started.
+
|-
+
|'''x, y'''
+
|The x/y coordinates of the finger on the touchpad. The origin is in the upper left corner.
+
|-
+
|'''z'''
+
|The pressure value. It represents the pressure you are using to navigate on your touchpad.
+
|-
+
|'''f'''
+
|Number of fingers currently touching the touchpad.
+
|-
+
|'''w'''
+
|Value that represents the finger width.
+
|-
+
|'''l,r,u,d,m,multi'''
+
|Those values represent the state of the left, right, up, down, middle and multi buttons pressed where zero means not pressed and one means pressed.
+
|-
+
|'''gl,gm,gr'''
+
|For touchpads which have a guest device, this are the associated button states for guest left, guest middle and guest right pressed (1) and not pressed (0).
+
|-
+
|'''gdx, gdy'''
+
|x/y coordinates of the guest device.
+
|}
+
If a value constantly is zero, it implies that this option is not supported by your device.
+
  
Now use {{ic|synclient}} to test new values. For example, to adjust minimum pointer speed:
+
evtest needs exclusive access to the device which means it cannot be run together with an X server instance. You can either kill the X server or run evtest from a different virtual terminal (e.g., by pressing {{ic|Ctrl+Alt+2}}).
  
$ synclient MinSpeed=0.5
+
=== xev ===
  
To make the changes permanent, they will need to be put in your {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}} file.
+
The tool {{Pkg|xorg-xev}} can display taps, clicks, pressure, placement and other measured parameters in real-time, allowing still further refinement of the default Synaptics settings. xev can be run in X and needs no specifics. using the "-event" parameter, it is possible to restrict the types of events that are reported.
  
 
=== Circular Scrolling ===
 
=== Circular Scrolling ===
 +
 
Circular scrolling is a feature that Synaptics offers which closely resembles the behaviour of iPods. Instead of (or additional to) scrolling horizontally or vertically, you can scroll circularly. Some users find this faster and more precise.
 
Circular scrolling is a feature that Synaptics offers which closely resembles the behaviour of iPods. Instead of (or additional to) scrolling horizontally or vertically, you can scroll circularly. Some users find this faster and more precise.
To enable circular scrolling, add the following options to the touchpad device section of {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}}:
+
To enable circular scrolling, add the following options to the touchpad device section of {{ic|/etc/X11/xorg.conf.d/70-synaptics.conf}}:
{{hc|/etc/X11/xorg.conf.d/10-synaptics.conf|<nowiki>
+
{{hc|/etc/X11/xorg.conf.d/70-synaptics.conf|<nowiki>
Section "InputClass"
+
Section "InputClass"
        ...
+
    ...
        Option      "CircularScrolling"          "on"
+
    Option      "CircularScrolling"          "on"
        Option      "CircScrollTrigger"          "0"
+
    Option      "CircScrollTrigger"          "0"
        ...
+
    ...
EndSection
+
EndSection
 
</nowiki>}}
 
</nowiki>}}
  
 
The option '''CircScrollTrigger''' may be one of the following values, determining which edge circular scrolling should start:
 
The option '''CircScrollTrigger''' may be one of the following values, determining which edge circular scrolling should start:
 +
 
  0    All Edges
 
  0    All Edges
 
  1    Top Edge
 
  1    Top Edge
Line 237: Line 199:
 
To scroll fast, draw small circles in the center of your touchpad. To scroll slowly and more precise, draw large circles.
 
To scroll fast, draw small circles in the center of your touchpad. To scroll slowly and more precise, draw large circles.
  
=== Natural Scrolling ===
+
=== Natural scrolling ===
It is possible to enable natural scrolling through synaptics. Simply use negative values for {{ic|VertScrollDelta}} and {{ic|VertScrollDelta}} like so:
+
 
{{hc|/etc/X11/xorg.conf.d/10-synaptics.conf|<nowiki>
+
It is possible to enable natural scrolling through synaptics. Simply use negative values for {{ic|VertScrollDelta}} and {{ic|HorizScrollDelta}} like so:
Section "InputClass"
+
 
        ...
+
{{hc|/etc/X11/xorg.conf.d/70-synaptics.conf|<nowiki>
        Option      "VertScrollDelta"          "-111"
+
Section "InputClass"
        Option      "HorizScrollDelta"        "-111"
+
    ...
        ...
+
    Option      "VertScrollDelta"          "-111"
EndSection
+
    Option      "HorizScrollDelta"        "-111"
 +
    ...
 +
EndSection
 
</nowiki>}}
 
</nowiki>}}
  
=== Software Toggle ===
+
=== Software toggle ===
You may find it useful to have a software toggle that will turn on or off your touchpad, especially if it is extremely sensitive and you are doing a lot of typing. Please also see [[#Disable touchpad upon external mouse detection]] as that may be better solution, a matter of choice.  The advantage here is you have the control, while the other solution has a daemon determine when to turn off the trackpad.
+
  
You will want to grab [[xbindkeys]] if you do not already have key binding software.
+
You might want to turn the touchpad on and off with a simple button click or shortcut. This can be done by binding the following ''xinput''-based script to a keyboard event as explained in [[Extra keyboard keys in Xorg]]:
  
Then save this script to something such as {{ic|/sbin/trackpad-toggle.sh}}:
+
{{hc|/usr/local/bin/touchpad_toggle.sh|2=<nowiki>
{{hc|/sbin/trackpad-toggle.sh|<nowiki>
+
#!/bin/bash
#!/bin/bash
+
+
synclient TouchpadOff=$(synclient -l | grep -c 'TouchpadOff.*=.*0')
+
  
 +
declare -i ID
 +
ID=`xinput list | grep -Eio '(touchpad|glidepoint)\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
 +
declare -i STATE
 +
STATE=`xinput list-props $ID|grep 'Device Enabled'|awk '{print $4}'`
 +
if [ $STATE -eq 1 ]
 +
then
 +
    xinput disable $ID
 +
    # echo "Touchpad disabled."
 +
    # notify-send 'Touchpad' 'Disabled' -i /usr/share/icons/Adwaita/48x48/devices/input-touchpad.png
 +
else
 +
    xinput enable $ID
 +
    # echo "Touchpad enabled."
 +
    # notify-send 'Touchpad' 'Enabled' -i /usr/share/icons/Adwaita/48x48/devices/input-touchpad.png
 +
fi
 
</nowiki>}}
 
</nowiki>}}
  
Then finally add a key binding to use the script. It is best to call with xbindkeys like so (file {{ic|~/.xbindkeysrc}}):
+
{{Tip|When using external monitors with [[bumblebee]], the touchpad can be configured on the second X server by prepending {{ic|1=DISPLAY=:8}} to the command.}}
{{hc|~/.xbindkeysrc|<nowiki>
+
 
"/sbin/trackpad-toggle.sh"
+
Alternatively, {{ic|synclient}} can be used to toggle the touchpad. However, it can only turn off touch events but not physical clickpad button usage:
    m:0x5 + c:65
+
 
    Control+Shift + space
+
{{hc|/usr/local/bin/touchpad.sh|<nowiki>
 +
#!/bin/bash
 +
 
 +
synclient TouchpadOff=$(synclient -l | grep -c 'TouchpadOff.*=.*0')
 
</nowiki>}}
 
</nowiki>}}
  
Now just (re)start {{ic|xbindkeys}} and {{keypress|Ctrl}}+{{keypress|Shift}}+{{keypress|Space}} will now toggle your trackpad!
+
=== Disable touchpad while typing ===
  
Of course you could easily use any other keybinding software, such as the ones provided by Xfce4 and GNOME.
+
==== Using the driver's automatic palm detection ====
  
=== Disable Trackpad while Typing ===
+
First of all you should test if it works properly for your touchpad and if the settings are accurate. Enable palm detection with
==== Using automatic palm detection ====
+
First of all you should test if it works properly for your trackpad and if the settings are accurate:
+
  
 
  $ synclient PalmDetect=1
 
  $ synclient PalmDetect=1
  
Then test the typing. You can tweak the detection with:
+
Then test the typing. You can tweak the detection by setting the minimum width for the touch to be considered a palm, for example
  
  $ synclient PalmMinWidth=
+
  $ synclient PalmMinWidth=8
which is the width of the area your hand touches, and
+
  
$ synclient PalmMinZ=
+
And you can tweak the minimum pressure required for the touch to be considered a palm, for example
  
which is the minimum Z distance at which the detection is performed.
+
$ synclient PalmMinZ=100
  
Once you have found the correct settings, save them into {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}} like this:
+
{{Tip|To help find the best values for palm detection, you can use {{pkg|evtest}} to see the width and Z values reported during touchpad use.}}
  
{{bc|<nowiki>#synclient PalmDetect=1
+
Once you have found the correct settings, you can add them to your [[#Configuration|config file]]:
 +
 
 +
{{bc|<nowiki>
 
Option "PalmDetect" "1"
 
Option "PalmDetect" "1"
#synclient PalmMinWidth=10
+
Option "PalmMinWidth" "8"
Option "PalmMinWidth" "10"
+
Option "PalmMinZ" "100"
#synclient PalmMinZ=200
+
</nowiki>}}
Option "PalmMinZ" "200"</nowiki>}}
+
  
==== Using .xinitrc ====
+
{{Warning|1=For some touchpads, an [https://bugzilla.kernel.org/show_bug.cgi?id=77161 issue] with the kernel can cause the palm width to always be reported as 0. This breaks palm detection in a majority of cases. Pending an actual fix, you can [https://gist.github.com/silverhammermba/a231c8156ecaa63c86f1 patch] the synaptics package to use only Z for palm detection.}}
  
To have the touchpad disabled automatically when you begin typing, add the following line to your {{ic|~/.xinitrc}} before you run your window manager (if not using a login manager):
+
{{Tip|If you experience problems with consistent palm detection for your hardware, an alternative to try is [[libinput]].}}
{{bc|$ syndaemon -t -k -i 2 -d &}}
+
  
; '''-i 2''': sets the idle time to 2 seconds. The idle time specifies how many seconds to wait after the last key-press before enabling the touchpad again.
+
==== Using syndaemon ====
; '''-t''': tells the daemon not to disable mouse movement when typing and only disable tapping and scrolling.
+
; '''-k''': tells the daemon to ignore modifier keys when monitoring keyboard activity (e.g.: allows Ctrl+Left Click).
+
; '''-d''': starts as a daemon, in the background.
+
  
More details are available in the man page:
+
{{ic|syndaemon}} monitors keyboard activity and disables the touchpad while typing. It has several options to control when the disabling occurs. View them with
{{bc|$ man syndaemon}}
+
  
If you are using a login manager, you will need to specify the command where your DE allows you to do so.
+
$ syndaemon -h
  
==== Using a Login Manager ====
+
For example, to disable tapping and scrolling for 0.5 seconds after each keypress (ignoring modifier keys like Ctrl), use
  
The "-d" option is necessary to start syndaemon as a background process for post Login instructions.
+
$ syndaemon -i 0.5 -t -K -R
  
'''For GNOME: (GDM)'''
+
Once you have determined the options you like, you should use your login manager or [[xinitrc]] to have it run automatically when X starts. The {{ic|-d}} option will make it start in the background as a daemon.
  
To start syndaemon you need to use Gnome's Startup Applications Preferences program. Login to Gnome and go to '''System > Preferences > Startup Applications'''. In the Startup Programs tab click the '''Add''' button. Name the Startup Program whatever you like and input any comments you like (or leave this field blank). In the command field add:
+
=== Disable touchpad on mouse detection ===
  
In Gnome 3 run gnome-session-properties to access startup applications.  
+
With the assistance of [[udev]], it is possible to automatically disable the touchpad if an external mouse has been plugged in.  To achieve this, use one of the following rules.
  
{{bc|$ syndaemon -t -k -i 2 -d &}}
+
==== Basic desktop ====
  
When you are done, click the '''Add''' button in the '''Add Startup Program''' dialogue. Make sure the check box next to the startup program you have created is checked, in the list of additional startup programs. Close the '''Startup Applications Preferences''' window and you are done.
+
This is a basic rule generally for non-"desktop environment" sessions:
  
'''For KDE: (KDM)'''
+
{{hc|/etc/udev/rules.d/01-touchpad.rules|2=
 +
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/''username''/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=1"
 +
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/''username''/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=0"
 +
}}
  
Goto '''System Settings > Startup and Shutdown > Autostart''', then click '''Add Program''', enter:
+
If the touchpad is always deactivated at startup, even when no mouse is plugged in, try adding the following criteria between the KERNEL and ACTION parameters above:
  
{{bc| syndaemon -t -k -i 2 -d &}}
+
ATTRS{name}!="*TouchPad", ATTRS{name}!="*Stick",
  
Then check '''Run in terminal'''.
+
==== GDM ====
  
== Troubleshooting ==
+
{{Accuracy|saying that GDM ''usually'' does something does not make sense}}
=== xorg.conf.d/10-synaptics.conf doesn't seem to apply under GNOME and MATE ===
+
[[GNOME]] and [[MATE]], by default, will overwrite various options for your touch-pad. This includes configurable features for which there is no graphical configuration within GNOME's system control panel. This may cause it to appear that {{ic|/etc/X11/xorg.conf.d/10-syanaptics.conf}} isn't applied. Please refer to the GNOME section in this article to prevent this behavior.
+
  
* [[Touchpad_Synaptics#GNOME]]
+
GDM usually stores the Xauthority files in {{ic|/var/run/gdm}} in a randomly-named directory. You should find your actual path to the Xauthority file which can be done using {{ic|ps ax}}. For some reason multiple authority files may appear for a user, so a rule like will be necessary:
  
=== ALPS Touchpads ===
+
{{hc|/etc/udev/rules.d/01-touchpad.rules|2=
{{Expansion}}
+
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="add", PROGRAM="/usr/bin/find /var/run/gdm -name ''username'' -print0 -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=1"
{{Box YELLOW|TODO|needs to be rewritten for udev}}
+
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="remove", PROGRAM="/usr/bin/find /var/run/gdm -name ''username'' -print0 -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=0"
 +
}}
  
For ALPS Touchpads, if the above configuration does not provide the desired results, try the following configuration instead:
+
Furthermore, you should validate that your udev script is running properly! You can check for the conditions using {{ic| udevadm monitor -p}} which must be run as root.
  
{{hc|/etc/X11/xorg.conf.d/10-synaptics.conf|
+
===== With syndaemon running =====
  Section "ServerLayout"
+
    ...
+
    InputDevice    "USB Mouse" "CorePointer"
+
    InputDevice    "Touchpad"  "SendCoreEvents"
+
  EndSection
+
  
  Section "InputDevice"
+
{{ic|syndaemon}} whether started by the [[#Using syndaemon|user]] or the desktop environment can conflict with synclient and will need to be disabled. A rule like this will be needed:
        Identifier "Touchpad"
+
 
    Driver  "synaptics"
+
{{hc|/etc/udev/rules.d/01-touchpad.rules|2=
    Option  "Device"  "/dev/input/mouse0"
+
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="add", PROGRAM="/usr/bin/find /var/run/gdm -name ''username'' -print -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/bin/sh -c '/usr/bin/synclient TouchpadOff=1 ; sleep 1; /bin/killall syndaemon; '"
    Option  "Protocol"  "auto-dev"
+
    Option  "LeftEdge"   "130"
+
    Option  "RightEdge"  "840"
+
    Option  "TopEdge"  "130"
+
    Option  "BottomEdge"  "640"
+
    Option  "FingerLow"  "7"
+
    Option  "FingerHigh"  "8"
+
    Option  "MaxTapTime"  "180"
+
    Option  "MaxTapMove"  "110"
+
    Option  "EmulateMidButtonTime"  "75"
+
    Option  "VertScrollDelta"  "20"
+
    Option  "HorizScrollDelta"  "20"
+
    Option  "MinSpeed"  "0.25"
+
    Option  "MaxSpeed"   "0.50"
+
    Option  "AccelFactor"  "0.010"
+
    Option  "EdgeMotionMinSpeed"   "200"
+
    Option  "EdgeMotionMaxSpeed"  "200"
+
    Option  "UpDownScrolling"  "1"
+
    Option  "CircularScrolling"  "1"
+
    Option  "CircScrollDelta"  "0.1"
+
    Option  "CircScrollTrigger"  "2"
+
    Option  "Emulate3Buttons"  "on"
+
  EndSection
+
 
}}
 
}}
 +
 +
===== touchpad-state =====
 +
 +
An AUR package {{aur|touchpad-state-git}} has been created around the udev rules above.  It includes a udev rule and script:
 +
 +
touchpad-state [--off] [--on]
 +
 +
==== GNOME ====
 +
 +
GNOME users can install GNOME shell extension [https://extensions.gnome.org/extension/131/touchpad-indicator/ Touchpad Indicator], change "Switch Method" to "Synclient" and enable "Automatically switch Touchpad On/Off" in its preferences.
 +
 +
==== KDE ====
 +
 +
If using Plasma, the package {{Pkg|plasma-desktop}} can be used to manage the touchpad.
 +
 +
==== System with multiple X sessions ====
 +
 +
{{Accuracy|Hard-coded {{ic|DISPLAY}} variable does not work with multiple X sessions.}}
 +
 +
For an environment where multiple users are present, a slightly different approach is needed to detect the current users X environment. This script will help achieving this:
 +
 +
{{hc|/usr/bin/mouse-pnp-event-handler.sh|<nowiki>
 +
#!/bin/sh
 +
## $1 = "add" / "remove"
 +
## $2 = %k from udev
 +
 +
## Set TRACKPAD_NAME according to your configuration.
 +
## Check your trackpad name with:
 +
## find /sys/class/input/ -name mouse* -exec udevadm info -a {} \; | grep 'ATTRS{name}'
 +
TRACKPAD_NAME="SynPS/2 Synaptics TouchPad"
 +
 +
USERLIST=$(w -h | cut -d' ' -f1 | sort | uniq)
 +
MOUSELIST=$(find /sys/class/input/ -name mouse*)
 +
 +
for CUR_USER in ${USERLIST}; do
 +
        CUR_USER_XAUTH="$(sudo -Hiu ${CUR_USER} env | grep -e "^HOME=" | cut -d'=' -f2)/.Xauthority"
 +
 +
 
 +
        ## Can't find a way to get another users DISPLAY variable from an isolated root environment. Have to set it manually.
 +
        #CUR_USER_DISPL="$(sudo -Hiu ${CUR_USER} env | grep -e "^DISPLAY=" | cut -d'=' -f2)"
 +
        CUR_USER_DISPL=":0"
 +
 +
        export XAUTHORITY="${CUR_USER_XAUTH}"
 +
        export DISPLAY="${CUR_USER_DISPL}"
 +
 +
        if [ -f "${CUR_USER_XAUTH}" ]; then
 +
                case "$1" in
 +
                        "add")
 +
                                /usr/bin/synclient TouchpadOff=1
 +
                                /usr/bin/logger "USB mouse plugged. Disabling touchpad for $CUR_USER. ($XAUTHORITY - $DISPLAY)"
 +
                        ;;
 +
                        "remove")
 +
                                ## Only execute synclient if there are no external USB mice connected to the system.
 +
                                EXT_MOUSE_FOUND="0"
 +
                                for CUR_MOUSE in ${MOUSELIST}; do
 +
                                        if [ "$(cat ${CUR_MOUSE}/device/name)" != "${TRACKPAD_NAME}" ]; then
 +
                                                EXT_MOUSE_FOUND="1"
 +
                                        fi
 +
                                done
 +
                                if [ "${EXT_MOUSE_FOUND}" == "0" ]; then
 +
                                        /usr/bin/synclient TouchpadOff=0
 +
                                        /usr/bin/logger "No additional external mice found. Enabling touchpad for $CUR_USER."
 +
                                else
 +
                                        logger "Additional external mice found. Won't enable touchpad yet for $CUR_USER."
 +
                                fi
 +
                        ;;
 +
                esac
 +
        fi
 +
done
 +
</nowiki>}}
 +
 +
Update the {{ic|TRACKPAD_NAME}} variable for your system configuration.
 +
Run {{ic|<nowiki>find /sys/class/input/ -name mouse* -exec udevadm info -a {} \; | grep 'ATTRS{name}'</nowiki>}} to get a list of useful mice-names. Choose the one for your trackpad.
 +
 +
Then have udev run this script when USB mices are plugged in or out, with these udev rules:
 +
 +
{{hc|/etc/udev/rules.d/01-touchpad.rules|2=
 +
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", RUN+="/usr/bin/mouse-pnp-event-handler.sh add %k"
 +
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", RUN+="/usr/bin/mouse-pnp-event-handler.sh remove %k"
 +
}}
 +
 +
=== Buttonless touchpads (aka ClickPads) ===
 +
 +
Ever more laptops have a special kind of touchpad which has a single mouse button as part of the tracking plate, instead of external buttons. For example, the 2015 Dell XPS 13, HP series 4500 ProBooks, ThinkPad X220 and X1 ThinkPad series have this kind of a touchpad. By default, the whole button area is detected as a left button, so right and middle-click functions and click + drag will not work. It is possible to define two and three finger clicks as right and middle button clicks, and/or to define parts of the click pad surface as right and middle buttons. Note that although the driver registers multiple touches, it does not track individual fingers (as of version 1.7.1) which results in confusing behavior when using physical buttons of a clickpad for drag-and-drop and other gestures: you have to click with two or three fingers but then only move one of them while holding the button down with another.  You can look into the {{AUR|xf86-input-mtrack}} driver for better multitouch support.
 +
 +
Some desktop environments (KDE and GNOME at least) define sane and useful default configurations for clickpads, providing a right button at the bottom right of the pad, recognising two and three-finger clicks anywhere on the pad as right and middle clicks, and providing configuration options to define two and three-finger taps as right and middle clicks. If your desktop does not do this, or if you want more control, you can modify the touchpad section in {{ic|/etc/X11/xorg.conf.d/70-synaptics.conf}} (or better, of your custom synaptics configuration file prefixed with a higher number). For example:
 +
 +
{{hc|/etc/X11/xorg.conf.d/70-synaptics.conf|<nowiki>
 +
Section "InputClass"
 +
    Identifier "touchpad"
 +
    Driver "synaptics"
 +
    MatchIsTouchpad "on"
 +
        # Enable clickpad/multitouch support
 +
        Option "ClickPad" "true"
 +
        # Middle-button emulation is not supported
 +
        Option "EmulateMidButtonTime" "0"
 +
        # Define right soft button at the bottom
 +
        Option "SoftButtonAreas"  "50% 0 82% 0 0 0 0 0"
 +
EndSection
 +
</nowiki>}}
 +
 +
The format for the SoftButtonAreas option is (from {{ic|man 4 synaptics}}):
 +
{{bc|RightButtonAreaLeft RightButtonAreaRight RightButtonAreaTop RightButtonAreaBottom  MiddleButtonAreaLeft MiddleButtonAreaRight MiddleButtonAreaTop MiddleButtonAreaBottom}}
 +
 +
The above "SoftButtonAreas" option is commonly found in documentation or synaptics packages, and it defines the right half of the bottom 18% of the touchpad as a right button. There is '''no middle button''' defined. If you want to define a middle button remember one key piece of information from the manual; '''edge set to 0 extends to infinity in that direction.'''
 +
 +
In the following example the right button will occupy the rightmost 40% of the button area and the middle button 20% of it in the center. The leftmost 40% remains as a left button (as does the rest of the clickpad):
 +
 +
...
 +
Option    "SoftButtonAreas"  "60% 0 82% 0 40% 59% 82% 0"
 +
...
 +
 +
You can use {{ic|<nowiki>synclient</nowiki>}} to check the soft button areas:
 +
 +
{{hc|<nowiki>$ synclient -l | grep -i ButtonArea</nowiki>|<nowiki>
 +
        RightButtonAreaLeft    = 3914
 +
        RightButtonAreaRight    = 0
 +
        RightButtonAreaTop      = 3918
 +
        RightButtonAreaBottom  = 0
 +
        MiddleButtonAreaLeft    = 3100
 +
        MiddleButtonAreaRight  = 3873
 +
        MiddleButtonAreaTop    = 3918
 +
        MiddleButtonAreaBottom  = 0
 +
</nowiki>}}
 +
 +
If your buttons are not working, soft button areas are not changing, ensure you do not have a synaptics configuration file distributed by a package which is overriding your custom settings (ie. some AUR packages distribute configurations prefixed with very high numbers).
 +
 +
These settings cannot be modified on the fly with {{ic|<nowiki>synclient</nowiki>}}, however, {{ic|<nowiki>xinput</nowiki>}} works:
 +
 +
xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Soft Button Areas" 4000 0 4063 0 3000 4000 4063 0
 +
 +
You cannot use percentages with this command, so look at {{ic|/var/log/Xorg.0.log}} to figure out the touchpad x and y-axis ranges.
 +
 +
==== Bottom edge correction ====
 +
 +
In some cases, for example Toshiba Satellite P50, everything work out of the box except often your click are seen as mouse movement and the cursor will jump away just before registering the click.
 +
This can be easily solved running
 +
 +
$ synclient -l | grep BottomEdge
 +
 +
take the BottomEdge value and subtract a the wanted height of your button, then temporary apply with
 +
 +
$ synclient AreaBottomEdge=4000
 +
 +
when a good value has been found make it a fixed correction with
 +
 +
{{hc|/etc/X11/xorg.conf.d/70-synaptics.conf|<nowiki>
 +
...
 +
Option "AreaBottomEdge"        "4000"
 +
...
 +
</nowiki>}}
 +
 +
{{Note|The area will not act as touchpad if the touch '''begins''' in that area, but it can still be used if the touch has originated outside.}}
 +
 +
== Troubleshooting ==
 +
 +
=== Touchpad does not work after resuming from hibernate/suspend ===
 +
Occasionally touchpads will fail to work when the computer resumes from sleep or hibernation. This can often be corrected without rebooting by
 +
* Switching to a console and back again,
 +
* entering sleep mode again, and resuming again, or
 +
* locating the correct kernel module, then removing it and inserting it again.
 +
{{Note|You can use Ctrl-Alt-F1 through F8 to switch to a console without using the mouse.}}
 +
modprobe -r psmouse #psmouse happens to be the kernel module for my touchpad (Alps DualPoint)
 +
modprobe psmouse
 +
Now switch back to the tty that X is running on. If you chose the right module, your touchpad should be working again.
 +
 +
=== xorg.conf.d/70-synaptics.conf does not seem to apply in MATE ===
 +
 +
[[MATE]] will by default overwrite various options for your touchpad. This includes configurable features for which there is no graphical configuration within MATE's system control panel. This may cause it to appear that {{ic|/etc/X11/xorg.conf.d/70-synaptics.conf}} is not applied. Follow [[#MATE]] to prevent this behavior.
  
 
=== The touchpad is not working, Xorg.0.log shows "Query no Synaptics: 6003C8" ===
 
=== The touchpad is not working, Xorg.0.log shows "Query no Synaptics: 6003C8" ===
 +
 
Due to the way synaptics is currently set-up, 2 instances of the synaptics module are loaded. We can recognize this situation by opening the xorg log file ({{ic|/var/log/Xorg.0.log}}) and noticing this:
 
Due to the way synaptics is currently set-up, 2 instances of the synaptics module are loaded. We can recognize this situation by opening the xorg log file ({{ic|/var/log/Xorg.0.log}}) and noticing this:
 +
 
{{hc|/var/log/Xorg.0.log|<nowiki>
 
{{hc|/var/log/Xorg.0.log|<nowiki>
 
  [ 9304.803] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "evdev touchpad catchall"
 
  [ 9304.803] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "evdev touchpad catchall"
Line 390: Line 505:
 
Notice how 2 differently named instances of the module are being loaded. In some cases, this causes the touchpad to become nonfunctional.
 
Notice how 2 differently named instances of the module are being loaded. In some cases, this causes the touchpad to become nonfunctional.
  
We can prevent this double loading by adding {{ic|MatchDevicePath "/dev/input/event*"}} to our {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}} file:
+
We can prevent this double loading by adding {{ic|MatchDevicePath "/dev/input/event*"}} to our {{ic|/etc/X11/xorg.conf.d/70-synaptics.conf}} file:
{{hc|/etc/X11/xorg.conf.d/10-synaptics.conf|<nowiki>
+
 
Section "InputClass"
+
{{hc|/etc/X11/xorg.conf.d/70-synaptics.conf|<nowiki>
      Identifier "touchpad catchall"
+
Section "InputClass"
      Driver "synaptics"
+
    Identifier "touchpad catchall"
      MatchIsTouchpad "on"
+
    Driver "synaptics"
      MatchDevicePath "/dev/input/event*"
+
    MatchIsTouchpad "on"
            Option "TapButton1" "1"
+
    MatchDevicePath "/dev/input/event*"
            Option "TapButton2" "2"
+
        Option "TapButton1" "1"
            Option "TapButton3" "3"
+
        Option "TapButton2" "2"
EndSection  
+
        Option "TapButton3" "3"
 +
EndSection  
 
</nowiki>}}
 
</nowiki>}}
  
Line 412: Line 528:
  
 
=== Touchpad detected as "PS/2 Generic Mouse" or "Logitech PS/2 mouse" ===
 
=== Touchpad detected as "PS/2 Generic Mouse" or "Logitech PS/2 mouse" ===
This is caused by a [https://bugzilla.kernel.org/show_bug.cgi?id=27442 kernel bug] which was fixed in kernel version 3.3. Wrongly detected touchpads cannot be configured with the Synaptic input driver. To fix this, simply install the [[AUR]] package {{AUR|psmouse-alps-driver}}.
 
  
Among the affected notebooks are the following models:
+
This can be caused by a number of issues;
  
* Acer Aspire 7750G
+
==== Elantech touchpads ====
* Dell Latitude E6520 and E6530 (ALPS DualPoint TouchPad), Inspiron N5110 (ALPS GlidePoint), Inspiron 14R Turbo SE7420/SE7520 (ALPS GlidePoint)
+
This can happen with some laptops with an Elantech touchpad, for example the ASUS x53s. In this situation you need {{AUR|psmouse-alps-driver}}{{Broken package link|{{aur-mirror|psmouse-alps-driver}}}} package from [[AUR]].
* Samsung NC110/NF210/QX310/QX410/QX510/SF310/SF410/SF510/RF410/RF510/RF710/RV515
+
  
You can check whether your touchpad is correctly detected by running:
+
==== Laptops with touchscreen & touchpad ====
 +
There also seems to be a problem with laptops which have both a touchscreen & a touchpad, such as the Dell XPS 12 or Dell XPS 13. To fix this, you can [[blacklisting|blacklist]] the {{ic|i2c_hid}} driver, this does have the side-effect of disabling the touchscreen though.
  
{{bc|$ xinput list}}
+
This [http://www.spinics.net/lists/linux-input/msg27768.html seems to be a known problem]. Also see [https://bbs.archlinux.org/viewtopic.php?pid=1419078 this thread].
  
More information can be found in [https://bbs.archlinux.org/viewtopic.php?id=117109 this thread].
+
Post kernel 3.15, having the module blacklisted may cause touchpad to stop working completely. Removing the blacklist should allow this to start working with limited functionality, see {{Bug|40921}}.
  
=== Non-functional Synaptics Special Abilities (multi-tap, scrolling, etc.) ===
+
=== Non-functional Synaptics special abilities (multi-tap, scrolling, etc.) ===
In some cases Synaptics touchpads only work partially. Features like two-finger scrolling or two-finger middle-click do not work even if properly enabled. This is probably related to the  [[#The_touchpad_is_not_working.2C_Xorg.0.log_shows_.22Query_no_Synaptics:_6003C8.22|The touchpad is not working]] problem mentioned above. Fix is the same, prevent double module loading.
+
  
If preventing the module from loading twice does not solve your issue, try commenting out the toggle "MatchIsTouchpad" (which is now included by default in the synaptics config).
+
In some cases Synaptics touchpads only work partially. Features like two-finger scrolling or two-finger middle-click do not work even if properly enabled. This is probably related to the [[#The touchpad is not working, Xorg.0.log shows "Query no Synaptics: 6003C8"|The touchpad is not working]] problem mentioned above. Fix is the same, prevent double module loading.
  
=== Disable touchpad upon external mouse detection ===
+
If preventing the module from loading twice does not solve your issue, try commenting out the toggle "MatchIsTouchpad" (which is now included by default in the synaptics config).
With the assistance of [[udev]], it is possible to automatically disable the touchpad if an external mouse has been plugged in. To achieve this, add the following udev rules to {{ic|/etc/udev/rules.d/01-touchpad.rules}}:
+
{{hc|/etc/udev/rules.d/01-touchpad.rules|<nowiki>
+
ACTION=="add", SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/<your username>/.Xauthority", ENV{ID_CLASS}="mouse", ENV{REMOVE_CMD}="/usr/bin/synclient TouchpadOff=0", RUN+="/usr/bin/synclient TouchpadOff=1"
+
+
</nowiki>}}
+
 
+
GDM stores Xauthority files in {{ic|/var/run/gdm}} in a randomly-named directory. For some reason also multiple authority files may appear for a user. So you need udev rules like these:
+
 
+
ACTION=="add", KERNEL=="mouse[0-9]", SUBSYSTEM=="input", PROGRAM="/usr/bin/find /var/run/gdm -name *username* -print -quit", ENV{DISPLAY}=":0.0",
+
ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=1"
+
ACTION=="remove", KERNEL=="mouse[0-9]", SUBSYSTEM=="input", PROGRAM="/usr/bin/find /var/run/gdm -name *username* -print -quit", ENV{DISPLAY}=":0.0",
+
ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=0"
+
  
{{Note|[[udev]] rules must be a single line each, so format accordingly.}}
+
If clicking with either 2 or 3 fingers is interpreted as a right-click, so you cannot get a middle click either way regardless of configuration, this bug is probably the culprit:  https://bugs.freedesktop.org/show_bug.cgi?id=55365
{{Note|These [[udev]] rules conflict with syndaemon (see [[#Using .xinitrc]])}}
+
  
To disable touchpad and simultaneously kill syndaemon, you can use a rule like this:
+
=== Cursor jump ===
  
<nowiki>ACTION=="add", KERNEL=="mouse[0-9]", SUBSYSTEM=="input", PROGRAM="/usr/bin/find /var/run/gdm -name *username* -print -quit", ENV{DISPLAY}=":0.0",ENV{XAUTHORITY}="$result/database", RUN+="/bin/sh -c '/usr/bin/synclient TouchpadOff=1 ; sleep 1; /bin/killall syndaemon; '"</nowiki>
 
 
If syndaemon starts automatically with mouse removal, then you can combine this with the remove rule above. If you need to start syndaemon yourself, then alter the command accordingly with your favourite syndaemon options.
 
 
=== Cursor Jump ===
 
 
Some users have their cursor inexplicably ''jump'' around the screen. There currently no patch for this, but the developers are aware of the problem and are working on it.
 
Some users have their cursor inexplicably ''jump'' around the screen. There currently no patch for this, but the developers are aware of the problem and are working on it.
  
Another posibility is that you're experiencing ''IRQ losses'' related to the i8042 controller (this device handles the keyboard and the touchpad of many laptops), so you have two posibilities here:
+
Another posibility is that you are experiencing ''IRQ losses'' related to the i8042 controller (this device handles the keyboard and the touchpad of many laptops), so you have two posibilities here:
  
 
1. rmmod && insmod the psmouse module.
 
1. rmmod && insmod the psmouse module.
2. append i8042.nomux=1 to the boot line and reboot your machine.
+
2. append i8042.nomux=1 to your [[kernel parameters]] and reboot your machine.
  
 
=== Touchpad device is not located at {{ic|/dev/input/*}} ===
 
=== Touchpad device is not located at {{ic|/dev/input/*}} ===
 +
 
If that is the case, you can use this command to display information about your input devices:
 
If that is the case, you can use this command to display information about your input devices:
{{bc|$ cat /proc/bus/input/devices}}
+
 
 +
$ cat /proc/bus/input/devices
  
 
Search for an input device which has the name "SynPS/2 Synaptics TouchPad". The "Handlers" section of the output specifies what device you need to specify.
 
Search for an input device which has the name "SynPS/2 Synaptics TouchPad". The "Handlers" section of the output specifies what device you need to specify.
  
 
'''Example output:'''
 
'''Example output:'''
 +
 
{{hc|$ cat /proc/bus/input/devices|<nowiki>
 
{{hc|$ cat /proc/bus/input/devices|<nowiki>
 
  I: Bus=0011 Vendor=0002 Product=0007 Version=0000
 
  I: Bus=0011 Vendor=0002 Product=0007 Version=0000
Line 481: Line 580:
 
In this case, the {{ic|Handlers}} are {{ic|mouse0}} and {{ic|event1}}, so {{ic|/dev/input/mouse0}} would be used.
 
In this case, the {{ic|Handlers}} are {{ic|mouse0}} and {{ic|event1}}, so {{ic|/dev/input/mouse0}} would be used.
  
{{Expansion}}
+
{{Expansion|TODO: explain how to apply this in {{ic|/etc/X11/xorg.conf.d/70-synaptics.conf}}}}
{{Box YELLOW|TODO|explain how to apply this in {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}}}}
+
  
 
=== Firefox and special touchpad events ===
 
=== Firefox and special touchpad events ===
By default, Firefox is set up to do special events upon tapping or scrolling certain parts of your touchpad.
 
You can edit the settings of those actions by typing '''about:config''' in your Firefox address bar.
 
To alter these options, double-click on the line in question, changing "true" to "false" and vise versa.
 
  
To prevent Firefox from scrolling (backward/forward) through browser history and instead scroll through pages, edit these settings as shown:
+
You can enable/disable some special events that Firefox handles upon tapping or scrolling certain parts of your touchpad by editing the settings of those actions.
mousewheel.horizscroll.withnokey.action = 1
+
Type '''about:config''' in your Firefox address bar.
mousewheel.horizscroll.withnokey.sysnumlines = true
+
To alter options, double-click on the line in question.
  
To prevent Firefox from redirecting you to URLs formed from your clipboard content upon tapping the upper-right corner of your touchpad (or middle mouse button), set the following option to "false":
+
==== Firefox 17.0 and later ====
  middlemouse.contentLoadURL = false
+
 
 +
Horizontal scrolling will now by default scroll through pages and not through your history. To reenable Mac-style forward/backward with two-finger swiping, edit:
 +
 
 +
  mousewheel.default.action.override_x = 2
 +
 
 +
You may encounter accidental forwards/backwards while scrolling vertically. To change Firefox's sensitivity to horizontal swipes, edit:
 +
 
 +
mousewheel.default.delta_multiplier_x
 +
 
 +
The optimum value will depend on your touchpad and how you use it, try starting with {{ic|10}}. A negative value will reverse the swipe directions.
  
 
=== Opera: horizontal scrolling issues ===
 
=== Opera: horizontal scrolling issues ===
 +
 
Same as above.
 
Same as above.
To fix it, go to Tools -> Preferences -> Advanced -> Shortcuts. Select "Opera Standard" mouse setup and click "Edit". In "Application" section:
+
To fix it, go to ''Tools > Preferences > Advanced > Shortcuts''. Select "Opera Standard" mouse setup and click "Edit". In "Application" section:
 +
{{Accuracy|Description here is not so clear and i don't use Opera,Please make it clear :)}}
 
* assign key "Button 6" to command "Scroll left"
 
* assign key "Button 6" to command "Scroll left"
 
* assign key "Button 7" to command "Scroll right"
 
* assign key "Button 7" to command "Scroll right"
  
=== Scrolling and multiple actions with Synaptics on LG Laptops ===
+
=== Scrolling and multiple actions with Synaptics on LG laptops ===
 +
 
 
These problems seem to be occurring on several models of LG laptops.
 
These problems seem to be occurring on several models of LG laptops.
 
Symptoms include: when pressing Mouse Button 1, Synaptics interprets it as ScrollUP and a regular button 1 click; same goes for button 2.
 
Symptoms include: when pressing Mouse Button 1, Synaptics interprets it as ScrollUP and a regular button 1 click; same goes for button 2.
  
 
The scrolling issue can be resolved by entering in {{ic|xorg.conf}}:
 
The scrolling issue can be resolved by entering in {{ic|xorg.conf}}:
 +
 
{{hc|/etc/X11/xorg.conf.d/xorg.conf|Option "UpDownScrolling" "0"}}
 
{{hc|/etc/X11/xorg.conf.d/xorg.conf|Option "UpDownScrolling" "0"}}
  
NOTE that this will make Synaptics interpret one button push as three. There is a patch written by Oskar Sandberg[http://www.math.chalmers.se/~ossa/linux/lg_tx_express.html] that removes these clicks.
+
{{Note|This will make Synaptics interpret one button push as three. There is a patch written by Oskar Sandberg[http://www.math.chalmers.se/~ossa/linux/lg_tx_express.html] that removes these clicks.}}
  
 
Apparently, when trying to compile this against the latest version of Synaptics it fails. The solution to this is using the GIT repository for Synaptics[http://web.telia.com/~u89404340/touchpad/synaptics/.git].
 
Apparently, when trying to compile this against the latest version of Synaptics it fails. The solution to this is using the GIT repository for Synaptics[http://web.telia.com/~u89404340/touchpad/synaptics/.git].
  
There is also a package build file in the AUR to automate this: {{AUR|xf86-input-synaptics-lg}}.
+
There is also a package build file in the AUR to automate this: {{AUR|xf86-input-synaptics-lg}}{{Broken package link|{{aur-mirror|xf86-input-synaptics-lg}}}}.
  
 
To build the package after downloading the tarball and unpacking it, execute:
 
To build the package after downloading the tarball and unpacking it, execute:
{{bc|$ cd synaptics-git}}
+
 
{{bc|$ makepkg}}
+
$ cd synaptics-git
 +
$ makepkg
  
 
=== Other external mouse issues ===
 
=== Other external mouse issues ===
 +
 
First, make sure your section describing the external mouse contains this line (or that the line looks like this):
 
First, make sure your section describing the external mouse contains this line (or that the line looks like this):
  
Line 539: Line 649:
  
 
=== Touchpad synchronization issues ===
 
=== Touchpad synchronization issues ===
 +
 +
{{Out of date|section=Outdated "Touchpad synchronization issues" section}}
 +
 
Sometimes the cursor may freeze for several seconds or start acting on its own for no apparent reason. This behavior is accompanied by records in {{ic|/var/log/messages.log}}
 
Sometimes the cursor may freeze for several seconds or start acting on its own for no apparent reason. This behavior is accompanied by records in {{ic|/var/log/messages.log}}
  
Line 552: Line 665:
 
* Try another desktop environment. Some users report that this problem only occurs when using XFCE or GNOME, for whatever reason
 
* Try another desktop environment. Some users report that this problem only occurs when using XFCE or GNOME, for whatever reason
  
=== Delay between a button tap and the actual click ===
+
===Xorg.log.0 shows SynPS/2 Synaptics touchpad can not grab event device, errno=16 ===
If you experience a delay between the tap on the touchpad and the actual click that is registered you need to enable FastTaps:
+
  
To do so, you should add '''Option "FastTaps" "1"''' to {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}} so that you have:
 
{{hc|/etc/X11/xorg.conf.d/10-synaptics.conf|<nowiki>
 
Section "InputClass"
 
      Identifier "Synaptics Touchpad"
 
      Driver "synaptics"
 
      ...
 
      Option "FastTaps" "1"
 
      ...
 
EndSection
 
</nowiki>}}
 
 
=== SynPS/2 Synaptics TouchPad can not grab event device, errno=16 ===
 
 
If you are using Xorg 7.4, you may get a warning like this from {{ic|/var/log/Xorg.0.log}}, thais is because the driver will grab the event device for exclusive use when using the Linux 2.6 event protocol. When it fails, X will return this error message.
 
If you are using Xorg 7.4, you may get a warning like this from {{ic|/var/log/Xorg.0.log}}, thais is because the driver will grab the event device for exclusive use when using the Linux 2.6 event protocol. When it fails, X will return this error message.
  
 
Grabbing the event device means that no other user space or kernel space program sees the touchpad events. This is desirable if the X config file includes {{ic|/dev/input/mice}} as an input device, but is undesirable if you want to monitor the device from user space.
 
Grabbing the event device means that no other user space or kernel space program sees the touchpad events. This is desirable if the X config file includes {{ic|/dev/input/mice}} as an input device, but is undesirable if you want to monitor the device from user space.
  
If you want to control it, add or modify the "GrabEventDevice" option in you touchpad section in {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}}:
+
If you want to control it, add or modify the "GrabEventDevice" option in you touchpad section in {{ic|/etc/X11/xorg.conf.d/70-synaptics.conf}}:
{{hc|/etc/X11/xorg.conf.d/10-synaptics.conf|<nowiki>
+
...
+
Option "GrabEventDevice" "''boolean''"
+
...
+
</nowiki>}}
+
This will come into effect when X is restarted, though you can also change it by using synclient. When changing this parameter with the synclient program, the change will not take effect until the Synaptics driver is disabled and re-enabled.  This can be achieved by switching to a text console and then switching back to X.
+
 
+
=== Synaptics Loses Multitouch Detection After Rebooting From Windows ===
+
Many drivers include a firmware that is loaded into flash memory when the computer boots. This firmware is not necessarily cleared upon shutdown, and is not always compatible with Linux drivers. The only way to clear the flash memory is to shutdown completely rather than using reboot. It is generally considered best practice to never use reboot when switching between operating systems.
+
 
+
=== Buttonless TouchPads (aka ClickPads) ===
+
Some laptops have a special kind of touchpad which has the mouse buttons as part of the tracking plate, instead of being external buttons. For example HP series 4500 ProBooks, ThinkPad X220 and X1 ThinkPad series have this kind of a touchpad. By default whole button area is detected as a left button resulting in the second mouse button being unusable and click + drag will not work. Previously support for such devices was achieved by using third party patches, but from version 1.6.0 the synaptics driver has native multitouch support (using the ''mtdev'' library).
+
 
+
 
+
To enable other buttons modify the touchpad section in {{ic|/etc/X11/xorg.conf.d/10-synaptics.conf}} (or better, of your custom synaptics configuration file prefixed with a higher number):
+
  
{{hc|/etc/X11/xorg.conf.d/10-synaptics.conf|<nowiki>
+
{{hc|/etc/X11/xorg.conf.d/70-synaptics.conf|2=
 
...
 
...
Option "ClickPad"         "true"
+
Option "GrabEventDevice" "''boolean''"
Option "EmulateMidButtonTime" "0"
+
Option "SoftButtonAreas"  "50% 0 82% 0 0 0 0 0"
+
 
...
 
...
</nowiki>}}
+
}}
  
These three options are the key, first one will enable multitouch support, second will disable middle button emulation (not supported for ClickPads), and third will define the button areas.  
+
This will come into effect when X is restarted, though you can also change it by using synclient. When changing this parameter with the synclient program, the change will not take effect until the Synaptics driver is disabled and re-enabled.  This can be achieved by switching to a text console and then switching back to X.
  
Format for the SoftButtonAreas option is (from {{ic|man 4 synaptics}}):
+
=== Synaptics loses multitouch detection after rebooting from Windows ===
{{bc|RightButtonAreaLeft RightButtonAreaRight RightButtonAreaTop RightButtonAreaBottom  MiddleButtonAreaLeft MiddleButtonAreaRight MiddleButtonAreaTop MiddleButtonAreaBottom}}
+
  
The above example is commonly found in documentation or synaptics packages, and it translates to right half of the bottom 18% of the touchpad to be a right button. There is '''no middle button''' defined. If you want to define a middle button remember one key piece of information from the manual; edge set to 0 extends to infinity in that direction.
+
Many drivers include a firmware that is loaded into flash memory when the computer boots. This firmware is not necessarily cleared upon shutdown, and is not always compatible with Linux drivers. The only way to clear the flash memory is to shutdown completely rather than using reboot. It is generally considered best practice to never use reboot when switching between operating systems.
  
In the following example right button will occupy 40% of the rightmost part of the button area. We then proceed to setup the middle button to occupy 20% of the touchpad in a small area in the center.
+
=== Touchpad not recognized after shutdown from Arch ===
 +
Certain touchpads (elantech in particular) will fail to be recognized as a device of any sort after a standard shutdown from Arch linux. There are multiple possible solutions to this problem:
 +
* Boot into a Windows partition/install disk and shutdown from there.
 +
* Wait approximately 1 minute before turning on the computer after shutdown.
 +
* As discussed in https://bugzilla.kernel.org/show_bug.cgi?id=81331#c186 a patch has been merged into the stable kernel that provides a fix for Elantech touchpads. Gigabyte P34, P35v2 and X3 models are supported by default, for others (especially rebranded Gigabyte laptops, like XMG's) {{ic|1=i8042.kbdreset=1}} can be set as kernel parameter.
  
    ...
+
=== Trackpoint and Clickpad ===
    Option    "SoftButtonAreas"  "60% 0 82% 0 40% 59% 82% 0"
+
Newer Thinkpads do not have physical buttons for their Trackpoint anymore and instead use the upper area of the Clickpad for buttons (Left, Middle, Right).  
    ...
+
Apart from the ergonomic viewpoint this works quite well with current Xorg. Unfortunately mouse wheel emulation using the middle button is not supported yet. Install {{AUR|xf86-input-evdev-trackpoint}} from the AUR for a patched and properly configured version if you intend to use the Trackpoint.
 
+
You can use {{ic|<nowiki>synclient</nowiki>}} to check the new soft button areas:
+
 
+
    $ synclient -l | grep -i ButtonArea
+
        RightButtonAreaLeft    = 3914
+
        RightButtonAreaRight    = 0
+
        RightButtonAreaTop      = 3918
+
        RightButtonAreaBottom  = 0
+
        MiddleButtonAreaLeft    = 3100
+
        MiddleButtonAreaRight  = 3873
+
        MiddleButtonAreaTop    = 3918
+
        MiddleButtonAreaBottom  = 0
+
  
If your buttons aren't working, soft button areas are not changing, ensure you do not have a synaptics configuration file distributed by a package which is overriding your custom settings (ie. some AUR packages distribute configurations prefixed with very high numbers).
+
=== ASUS Touchpads only recognised as PS/2 FocalTech emulated mouse ===
  
 +
# Install the linux header for your kernel
 +
# Install the focaltech-dkms from https://github.com/hanipouspilot/focaltech-dkms
 +
# Restart your computer
 +
# Edit your settings in the "Mouse and Trackpad" settings.
  
=== Touchpad detected as mouse (elantech touchpads) ===
+
== See also ==
This can happend on some laptops with elantech touchpad, for example ASUS x53s. In this situation you need {{AUR|psmouse-elantech}} package from [[AUR]].
+
  
== External Resources ==
+
* [http://cgit.freedesktop.org/xorg/driver/xf86-input-synaptics/ Synaptics touchpad driver]
* [http://cgit.freedesktop.org/xorg/driver/xf86-input-synaptics/ Synaptics TouchPad driver]
+
* [http://www.x.org/archive/X11R7.5/doc/man/man4/synaptics.4.html Synaptics manual on x.org ]
<!-- vim: set ft=Wikipedia: -->
+

Latest revision as of 16:35, 23 September 2016

Related articles

This article details the installation and configuration process of the Synaptics input driver for Synaptics (and ALPS) touchpads found on most notebooks.

Tip: An alternative touchpad driver is libinput. It implements a different approach to recognize and process multitouch features.
Note: If you want to configure touchpad via GNOME control center, you need to use the libinput driver.[1]

Contents

Installation

The Synaptics driver can be installed with the package xf86-input-synaptics.

Configuration

The primary method of configuration for the touchpad is through an Xorg server configuration file. After installation of xf86-input-synaptics, a default configuration file is located at /usr/share/X11/xorg.conf.d/70-synaptics.conf. Users can copy this file to /etc/X11/xorg.conf.d/ and edit it to configure the various driver options available. Refer to the synaptics(4) manual page for a complete list of available options. Machine-specific options can be discovered using synclient.

Frequently used options

The following example file configures some common options, including vertical, horizontal and circular scrolling as well as tap-to-click:

/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    Identifier "touchpad"
    Driver "synaptics"
    MatchIsTouchpad "on"
        Option "TapButton1" "1"
        Option "TapButton2" "3"
        Option "TapButton3" "2"
        Option "VertEdgeScroll" "on"
        Option "VertTwoFingerScroll" "on"
        Option "HorizEdgeScroll" "on"
        Option "HorizTwoFingerScroll" "on"
        Option "CircularScrolling" "on"
        Option "CircScrollTrigger" "2"
        Option "EmulateTwoFingerMinZ" "40"
        Option "EmulateTwoFingerMinW" "8"
        Option "CoastingSpeed" "0"
        Option "FingerLow" "30"
        Option "FingerHigh" "50"
        Option "MaxTapTime" "125"
        ...
EndSection
TapButton1
(integer) configures which mouse-button is reported on a non-corner, one finger tap.
TapButton2
(integer) configures which mouse-button is reported on a non-corner, two finger tap
TapButton3
(integer) configures which mouse-button is reported on a non-corner, three finger tap
RBCornerButton
(integer) configures which mouse-button is reported on a right bottom corner, one finger tap (use Option "RBCornerButton" "3" to achieve Ubuntu style tap behaviour for right mouse button in lower right corner)
RTCornerButton
(integer) as above, but for top right corner, one finger tap.
VertEdgeScroll
(boolean) enables vertical scrolling while dragging across the right edge of the touch pad.
HorizEdgeScroll
(boolean) enables horizontal scrolling while dragging across the bottom edge of the touch pad.
VertTwoFingerScroll
(boolean) enables vertical scrolling using two fingers.
HorizTwoFingerScroll
(boolean) enables horizontal scrolling using two fingers.
EmulateTwoFingerMinZ/W
(integer) play with this value to set the precision of two finger scroll.
FingerLow
(integer) when finger pressure drops below this value, the driver counts it as a release.
FingerHigh
(integer) when finger pressure goes above this value, the driver counts it as a touch.
MaxTapTime
Determines how "crisp" a tap must be to be considered a real tap. Decrease the value to require a more crisp tap. Properly adjusting this parameter can reduce false positives when the hands hover over or lightly touch the pad.
VertScrollDelta and HorizScrollDelta
(integer) configures the speed of scrolling, it is a bit counter-intuitive because higher values produce greater precision and thus slower scrolling. Negative values cause natural scrolling like in macOS.
Note:
  • If you find that your hand frequently brushes your touchpad, causing the TapButton2 option to be triggered (which will more than likely paste from your clipboard), and you do not mind losing two-finger-tap functionality, set TapButton2 to 0. Alternatively, see #Disable touchpad while typing.
  • Recent versions include a "Coasting" feature, enabled by default, which may have the undesired effect of continuing almost any scrolling until the next tap or click, even if you are no longer touching the touchpad. This means that to scroll just a bit, you need to scroll (by using the edge, or a multitouch option) and then almost immediately tap the touchpad, otherwise scrolling will continue forever. If wish to avoid this, set CoastingSpeed to 0.
  • If your touchpad is too sensitive, use higher values for FingerLow and FingerHigh and vice versa. Remember that FingerLow should be smaller than FingerHigh

Configuration on the fly

Next to the traditional method of configuration, the Synaptics driver also supports on the fly configuration. This means that users can set certain options through a software application, these options are applied immediately without needing to restart Xorg. This is useful to test configuration options before you include them in the configuration file or a script. Note that on the fly configuration is not persistent and lasts only until the Xorg server exists.

Console tools

  • Synclient — command line utility to configure and query Synaptics driver settings
http://xorg.freedesktop.org/ || xf86-input-synaptics
  • xinput — general-purpose utility to configure X input devices
http://xorg.freedesktop.org/ || xorg-xinput

Graphical tools

  • GPointing Device Settings — Provides graphical on the fly configuration for several pointing devices connected to the system, including your synaptics touch pad. This application replaces GSynaptics as the preferred tool for graphical touchpad configuration through the synaptics driver.
https://wiki.gnome.org/Attic/GPointingDeviceSettings || gpointing-device-settings
  • kcm_touchpad — New configuration tool for KDE Plasma 5. It provides a module under input devices in System Settings. It is to be considered a replacement for synaptiksAUR[broken link: archived in aur-mirror] and the old kcm-touchpad module.
https://quickgit.kde.org/?p=plasma-desktop.git&a=tree&f=kcms%2Ftouchpad || plasma-desktop

Xfce4/Cinnamon

To change these settings in XFCE 4':

  1. Open System Settings.
  2. Click Mouse and Touchpad.
  3. Change the settings on the Touchpad tab.

To change these settings in Cinnamon:

  1. Open Cinnamon System Settings.
  2. Click Mouse and Touchpad.
  3. Change the settings on the Touchpad tab.

MATE

It is possible configure the way MATE handles the touchpad:

  1. Run dconf-editor
  2. Edit the keys in the org.mate.peripherals-touchpad folder.

To prevent Mate settings daemon from overriding existing settings, do as follows:

  1. Run dconf-editor
  2. Edit org.mate.SettingsDaemon.plugins.mouse
  3. Uncheck the active setting.

Advanced configuration

Using xinput to determine touchpad capabilities

Depending on your model, synaptic touchpads may have or lack capabilities. We can determine which capabilities your hardware supports by using xinput.

  • left, middle and right hardware buttons
  • two finger detection
  • three finger detection
  • configurable resolution

First, find the name of your touchpad:

$ xinput list

You can now use xinput to find your touchpad's capabilities:

$ xinput list-props "SynPS/2 Synaptics TouchPad" | grep Capabilities
  Synaptics Capabilities (309):  1, 0, 1, 0, 0, 1, 1

From left to right, this shows:

  • (1) device has a physical left button
  • (0) device does not have a physical middle button
  • (1) device has a physical right button
  • (0) device does not support two-finger detection
  • (0) device does not support three-finger detection
  • (1) device can configure vertical resolution
  • (1) device can configure horizontal resolution

Use xinput list-props "SynPS/2 Synaptics TouchPad" to list all device properties. See synaptics(4) for full documentation of the Synaptics properties.

Synclient

Synclient can configure every option available to the user as documented in $ man synaptics. A full list of the current user settings can be brought up:

$ synclient -l

Every listed configuration option can be controlled through synclient, for example:

  • Enable palm detection: $ synclient PalmDetect=1
  • Configure button events (right button event for two finger tap here): $ synclient TapButton2=3
  • Disable the touchpad: $ synclient TouchpadOff=1

After you have successfully tried and tested your options through synclient, you can make these changes permanent by adding them to /etc/X11/xorg.conf.d/70-synaptics.conf.

evtest

The tool evtest can display pressure and placement on the touchpad in real-time, allowing further refinement of the default Synaptics settings. The evtest monitoring can be started with:

$ evtest /dev/input/eventX

X denotes the touchpad's ID. It can be found by looking at the output of cat /proc/bus/input/devices.

evtest needs exclusive access to the device which means it cannot be run together with an X server instance. You can either kill the X server or run evtest from a different virtual terminal (e.g., by pressing Ctrl+Alt+2).

xev

The tool xorg-xev can display taps, clicks, pressure, placement and other measured parameters in real-time, allowing still further refinement of the default Synaptics settings. xev can be run in X and needs no specifics. using the "-event" parameter, it is possible to restrict the types of events that are reported.

Circular Scrolling

Circular scrolling is a feature that Synaptics offers which closely resembles the behaviour of iPods. Instead of (or additional to) scrolling horizontally or vertically, you can scroll circularly. Some users find this faster and more precise. To enable circular scrolling, add the following options to the touchpad device section of /etc/X11/xorg.conf.d/70-synaptics.conf:

/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    ...
    Option      "CircularScrolling"          "on"
    Option      "CircScrollTrigger"          "0"
    ...
EndSection

The option CircScrollTrigger may be one of the following values, determining which edge circular scrolling should start:

0    All Edges
1    Top Edge
2    Top Right Corner
3    Right Edge
4    Bottom Right Corner
5    Bottom Edge
6    Bottom Left Corner
7    Left Edge
8    Top Left Corner

Specifying something different from zero may be useful if you want to use circular scrolling in conjunction with horizontal and/or vertical scrolling. If you do so, the type of scrolling is determined by the edge you start from.

To scroll fast, draw small circles in the center of your touchpad. To scroll slowly and more precise, draw large circles.

Natural scrolling

It is possible to enable natural scrolling through synaptics. Simply use negative values for VertScrollDelta and HorizScrollDelta like so:

/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    ...
    Option      "VertScrollDelta"          "-111"
    Option      "HorizScrollDelta"         "-111"
    ...
EndSection

Software toggle

You might want to turn the touchpad on and off with a simple button click or shortcut. This can be done by binding the following xinput-based script to a keyboard event as explained in Extra keyboard keys in Xorg:

/usr/local/bin/touchpad_toggle.sh
#!/bin/bash

declare -i ID
ID=`xinput list | grep -Eio '(touchpad|glidepoint)\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
declare -i STATE
STATE=`xinput list-props $ID|grep 'Device Enabled'|awk '{print $4}'`
if [ $STATE -eq 1 ]
then
    xinput disable $ID
    # echo "Touchpad disabled."
    # notify-send 'Touchpad' 'Disabled' -i /usr/share/icons/Adwaita/48x48/devices/input-touchpad.png
else
    xinput enable $ID
    # echo "Touchpad enabled."
    # notify-send 'Touchpad' 'Enabled' -i /usr/share/icons/Adwaita/48x48/devices/input-touchpad.png
fi
Tip: When using external monitors with bumblebee, the touchpad can be configured on the second X server by prepending DISPLAY=:8 to the command.

Alternatively, synclient can be used to toggle the touchpad. However, it can only turn off touch events but not physical clickpad button usage:

/usr/local/bin/touchpad.sh
#!/bin/bash

synclient TouchpadOff=$(synclient -l | grep -c 'TouchpadOff.*=.*0')

Disable touchpad while typing

Using the driver's automatic palm detection

First of all you should test if it works properly for your touchpad and if the settings are accurate. Enable palm detection with

$ synclient PalmDetect=1

Then test the typing. You can tweak the detection by setting the minimum width for the touch to be considered a palm, for example

$ synclient PalmMinWidth=8

And you can tweak the minimum pressure required for the touch to be considered a palm, for example

$ synclient PalmMinZ=100
Tip: To help find the best values for palm detection, you can use evtest to see the width and Z values reported during touchpad use.

Once you have found the correct settings, you can add them to your config file:

Option "PalmDetect" "1"
Option "PalmMinWidth" "8"
Option "PalmMinZ" "100"
Warning: For some touchpads, an issue with the kernel can cause the palm width to always be reported as 0. This breaks palm detection in a majority of cases. Pending an actual fix, you can patch the synaptics package to use only Z for palm detection.
Tip: If you experience problems with consistent palm detection for your hardware, an alternative to try is libinput.

Using syndaemon

syndaemon monitors keyboard activity and disables the touchpad while typing. It has several options to control when the disabling occurs. View them with

$ syndaemon -h

For example, to disable tapping and scrolling for 0.5 seconds after each keypress (ignoring modifier keys like Ctrl), use

$ syndaemon -i 0.5 -t -K -R

Once you have determined the options you like, you should use your login manager or xinitrc to have it run automatically when X starts. The -d option will make it start in the background as a daemon.

Disable touchpad on mouse detection

With the assistance of udev, it is possible to automatically disable the touchpad if an external mouse has been plugged in. To achieve this, use one of the following rules.

Basic desktop

This is a basic rule generally for non-"desktop environment" sessions:

/etc/udev/rules.d/01-touchpad.rules
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=1"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=0"

If the touchpad is always deactivated at startup, even when no mouse is plugged in, try adding the following criteria between the KERNEL and ACTION parameters above:

ATTRS{name}!="*TouchPad", ATTRS{name}!="*Stick",

GDM

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: saying that GDM usually does something does not make sense (Discuss in Talk:Touchpad Synaptics#)

GDM usually stores the Xauthority files in /var/run/gdm in a randomly-named directory. You should find your actual path to the Xauthority file which can be done using ps ax. For some reason multiple authority files may appear for a user, so a rule like will be necessary:

/etc/udev/rules.d/01-touchpad.rules
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="add", PROGRAM="/usr/bin/find /var/run/gdm -name username -print0 -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=1"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="remove", PROGRAM="/usr/bin/find /var/run/gdm -name username -print0 -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=0"

Furthermore, you should validate that your udev script is running properly! You can check for the conditions using udevadm monitor -p which must be run as root.

With syndaemon running

syndaemon whether started by the user or the desktop environment can conflict with synclient and will need to be disabled. A rule like this will be needed:

/etc/udev/rules.d/01-touchpad.rules
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="add", PROGRAM="/usr/bin/find /var/run/gdm -name username -print -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/bin/sh -c '/usr/bin/synclient TouchpadOff=1 ; sleep 1; /bin/killall syndaemon; '"
touchpad-state

An AUR package touchpad-state-gitAUR has been created around the udev rules above. It includes a udev rule and script:

touchpad-state [--off] [--on]

GNOME

GNOME users can install GNOME shell extension Touchpad Indicator, change "Switch Method" to "Synclient" and enable "Automatically switch Touchpad On/Off" in its preferences.

KDE

If using Plasma, the package plasma-desktop can be used to manage the touchpad.

System with multiple X sessions

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Hard-coded DISPLAY variable does not work with multiple X sessions. (Discuss in Talk:Touchpad Synaptics#)

For an environment where multiple users are present, a slightly different approach is needed to detect the current users X environment. This script will help achieving this:

/usr/bin/mouse-pnp-event-handler.sh
#!/bin/sh
## $1 = "add" / "remove"
## $2 = %k from udev 

## Set TRACKPAD_NAME according to your configuration. 
## Check your trackpad name with: 
## find /sys/class/input/ -name mouse* -exec udevadm info -a {} \; | grep 'ATTRS{name}'
TRACKPAD_NAME="SynPS/2 Synaptics TouchPad"

USERLIST=$(w -h | cut -d' ' -f1 | sort | uniq)
MOUSELIST=$(find /sys/class/input/ -name mouse*)

for CUR_USER in ${USERLIST}; do
         CUR_USER_XAUTH="$(sudo -Hiu ${CUR_USER} env | grep -e "^HOME=" | cut -d'=' -f2)/.Xauthority"

  
        ## Can't find a way to get another users DISPLAY variable from an isolated root environment. Have to set it manually.
        #CUR_USER_DISPL="$(sudo -Hiu ${CUR_USER} env | grep -e "^DISPLAY=" | cut -d'=' -f2)"
        CUR_USER_DISPL=":0"

        export XAUTHORITY="${CUR_USER_XAUTH}"
        export DISPLAY="${CUR_USER_DISPL}"

        if [ -f "${CUR_USER_XAUTH}" ]; then
                case "$1" in
                        "add")
                                /usr/bin/synclient TouchpadOff=1
                                /usr/bin/logger "USB mouse plugged. Disabling touchpad for $CUR_USER. ($XAUTHORITY - $DISPLAY)"
                        ;;
                        "remove")
                                ## Only execute synclient if there are no external USB mice connected to the system.
                                EXT_MOUSE_FOUND="0"
                                for CUR_MOUSE in ${MOUSELIST}; do
                                        if [ "$(cat ${CUR_MOUSE}/device/name)" != "${TRACKPAD_NAME}" ]; then
                                                EXT_MOUSE_FOUND="1"
                                        fi
                                done
                                if [ "${EXT_MOUSE_FOUND}" == "0" ]; then
                                        /usr/bin/synclient TouchpadOff=0
                                        /usr/bin/logger "No additional external mice found. Enabling touchpad for $CUR_USER."
                                else
                                        logger "Additional external mice found. Won't enable touchpad yet for $CUR_USER."
                                fi
                        ;;
                esac
        fi
done

Update the TRACKPAD_NAME variable for your system configuration. Run find /sys/class/input/ -name mouse* -exec udevadm info -a {} \; | grep 'ATTRS{name}' to get a list of useful mice-names. Choose the one for your trackpad.

Then have udev run this script when USB mices are plugged in or out, with these udev rules:

/etc/udev/rules.d/01-touchpad.rules
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", RUN+="/usr/bin/mouse-pnp-event-handler.sh add %k"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", RUN+="/usr/bin/mouse-pnp-event-handler.sh remove %k"

Buttonless touchpads (aka ClickPads)

Ever more laptops have a special kind of touchpad which has a single mouse button as part of the tracking plate, instead of external buttons. For example, the 2015 Dell XPS 13, HP series 4500 ProBooks, ThinkPad X220 and X1 ThinkPad series have this kind of a touchpad. By default, the whole button area is detected as a left button, so right and middle-click functions and click + drag will not work. It is possible to define two and three finger clicks as right and middle button clicks, and/or to define parts of the click pad surface as right and middle buttons. Note that although the driver registers multiple touches, it does not track individual fingers (as of version 1.7.1) which results in confusing behavior when using physical buttons of a clickpad for drag-and-drop and other gestures: you have to click with two or three fingers but then only move one of them while holding the button down with another. You can look into the xf86-input-mtrackAUR driver for better multitouch support.

Some desktop environments (KDE and GNOME at least) define sane and useful default configurations for clickpads, providing a right button at the bottom right of the pad, recognising two and three-finger clicks anywhere on the pad as right and middle clicks, and providing configuration options to define two and three-finger taps as right and middle clicks. If your desktop does not do this, or if you want more control, you can modify the touchpad section in /etc/X11/xorg.conf.d/70-synaptics.conf (or better, of your custom synaptics configuration file prefixed with a higher number). For example:

/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    Identifier "touchpad"
    Driver "synaptics"
    MatchIsTouchpad "on"
        # Enable clickpad/multitouch support
        Option "ClickPad" "true"
        # Middle-button emulation is not supported
        Option "EmulateMidButtonTime" "0"
        # Define right soft button at the bottom
        Option "SoftButtonAreas"  "50% 0 82% 0 0 0 0 0"
EndSection

The format for the SoftButtonAreas option is (from man 4 synaptics):

RightButtonAreaLeft RightButtonAreaRight RightButtonAreaTop RightButtonAreaBottom  MiddleButtonAreaLeft MiddleButtonAreaRight MiddleButtonAreaTop MiddleButtonAreaBottom

The above "SoftButtonAreas" option is commonly found in documentation or synaptics packages, and it defines the right half of the bottom 18% of the touchpad as a right button. There is no middle button defined. If you want to define a middle button remember one key piece of information from the manual; edge set to 0 extends to infinity in that direction.

In the following example the right button will occupy the rightmost 40% of the button area and the middle button 20% of it in the center. The leftmost 40% remains as a left button (as does the rest of the clickpad):

...
Option     "SoftButtonAreas"  "60% 0 82% 0 40% 59% 82% 0"
...

You can use synclient to check the soft button areas:

$ synclient -l | grep -i ButtonArea
        RightButtonAreaLeft     = 3914
        RightButtonAreaRight    = 0
        RightButtonAreaTop      = 3918
        RightButtonAreaBottom   = 0
        MiddleButtonAreaLeft    = 3100
        MiddleButtonAreaRight   = 3873
        MiddleButtonAreaTop     = 3918
        MiddleButtonAreaBottom  = 0

If your buttons are not working, soft button areas are not changing, ensure you do not have a synaptics configuration file distributed by a package which is overriding your custom settings (ie. some AUR packages distribute configurations prefixed with very high numbers).

These settings cannot be modified on the fly with synclient, however, xinput works:

xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Soft Button Areas" 4000 0 4063 0 3000 4000 4063 0

You cannot use percentages with this command, so look at /var/log/Xorg.0.log to figure out the touchpad x and y-axis ranges.

Bottom edge correction

In some cases, for example Toshiba Satellite P50, everything work out of the box except often your click are seen as mouse movement and the cursor will jump away just before registering the click. This can be easily solved running

$ synclient -l | grep BottomEdge

take the BottomEdge value and subtract a the wanted height of your button, then temporary apply with

$ synclient AreaBottomEdge=4000

when a good value has been found make it a fixed correction with

/etc/X11/xorg.conf.d/70-synaptics.conf
...
Option "AreaBottomEdge"         "4000"
...
Note: The area will not act as touchpad if the touch begins in that area, but it can still be used if the touch has originated outside.

Troubleshooting

Touchpad does not work after resuming from hibernate/suspend

Occasionally touchpads will fail to work when the computer resumes from sleep or hibernation. This can often be corrected without rebooting by

  • Switching to a console and back again,
  • entering sleep mode again, and resuming again, or
  • locating the correct kernel module, then removing it and inserting it again.
Note: You can use Ctrl-Alt-F1 through F8 to switch to a console without using the mouse.
modprobe -r psmouse #psmouse happens to be the kernel module for my touchpad (Alps DualPoint)
modprobe psmouse

Now switch back to the tty that X is running on. If you chose the right module, your touchpad should be working again.

xorg.conf.d/70-synaptics.conf does not seem to apply in MATE

MATE will by default overwrite various options for your touchpad. This includes configurable features for which there is no graphical configuration within MATE's system control panel. This may cause it to appear that /etc/X11/xorg.conf.d/70-synaptics.conf is not applied. Follow #MATE to prevent this behavior.

The touchpad is not working, Xorg.0.log shows "Query no Synaptics: 6003C8"

Due to the way synaptics is currently set-up, 2 instances of the synaptics module are loaded. We can recognize this situation by opening the xorg log file (/var/log/Xorg.0.log) and noticing this:

/var/log/Xorg.0.log
 [ 9304.803] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "evdev touchpad catchall"
 [ 9304.803] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "touchpad catchall"

Notice how 2 differently named instances of the module are being loaded. In some cases, this causes the touchpad to become nonfunctional.

We can prevent this double loading by adding MatchDevicePath "/dev/input/event*" to our /etc/X11/xorg.conf.d/70-synaptics.conf file:

/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    Identifier "touchpad catchall"
    Driver "synaptics"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
        Option "TapButton1" "1"
        Option "TapButton2" "2"
        Option "TapButton3" "3"
EndSection 

Restart X and check xorg logs again, the error should be gone and the touchpad should be functional.

related bugreport: FS#20830

related forum topics:

Touchpad detected as "PS/2 Generic Mouse" or "Logitech PS/2 mouse"

This can be caused by a number of issues;

Elantech touchpads

This can happen with some laptops with an Elantech touchpad, for example the ASUS x53s. In this situation you need psmouse-alps-driverAUR[broken link: archived in aur-mirror] package from AUR.

Laptops with touchscreen & touchpad

There also seems to be a problem with laptops which have both a touchscreen & a touchpad, such as the Dell XPS 12 or Dell XPS 13. To fix this, you can blacklist the i2c_hid driver, this does have the side-effect of disabling the touchscreen though.

This seems to be a known problem. Also see this thread.

Post kernel 3.15, having the module blacklisted may cause touchpad to stop working completely. Removing the blacklist should allow this to start working with limited functionality, see FS#40921.

Non-functional Synaptics special abilities (multi-tap, scrolling, etc.)

In some cases Synaptics touchpads only work partially. Features like two-finger scrolling or two-finger middle-click do not work even if properly enabled. This is probably related to the The touchpad is not working problem mentioned above. Fix is the same, prevent double module loading.

If preventing the module from loading twice does not solve your issue, try commenting out the toggle "MatchIsTouchpad" (which is now included by default in the synaptics config).

If clicking with either 2 or 3 fingers is interpreted as a right-click, so you cannot get a middle click either way regardless of configuration, this bug is probably the culprit: https://bugs.freedesktop.org/show_bug.cgi?id=55365

Cursor jump

Some users have their cursor inexplicably jump around the screen. There currently no patch for this, but the developers are aware of the problem and are working on it.

Another posibility is that you are experiencing IRQ losses related to the i8042 controller (this device handles the keyboard and the touchpad of many laptops), so you have two posibilities here:

1. rmmod && insmod the psmouse module. 2. append i8042.nomux=1 to your kernel parameters and reboot your machine.

Touchpad device is not located at /dev/input/*

If that is the case, you can use this command to display information about your input devices:

$ cat /proc/bus/input/devices

Search for an input device which has the name "SynPS/2 Synaptics TouchPad". The "Handlers" section of the output specifies what device you need to specify.

Example output:

$ cat /proc/bus/input/devices
 I: Bus=0011 Vendor=0002 Product=0007 Version=0000
 N: Name="SynPS/2 Synaptics TouchPad"
 P: Phys=isa0060/serio4/input0
 S: Sysfs=/class/input/input1
 H: Handlers=mouse0 event1
 B: EV=b
 B: KEY=6420 0 7000f 0

In this case, the Handlers are mouse0 and event1, so /dev/input/mouse0 would be used.

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: TODO: explain how to apply this in /etc/X11/xorg.conf.d/70-synaptics.conf (Discuss in Talk:Touchpad Synaptics#)

Firefox and special touchpad events

You can enable/disable some special events that Firefox handles upon tapping or scrolling certain parts of your touchpad by editing the settings of those actions. Type about:config in your Firefox address bar. To alter options, double-click on the line in question.

Firefox 17.0 and later

Horizontal scrolling will now by default scroll through pages and not through your history. To reenable Mac-style forward/backward with two-finger swiping, edit:

mousewheel.default.action.override_x = 2

You may encounter accidental forwards/backwards while scrolling vertically. To change Firefox's sensitivity to horizontal swipes, edit:

mousewheel.default.delta_multiplier_x

The optimum value will depend on your touchpad and how you use it, try starting with 10. A negative value will reverse the swipe directions.

Opera: horizontal scrolling issues

Same as above. To fix it, go to Tools > Preferences > Advanced > Shortcuts. Select "Opera Standard" mouse setup and click "Edit". In "Application" section:

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Description here is not so clear and i don't use Opera,Please make it clear :) (Discuss in Talk:Touchpad Synaptics#)
  • assign key "Button 6" to command "Scroll left"
  • assign key "Button 7" to command "Scroll right"

Scrolling and multiple actions with Synaptics on LG laptops

These problems seem to be occurring on several models of LG laptops. Symptoms include: when pressing Mouse Button 1, Synaptics interprets it as ScrollUP and a regular button 1 click; same goes for button 2.

The scrolling issue can be resolved by entering in xorg.conf:

/etc/X11/xorg.conf.d/xorg.conf
Option "UpDownScrolling" "0"
Note: This will make Synaptics interpret one button push as three. There is a patch written by Oskar Sandberg[2] that removes these clicks.

Apparently, when trying to compile this against the latest version of Synaptics it fails. The solution to this is using the GIT repository for Synaptics[3].

There is also a package build file in the AUR to automate this: xf86-input-synaptics-lgAUR[broken link: archived in aur-mirror].

To build the package after downloading the tarball and unpacking it, execute:

$ cd synaptics-git
$ makepkg

Other external mouse issues

First, make sure your section describing the external mouse contains this line (or that the line looks like this):

/etc/X11/xorg.conf.d/xorg.conf
Option     "Device" "/dev/input/mice"

If the "Device" line is different, change it to the above and try to restart X. If this does not solve your problem, make your touchpad is the CorePointer in the "Server Layout" section:

/etc/X11/xorg.conf.d/xorg.conf
InputDevice    "Touchpad" "CorePointer"

and make your external device "SendCoreEvents":

/etc/X11/xorg.conf.d/xorg.conf
InputDevice    "USB Mouse" "SendCoreEvents"

finally add this to your external device's section:

/etc/X11/xorg.conf.d/xorg.conf
Option      "SendCoreEvents"    "true"

If all of the above does not work for you, please check relevant bug trackers for possible bugs, or go through the forums to see if anyone has found a better solution.

Touchpad synchronization issues

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Touchpad Synaptics#Outdated "Touchpad synchronization issues" section)

Sometimes the cursor may freeze for several seconds or start acting on its own for no apparent reason. This behavior is accompanied by records in /var/log/messages.log

/var/log/messages.log
psmouse.c: TouchPad at isa0060/serio1/input0 lost synchronization, throwing 3 bytes away

This problem has no general solution, but there are several possible workarounds.

  • If you use CPU frequency scaling, avoid using the "ondemand" governor and use the "performance" governor when possible, as the touchpad may lose sync when the CPU frequency changes.
  • Avoid using an ACPI battery monitor.
  • Attempt to load psmouse with "proto=imps" option. To do that, add this line to your /etc/modprobe.d/modprobe.conf:
/etc/modprobe.d/modprobe.conf
options psmouse proto=imps
  • Try another desktop environment. Some users report that this problem only occurs when using XFCE or GNOME, for whatever reason

Xorg.log.0 shows SynPS/2 Synaptics touchpad can not grab event device, errno=16

If you are using Xorg 7.4, you may get a warning like this from /var/log/Xorg.0.log, thais is because the driver will grab the event device for exclusive use when using the Linux 2.6 event protocol. When it fails, X will return this error message.

Grabbing the event device means that no other user space or kernel space program sees the touchpad events. This is desirable if the X config file includes /dev/input/mice as an input device, but is undesirable if you want to monitor the device from user space.

If you want to control it, add or modify the "GrabEventDevice" option in you touchpad section in /etc/X11/xorg.conf.d/70-synaptics.conf:

/etc/X11/xorg.conf.d/70-synaptics.conf
...
Option "GrabEventDevice" "boolean"
...

This will come into effect when X is restarted, though you can also change it by using synclient. When changing this parameter with the synclient program, the change will not take effect until the Synaptics driver is disabled and re-enabled. This can be achieved by switching to a text console and then switching back to X.

Synaptics loses multitouch detection after rebooting from Windows

Many drivers include a firmware that is loaded into flash memory when the computer boots. This firmware is not necessarily cleared upon shutdown, and is not always compatible with Linux drivers. The only way to clear the flash memory is to shutdown completely rather than using reboot. It is generally considered best practice to never use reboot when switching between operating systems.

Touchpad not recognized after shutdown from Arch

Certain touchpads (elantech in particular) will fail to be recognized as a device of any sort after a standard shutdown from Arch linux. There are multiple possible solutions to this problem:

  • Boot into a Windows partition/install disk and shutdown from there.
  • Wait approximately 1 minute before turning on the computer after shutdown.
  • As discussed in https://bugzilla.kernel.org/show_bug.cgi?id=81331#c186 a patch has been merged into the stable kernel that provides a fix for Elantech touchpads. Gigabyte P34, P35v2 and X3 models are supported by default, for others (especially rebranded Gigabyte laptops, like XMG's) i8042.kbdreset=1 can be set as kernel parameter.

Trackpoint and Clickpad

Newer Thinkpads do not have physical buttons for their Trackpoint anymore and instead use the upper area of the Clickpad for buttons (Left, Middle, Right). Apart from the ergonomic viewpoint this works quite well with current Xorg. Unfortunately mouse wheel emulation using the middle button is not supported yet. Install xf86-input-evdev-trackpointAUR from the AUR for a patched and properly configured version if you intend to use the Trackpoint.

ASUS Touchpads only recognised as PS/2 FocalTech emulated mouse

  1. Install the linux header for your kernel
  2. Install the focaltech-dkms from https://github.com/hanipouspilot/focaltech-dkms
  3. Restart your computer
  4. Edit your settings in the "Mouse and Trackpad" settings.

See also