The default synaptics driver settings in Linux are a little wonky, and are far from the feel of using the touchpad in OSX. I have spent some (read: too much) time tweaking these settings to a much more usable config.
Getting under the hood
Most distributions will automagically load the synaptics driver in X, so I’ll spare those details. If your distro doesn’t do this, a quick google search should lead you to documentation on how to get the driver installed.
The binary you will use to view and tune your touchpad settings is “synclient”. It can read and write touchpad settings real-time, without root privileges. To get a list of your touchpad settings, simply run “synclient -l”. Any of those settings can be modified by running “synclient SettingName=value”.
The touchpad was far too sensitive by default. The setting “FingerHigh” defines how much pressure must be applied to be considered a touch. The default value of 30 resulted in me being able to move my mouse without even touching the pad. I increased this value to prevent accidental mouse movements.
I deplore the click on Macbook touchpads, so tap-to-click is a must for me. When you turn tap-to-click on, the synaptics driver also has a “TapAndDragGesture” setting turned on by default. This setting allows you to click-drag by doing a double-tap, then moving the mouse. With this setting enabled, I was often getting in situations where I would get mistakenly stuck in the click-drag gesture and drag windows all over the screen. I don’t click-drag very often, so I disabled this setting.
I also enabled two-finger tap and three-finger tap to be my right and middle click, respectively.
synclient TapButton1=1 synclient TapButton2=2 synclient TapButton3=3 synclient TapAndDragGesture=0
The touchpad has support to consider a tap in a specific corner to be read as a mouse button press. By default, the top-right corner is bound to the right mouse button. My palm continually grazed the top-right corner on the mouse pad, resulting in random right clicks while I was typing. I disabled all of my corner buttons to prevent confusion.
synclient RTCornerButton=0 synclient RBCornerButton=0 synclient LTCornerButton=0 synclient LBCornerButton=0
The synaptics palm detection is disabled by default. Enabling this will help a lot with your palm causing mouse movements or clicks. This setting has two tunables called “PalmMinWidth” and “PalmMinZ” which define how wide and heavy a press must be to be considered a palm. The defaults worked for me, so I left those settings alone.
Saving your settings
In the days of HAL, you could place all of these settings in a hal policy that would get applied automatically. Since HAL is now deprecated, and I don’t know of a clean way to do this in UDEV, the remaining option is to configure the settings in xorg. I have come up with a somewhat clean way of handling this. Please note that I am running Ubuntu 10.10.
1. Create the directory /etc/X11/xorg.conf.d
2. Drop a file with your configs in there called “60-synaptics.conf”. (The xorg driver has some defaults stored in a file beginning with “50”, which is why I used “60” to override them.)
Here is what my config file looks like:
Section "InputClass" Identifier "touchpad" Driver "synaptics" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Option "FingerHigh" "50" Option "RTCornerButton" "0" Option "RBCornerButton" "0" Option "MinSpeed" "0.7" Option "MaxSpeed" "1.7" Option "SHMConfig" "on" Option "TapAndDragGesture" "off" Option "PalmDetect" "on" EndSection
If you are using a Debian based distro, “man synaptics” will give you information on all of the tunable options for the synaptics driver. This info is also available here.