Corner coasting helps! While not a real fix, I found that using the Synaptics driver's
CornerCoasting mode instead of the normal (finger-off) inertial scrolling mode helps. Reason: corner coasting mode is active while keeping the finger in the corner and stops immediately when releasing it. While pressing Ctrl during corner coasting still creates the "Firefox zoom madness" problem you describe, I found I am very unlikely to do that while I am actively involved in an action (i.e. with the finger on the touchpad rather than finger-off coasting).
Trying out corner coasting. The following command will set up corner coasting mode:
synclient VertEdgeScroll=1 CornerCoasting=1 CoastingSpeed=1 CoastingFriction=0
VertEdgeScroll=1 is because corner coasting only works with edge scrolling, not with two-finger scrolling. If you like corner coasting at both right and bottom edges, add
HorizEdgeScroll=1 to the above line.
CornerCoasting=1 enables corner coasting mode.
CoastingSpeed is the minimum speed of scrolling during coasting, but that seems also to be the minimum cursor speed to trigger it. So I set it to its minimum to make it easiest to trigger the mode, which else can be tricky (and impossible with something like
CoastingFriction is a value to let inertial scrolling fade out. We disable it here to keep it going until you lift the finger, different from what is usually desired in finger-off conventional coasting. For more details on these options, see the Synaptics manpage.
Something not mentioned in the manpage: corner coasting is seemingly enabled by swiping from a non-corner edge area into a corner area, and then keeping the finger there. So, corner coasting movement stops if you accidentally lift the finger, for a very short time even, by bumping into / over the touchpad edge. The "move into a corner area" trigger mode also means, corner coasting won't work or will be difficult to trigger if your
BottomEdge parameters leave little or no non-corner area at the edge. These are relevant here as the corner areas are defined by the intersections of edge areas. Also, without an accessibly sized right edge area, triggering corner coasting will also be difficult to impossible. For my hardware (ThinkPad X201), I found these values to work well (yours may be different, it takes some experimenting):
synclient RightEdge=4800 TopEdge=2000 BottomEdge=4000
Making corner coasting stick. While
synclient is great for testing settings out with immediate effect, they are lost when restarting X. To make them stick, create a
/etc/X11/xorg.conf.d/51-synaptics-cornercoasting.conf or similarly named config file as described here (it also works in Ubuntu!). For the above case, the content would be:
Identifier "Touchpad tweaks"
Option "VertEdgeScroll" "on"
# Option "HorizEdgeScroll" "on" # Enable if you want this.
Option "CornerCoasting" "on"
Option "CoastingSpeed" "1"
Option "CoastingFriction" "0"
Option "RightEdge" "4800"
Option "TopEdge" "2000"
Option "BottomEdge" "4000"
And then restart X to see the effect, of course.