SYNAPTICS(4)
π SYNAPTICS π
okay bestie, gather round, because we're talking about synaptics β the touchpad input driver, from the Kernel Interfaces Manual section 4. this is part 1 of 4 so don't go anywhere, we're just getting started π«Ά
β¨ NAME β¨
synaptics β touchpad input driver. that's it, that's the name. iconic. π
πΈ SYNOPSIS πΈ
Section "InputDevice"
Identifier "devname"
Driver "synaptics"
Option "Device" "devpath"
Option "Path" "path"
...
EndSection
look at that. chef's kiss. you put this in your xorg.conf and the driver just shows up. β¨
π¦ DESCRIPTION π¦
so synaptics is an Xorg input driver for touchpads. and like, yeah, your touchpad can be handled by the normal evdev or mouse drivers, but this one unlocks the advanced features. it's giving main character energy for your trackpad, fr fr.
some of the benefits, bestie:
- Movement with adjustable, non-linear acceleration and speed. π«
- Button events through short touching of the touchpad.
- Double-Button events through double short touching of the touchpad.
- Dragging through short touching and holding down the finger on the touchpad (the tap-and-drag gesture, iykyk).
- Middle and right button events on the upper and lower corner of the touchpad.
- Vertical scrolling (button four and five events) through moving the finger on the right side of the touchpad.
- The up/down button sends button four/five events.
- Horizontal scrolling (button six and seven events) through moving the finger on the lower side of the touchpad.
- The multi-buttons send button four/five events for vertical scrolling and button six/seven events for horizontal scrolling.
- Adjustable finger detection.
- Multifinger taps: two finger for right button and three finger for middle button events. (Needs hardware support. Not all models implement this feature.) π«Ά
- Pressure-dependent motion speed.
ngl, depending on your touchpad firmware, some of these features might be available even without using the synaptics driver. and also some functions just aren't available on all touchpad models, because they need support from the touchpad hardware/firmware. (Multifinger taps, for example.) so like, vibe check your hardware first, bestie.
the name "synaptics" is historical and the driver still provides the synaptics protocol parsing code. under Linux though, the hardware-specifics are handled by the kernel, and this driver will work for any touchpad that has a working kernel driver. so if your device is recognized as "PS/2 Mouse" or similar β sweetie that means the kernel driver does not support your device and this driver will only provide limited functionality. π
π CONFIGURATION OPTIONS π
please please please go read xorg.conf(5) for general configuration details and for options that can be used with all input drivers. this section only covers the stuff specific to this driver. periodt.
the following driver Options are supported:
Option "Device" "string"β this one specifies the device file in your"/dev"directory that'll be used to access the physical device. normally you should use something like"/dev/input/eventX", where X is some integer. πOption "Protocol" "string"β specifies which kernel driver will be used by this driver. here's the list of supported drivers and their default use scenarios, slay:auto-devβ automatic, default (recommend) βeventβ Linux 2.6 kernel eventspsauxβ raw device access (Linux 2.4)psmβ FreeBSD psm driver
Option "LeftEdge" "integer"β X coordinate for left edge. Property:"Synaptics Edges"Option "RightEdge" "integer"β X coordinate for right edge. Property:"Synaptics Edges"Option "TopEdge" "integer"β Y coordinate for top edge. Property:"Synaptics Edges"Option "BottomEdge" "integer"β Y coordinate for bottom edge. Property:"Synaptics Edges"Option "FingerLow" "integer"β when finger pressure drops below this value, the driver counts it as a release. Property:"Synaptics Finger"Option "FingerHigh" "integer"β when finger pressure goes above this value, the driver counts it as a touch. Property:"Synaptics Finger"Option "MaxTapTime" "integer"β maximum time (in milliseconds) for detecting a tap. Property:"Synaptics Tap Durations"Option "MaxTapMove" "integer"β maximum movement of the finger for detecting a tap. Property:"Synaptics Tap Move"Option "MaxDoubleTapTime" "integer"β maximum time (in milliseconds) for detecting a double tap. Property:"Synaptics Tap Durations"Option "ClickTime" "integer"β the duration of the mouse click generated by tapping. Property:"Synaptics Tap Durations"Option "ClickPad" "boolean"β whether the device is a click pad. see ClickPad support for more details. Property:"Synaptics ClickPad"Option "VertEdgeScroll" "boolean"β enable vertical scrolling when dragging along the right edge. Property:"Synaptics Edge Scrolling"Option "HorizEdgeScroll" "boolean"β enable horizontal scrolling when dragging along the bottom edge. Property:"Synaptics Edge Scrolling"Option "CornerCoasting" "boolean"β enable edge scrolling to continue while the finger stays in an edge corner. Property:"Synaptics Edge Scrolling"Option "VertTwoFingerScroll" "boolean"β enable vertical scrolling when dragging with two fingers anywhere on the touchpad. Property:"Synaptics Two-Finger Scrolling"Option "HorizTwoFingerScroll" "boolean"β enable horizontal scrolling when dragging with two fingers anywhere on the touchpad. Property:"Synaptics Two-Finger Scrolling"Option "VertScrollDelta" "integer"β move distance of the finger for a scroll event. Property:"Synaptics Scrolling Distance"Option "HorizScrollDelta" "integer"β move distance of the finger for a scroll event. Property:"Synaptics Scrolling Distance"Option "MinSpeed" "float"β minimum speed factor. Property:"Synaptics Move Speed"Option "MaxSpeed" "float"β maximum speed factor. Property:"Synaptics Move Speed"Option "AccelFactor" "float"β acceleration factor for normal pointer movements. Property:"Synaptics Move Speed"Option "PressureMotionMinZ" "integer"β finger pressure at which minimum pressure motion factor is applied. Property:"Synaptics Pressure Motion"Option "PressureMotionMaxZ" "integer"β finger pressure at which maximum pressure motion factor is applied. Property:"Synaptics Pressure Motion"Option "PressureMotionMinFactor" "integer"β lowest setting for pressure motion factor. Property:"Synaptics Pressure Motion Factor"Option "PressureMotionMaxFactor" "integer"β greatest setting for pressure motion factor. Property:"Synaptics Pressure Motion Factor"Option "HorizHysteresis" "integer"β the minimum horizontal HW distance required to generate motion events. can be specified as a percentage. increase it if noise motion is a problem for you (we've all been there π₯²). Zero is disabled. Default:0.5percent of the diagonal or (in case of evdev) the appropriate"fuzz"as advertised by the device.Option "VertHysteresis" "integer"β the minimum vertical HW distance required to generate motion events. seeHorizHysteresis. πOption "UpDownScrolling" "boolean"β if on, the up/down buttons generate button 4/5 events. if off, the up button generates a double click and the down button generates a button 2 event. this option is only available for touchpads with physical scroll buttons. Property:"Synaptics Button Scrolling"Option "LeftRightScrolling" "boolean"β if on, the left/right buttons generate button 6/7 events. if off, the left/right buttons both generate button 2 events. this option is only available for touchpads with physical scroll buttons. Property:"Synaptics Button Scrolling"Option "UpDownScrollRepeat" "boolean"β if on, and the up/down buttons are used for scrolling (UpDownScrolling), these buttons will send auto-repeating 4/5 events, with the delay between repeats determined byScrollButtonRepeat. this option is only available for touchpads with physical scroll buttons. Property:"Synaptics Button Scrolling Repeat"Option "LeftRightScrollRepeat" "boolean"β if on, and the left/right buttons are used for scrolling (LeftRightScrolling), these buttons will send auto-repeating 6/7 events, with the delay between repeats determined byScrollButtonRepeat. this option is only available for touchpads with physical scroll buttons. Property:"Synaptics Button Scrolling Repeat"Option "ScrollButtonRepeat" "integer"β the number of milliseconds between repeats of button events 4-7 from the up/down/left/right scroll buttons. this option is only available for touchpads with physical scroll buttons. Property:"Synaptics Button Scrolling Time"Option "EmulateMidButtonTime" "integer"β maximum time (in milliseconds) for middle button emulation. Property:"Synaptics Middle Button Timeout"Option "EmulateTwoFingerMinZ" "integer"β for touchpads that can't detect multiple fingers but can detect finger pressure and width, this sets the Z pressure threshold. when both Z pressure and W width thresholds are crossed, a two finger press will be emulated. this defaults to a value that disables emulation on touchpads with real two-finger detection, and defaults to a value that enables emulation on the remaining touchpads that support pressure and width support. Property:"Synaptics Two-Finger Pressure"Option "EmulateTwoFingerMinW" "integer"β for touchpads that can't detect multiple fingers but can detect finger width and pressure, this sets the W width threshold. when both W width and Z pressure thresholds are crossed, a two finger press will be emulated. this feature works best with (PalmDetect) off. Property:"Synaptics Two-Finger Width"Option "TouchpadOff" "integer"β switch off the touchpad. valid values are:0β Touchpad is enabled1β Touchpad is switched off (physical clicks still work)2β Only tapping and scrolling is switched off
when the touchpad is switched off, button events caused by a physical button press are still interpreted. on a ClickPad, this includes software-emulated middle and right buttons as defined by the SoftButtonAreas setting. Property: "Synaptics Off"
okay so that's the setup, the vibes, and the whole options list so far π but bestie we are not done β more of this page is coming in the next parts, so stay tuned π
Option "LockedDrags" "boolean"β okay so if this is off, your tap-and-drag gesture just ends the second you lift your finger. If it's on, the drag stays alive even after you let go π«Ά, and it keeps going until you tap a second time, or untilLockedDragTimeoutruns out. Property:"Synaptics Locked Drags"Option "LockedDragTimeout" "integer"β how long (in milliseconds) it takes forLockedDragsmode to auto-turn-off after your finger leaves the touchpad. Property:"Synaptics Locked Drags Timeout"Option "RTCornerButton" "integer"β which mouse button gets reported when you tap the right top corner. Set it to0to disable. Property:"Synaptics Tap Action"Option "RBCornerButton" "integer"β which mouse button gets reported on a right bottom corner tap. Set to0to disable. Property:"Synaptics Tap Action"Option "LTCornerButton" "integer"β which mouse button gets reported on a left top corner tap. Set to0to disable. Property:"Synaptics Tap Action"Option "LBCornerButton" "integer"β which mouse button gets reported on a left bottom corner tap. Set to0to disable. Property:"Synaptics Tap Action"Option "TapButton1" "integer"β which mouse button gets reported on a non-corner one-finger tap. Set to0to disable. Property:"Synaptics Tap Action"Option "TapButton2" "integer"β which mouse button gets reported on a non-corner two-finger tap. Set to0to disable. Property:"Synaptics Tap Action"Option "TapButton3" "integer"β which mouse button gets reported on a non-corner three-finger tap. Set to0to disable. Property:"Synaptics Tap Action"Option "ClickFinger1" "integer"β which mouse button gets reported when you left-click with one finger. Set to0to disable. Property:"Synaptics Click Action"Option "ClickFinger2" "integer"β which mouse button gets reported when you left-click with two fingers. Set to0to disable. Property:"Synaptics Click Action"Option "ClickFinger3" "integer"β which mouse button gets reported when you left-click with three fingers. Set to0to disable. Property:"Synaptics Click Action"Option "CircularScrolling" "boolean"β if it's on, circular scrolling is the vibe π. Property:"Synaptics Circular Scrolling"Option "CircScrollDelta" "float"β how much angle (in radians) your finger has to move to fire off a scroll event. Property:"Synaptics Circular Scrolling Distance"Option "CircScrollTrigger" "integer"β the trigger region on the touchpad that kicks off circular scrolling:0β All Edges1β Top Edge2β Top Right Corner3β Right Edge4β Bottom Right Corner5β Bottom Edge6β Bottom Left Corner7β Left Edge8β Top Left Corner
Property: "Synaptics Circular Scrolling Trigger"
Option "CircularPad" "boolean"β instead of being a rectangle, the edge becomes the ellipse enclosed by theLeft/Right/Top/BottomEdgeparameters. It's giving circular touchpad realness β. Property:"Synaptics Circular Pad"Option "PalmDetect" "boolean"β whether palm detection should be enabled or not. Heads up bestie: this also needs hardware/firmware support from the touchpad itself, no cap. Property:"Synaptics Palm Detection"Option "PalmMinWidth" "integer"β the minimum finger width at which a touch gets treated as a palm. Property:"Synaptics Palm Dimensions"Option "PalmMinZ" "integer"β the minimum finger pressure at which a touch gets treated as a palm. Property:"Synaptics Palm Dimensions"Option "CoastingSpeed" "float"β your finger needs to produce this many scrolls per second before coasting even starts. The default is20, which should stop you from accidentally starting to coast.0disables coasting entirely. Property:"Synaptics Coasting Speed"Option "CoastingFriction" "float"β the number of scrolls/secondΒ² used to slow the coasting speed down. Default is50. Property:"Synaptics Coasting Speed"Option "SingleTapTimeout" "integer"β the timeout after a tap that lets the driver recognize it as a single tap. Property:"Synaptics Tap Durations"Option "GrabEventDevice" "boolean"β ifGrabEventDeviceistrue, the driver will grab the event device for exclusive use when it's using the linux 2.6 event protocol. With other protocols, this option does literally nothing. Grabbing the event device means no other user space or kernel space program sees the touchpad events at all. That's actually desirable if your X config file lists/dev/input/miceas an input device, but it's undesirable if you wanna monitor the device from user space. When you change this with thesynclientprogram, the change won't take effect until the synaptics driver is disabled and re-enabled β and you can do that by switching to a text console and then switching back to X. πOption "TapAndDragGesture" "boolean"β turns the tap-and-drag gesture on/off. This gesture is an alternative way of dragging: you tap (touch and release the finger), then touch again and move your finger on the touchpad. It's enabled by default, and you can disable it by setting theTapAndDragGestureoption tofalse. Property:"Synaptics Gestures"Option "VertResolution" "integer"β resolution of X coordinates in units/millimeter. This value gets used together withHorizResolutionto compensate for unequal vertical and horizontal sensitivity. SettingVertResolutionandHorizResolutionto equal values means no compensation. The default value is read from the touchpad, or set to1if it couldn't be read. Property:"Synaptics Pad Resolution"Option "HorizResolution" "integer"β resolution of Y coordinates in units/millimeter. This value gets used together withVertResolutionto compensate for unequal vertical and horizontal sensitivity. SettingVertResolutionandHorizResolutionto equal values means no compensation. The default value is read from the touchpad, or set to1if it couldn't be read. Property:"Synaptics Pad Resolution"Option "AreaLeftEdge" "integer"β ignores movements, scrolling and tapping that start to the left of this edge. This option is disabled by default and you can enable it by settingAreaLeftEdgeto any integer value other than zero. If your server supports it (version 1.9 and later), the edge can be given as a percentage of the total width of the touchpad. Property:"Synaptics Area"Option "AreaRightEdge" "integer"β ignores movements, scrolling and tapping that start to the right of this edge. Disabled by default, and you enable it by settingAreaRightEdgeto any integer value other than zero. If your server supports it (version 1.9 and later), the edge can be given as a percentage of the total width of the touchpad. Property:"Synaptics Area"Option "AreaTopEdge" "integer"β ignores movements, scrolling and tapping that start above this edge. Disabled by default, and you enable it by settingAreaTopEdgeto any integer value other than zero. If your server supports it (version 1.9 and later), the edge can be given as a percentage of the total height of the touchpad. Property:"Synaptics Area"Option "AreaBottomEdge" "integer"β ignores movements, scrolling and tapping that start below this edge. Disabled by default, and you enable it by settingAreaBottomEdgeto any integer value other than zero. If your server supports it (version 1.9 and later), the edge can be given as a percentage of the total height of the touchpad. Property:"Synaptics Area"Option "SoftButtonAreas" "RBL RBR RBT RBB MBL MBR MBT MBB"β this option is only available on ClickPad devices. It enables soft button click area support on ClickPads. The first four parameters are the left, right, top, bottom edge of the right button, respectively; the second four parameters are the left, right, top, bottom edge of the middle button, respectively. Any of these values can be given as a percentage of the touchpad width or height, whichever applies. If any edge is set to0(not 0%), the button is assumed to extend to infinity in that direction. Setting all values to0(not 0%) disables soft button areas. Button areas may not overlap, but two buttons are allowed to share an edge value. Property:"Synaptics Soft Button Areas"Option "HasSecondarySoftButtons" "boolean"β this option is only available on ClickPad devices. It enables the secondary software button area support. The exact area has to be set in option"SecondarySoftButtonAreas". See ClickPad support for more details.Option "SecondarySoftButtonAreas" "RBL RBR RBT RBB MBL MBR MBT MBB"β this option is only available on ClickPad devices, and only ifOption "HasSecondarySoftButtons"is enabled. It defines the secondary soft button click areas on ClickPad devices (usually on top of the device). For the allowed values for this option, seeOption "SoftButtonAreas".
β οΈ Primary and secondary soft button areas must not overlap each other. If they do, the behavior of the driver is undefined. π
Property: "Synaptics Secondary Soft Button Areas". This property is only initialized if Option "HasSecondarySoftButtons" is enabled and this option is set in the xorg.conf(5).
π CONFIGURATION DETAILS π
π Area handling π
okay bestie, so the LeftEdge, RightEdge, TopEdge and BottomEdge parameters are the blueprint for the edge and corner areas of your touchpad. They split the touchpad area into 9 pieces, like this:
β β
β LeftEdge β RightEdge
ββββββββββββββββββββββββββ Physical top edge
β 1 β 2 β 3 β
ββββββββββββββββββββββββββ TopEdge
β β β β
β 4 β 5 β 6 β
β β β β
ββββββββββββββββββββββββββ BottomEdge
β 7 β 8 β 9 β
ββββββββββββββββββββββββββ Physical bottom edge
β Physical left edge β Physical right edge
Coordinates to the left of LeftEdge are part of the left edge (areas 1, 4 and 7), coordinates to the left of LeftEdge and above TopEdge (area 1) are part of the upper left corner, etc. Like, the corners are just built different π
.
A good way to find appropriate edge parameters is to use evtest(1) on the device to see the x/y coordinates corresponding to different positions on the touchpad. No cap, that's the move.
The perceived physical edges may be adjusted with the AreaLeftEdge, AreaRightEdge, AreaTopEdge, and AreaBottomEdge options. If these values are set to something other than the physical edges, input that starts in the space between the area edge and the respective physical edge is ignored. Note that this reduces the available space on the touchpad to start motions in. So like, don't accidentally ghost your own touchpad, bestie π«Ά.
πΈ Tapping πΈ
A tap event happens when the finger is touched and released in a time interval shorter than MaxTapTime, and the touch and release coordinates are less than MaxTapMove units apart. A "touch" event happens when the Z value goes above FingerHigh, and an "untouch" event happens when the Z value goes below FingerLow. That's the whole vibe check right there.
The MaxDoubleTapTime parameter has the same function as the MaxTapTime parameter, but for the second, third, etc tap in a tap sequence. If you can't perform double clicks fast enough (for example, xmms depends on fast double clicks), try reducing this parameter. If you can't get word selection to work in xterm (ie button down, button up, button down, move mouse), try increasing this parameter. Fr fr, this one is lowkey a lifesaver.
The ClickTime parameter controls the delay between the button down and button up X events generated in response to a tap event. A too long value can cause undesirable autorepeat in scroll bars and a too small value means that visual feedback from the gui application you are interacting with is harder to see. So it's giving "balance is key" β¨.
π₯ Acceleration π₯
The MinSpeed, MaxSpeed and AccelFactor parameters control the pointer motion speed. The speed value defines the scaling between touchpad coordinates and screen coordinates. When moving the finger very slowly, the MinSpeed value is used, when moving very fast the MaxSpeed value is used. When moving the finger at moderate speed, you get a pointer motion speed somewhere between MinSpeed and MaxSpeed. If you don't want any acceleration, set MinSpeed and MaxSpeed to the same value. Iconic behavior, honestly.
The MinSpeed, MaxSpeed and AccelFactor parameters don't have any effect on scrolling speed. Scrolling speed is determined solely from the VertScrollDelta and HorizScrollDelta parameters. To invert the direction of vertical or horizontal scrolling, set VertScrollDelta or HorizScrollDelta to a negative value. Not me flipping the scroll like it's a personality trait π.
Acceleration is mostly handled outside the driver, thus the driver will translate MinSpeed into constant deceleration and adapt MaxSpeed at startup time. This ensures you can use the other acceleration profiles, albeit without pressure motion. However the numbers at runtime will likely be different from any options you may have set. So like, the driver said "I got this" and did its own thing π.
π¦ Pressure motion π¦
When pressure motion is activated, the cursor motion speed depends on the pressure exerted on the touchpad (the more pressure exerted on the touchpad, the faster the pointer). More precisely the speed is first calculated according to MinSpeed, MaxSpeed and AccelFactor, and then is multiplied by a sensitivity factor. It's giving "press harder, go faster" main character energy π.
The sensitivity factor can be adjusted using the PressureMotion parameters. If the pressure is below PressureMotionMinZ, PressureMotionMinFactor is used, and if the pressure is greater than PressureMotionMaxZ, PressureMotionMaxFactor is used. For a pressure value between PressureMotionMinZ and PressureMotionMaxZ, the factor is increased linearly. So it's a whole gradient situation, periodt.
π Middle button emulation π
Since most synaptics touchpad models don't have a button that corresponds to the middle button on a mouse, the driver can emulate middle mouse button events. If you press both the left and right mouse buttons at almost the same time (no more than EmulateMidButtonTime milliseconds apart) the driver generates a middle mouse button event. Bestie, it's literally manifesting a middle click out of thin air β¨.
π Circular scrolling π
Circular scrolling acts like a scrolling wheel on the touchpad. Scrolling is engaged when a drag starts in the given CircScrollTrigger region, which can be all edges, a particular side, or a particular corner. Once scrolling is engaged, moving your finger in clockwise circles around the center of the touchpad will generate scroll down events and counter clockwise motion will generate scroll up events. Lifting your finger will disengage circular scrolling. Use tight circles near the center of the pad for fast scrolling and large circles for better control. When used together with vertical scrolling, hitting the upper or lower right corner will seamlessly switch over from vertical to circular scrolling. This is highkey the most iconic feature here, no cap π.
π Coasting π
Coasting is enabled by setting the CoastingSpeed parameter to a non-zero value. Coasting comes in two flavors: conventional (finger off) coasting, and corner (finger on) coasting. It's giving "let it ride" energy.
Conventional coasting is enabled when coasting is enabled, and CornerCoasting is set to false. When conventional coasting is enabled, horizontal/vertical scrolling can continue after the finger is released from the lower/right edge of the touchpad. The driver computes the scrolling speed corresponding to the finger speed immediately before the finger leaves the touchpad. If this scrolling speed is larger than the CoastingSpeed parameter (measured in scroll events per second), the scrolling will continue with the same speed in the same direction until the finger touches the touchpad again. So it's like the scroll said "I'm not done yet" π.
Corner coasting is enabled when coasting is enabled, and CornerCoasting is set to true. When corner coasting is enabled, edge scrolling can continue as long as the finger stays in a corner. Coasting begins when the finger enters the corner, and continues until the finger leaves the corner. CornerCoasting takes precedence over the seamless switch from edge scrolling to circular scrolling. That is, if CornerCoasting is active, scrolling will stop, and circular scrolling will not start, when the finger leaves the corner. So corner coasting is the main character here, and circular scrolling has to wait its turn π
.
π§ Noise cancellation π§
The synaptics has a built-in noise cancellation based on hysteresis. This means that incoming coordinates actually shift a box of predefined dimensions such that it covers the incoming coordinate, and only the boxes own center is used as input. Obviously, the smaller the box the better, but the likelihood of noise motion coming through also increases. So it's a trade-off, bestie β tiny box, tiny vibes, but also more chaos π.
π ClickPad support π
A click pad device has button(s) integrated into the touchpad surface. The user must press downward on the touchpad in order to generated a button press. ClickPad support is enabled if the option ClickPad is set or the property is set at runtime. On some platforms, this option will be set automatically if the kernel detects a matching device. On Linux, the device must have the INPUT_PROP_BUTTONPAD property set. It's giving "the touchpad is the button" energy, and honestly? Slay.
ClickPads do not support middle mouse button emulation. If enabling ClickPad support at runtime, the user must also set the middle mouse button timeout to 0. If auto-detected, middle mouse button emulation is disabled by the driver. So no middle-click shenanigans here, periodt.
ClickPads provide software emulated buttons through Option "SoftButtonAreas". These buttons enable areas on the touchpad to perform as right or middle mouse button. When the user performs a click within a defined soft button area, a right or middle click is performed. It's like invisible buttons that ate and left no crumbs π
.
Some laptops, most notably the Lenovo T440, T540 and x240 series, provide a pointing stick without physical buttons. On those laptops, the top of the touchpad acts as software-emulated button area. This area can be enabled with Option "HasSecondarySoftButtons" and configured with Option "SecondarySoftButtonAreas". On some platforms, this option will be set automatically if the kernel detects a matching device. On Linux, the device must have the INPUT_PROP_TOPBUTTONPAD property set. So if you've got one of those laptops, the top of your touchpad is literally the plot twist π«Ά.
β¨ DEVICE PROPERTIES β¨
okay so if you're on Synaptics 1.0 or higher and your X server is 1.6 or higher, the driver supports input device properties π
. and the synclient tool that ships with synaptics version 1.1? it uses input device properties by default, periodt.
here's every property it supports, bestie π«Ά:
Synaptics Edgesβ 32 bit, 4 values, left, right, top, bottom.Synaptics Fingerβ 32 bit, 3 values, low, high, press.Synaptics Tap Timeβ 32 bit.Synaptics Tap Moveβ 32 bit.Synaptics Tap Durationsβ 32 bit, 3 values, single touch timeout, max tapping time for double taps, duration of a single click.Synaptics ClickPadβ 8 bit (Bool).Synaptics Middle Button Timeoutβ 32 bit.Synaptics Two-Finger Pressureβ 32 bit.Synaptics Two-Finger Widthβ 32 bit.Synaptics Scrolling Distanceβ 32 bit, 2 values, vert, horiz.Synaptics Edge Scrollingβ 8 bit (BOOL), 3 values, vertical, horizontal, corner.Synaptics Two-Finger Scrollingβ 8 bit (BOOL), 2 values, vertical, horizontal.Synaptics Move Speedβ FLOAT, 4 values, min, max, accel, <deprecated> π« (yes bestie, that last one is literally deprecated, i'm just the messenger)Synaptics Button Scrollingβ 8 bit (BOOL), 2 values, updown, leftright.Synaptics Button Scrolling Repeatβ 8 bit (BOOL), 2 values, updown, leftright.Synaptics Button Scrolling Timeβ 32 bit.Synaptics Offβ 8 bit, valid values (0, 1, 2).Synaptics Locked Dragsβ 8 bit (BOOL).Synaptics Locked Drags Timeoutβ 32 bit.Synaptics Tap Actionβ 8 bit, up toMAX_TAPvalues (seesynaptics.h), 0 disables an element. order: RT, RB, LT, LB, F1, F2, F3.Synaptics Click Actionβ 8 bit, up toMAX_CLICKvalues (seesynaptics.h), 0 disables an element. order: Finger 1, 2, 3.Synaptics Circular Scrollingβ 8 bit (BOOL).Synaptics Circular Scrolling Distanceβ FLOAT.Synaptics Circular Scrolling Triggerβ 8 bit, valid values 0..8 (inclusive) order: any edge, top, top + right, right, right + bottom, bottom, bottom + left, left, left + top.Synaptics Circular Padβ 8 bit (BOOL).Synaptics Palm Detectionβ 8 bit (BOOL).Synaptics Palm Dimensionsβ 32 bit, 2 values, width, z.Synaptics Coasting Speedβ FLOAT, 2 values, speed, friction.Synaptics Pressure Motionβ 32 bit, 2 values, min, max.Synaptics Pressure Motion Factorβ FLOAT, 2 values, min, max.Synaptics Grab Event Deviceβ 8 bit (BOOL).Synaptics Gesturesβ 8 bit (BOOL), 1 value, tap-and-drag.Synaptics Areaβ theAreaLeftEdge,AreaRightEdge,AreaTopEdgeandAreaBottomEdgeparameters are what define the edges of the active area of the touchpad. every single movement, scroll and tap that happens outside of this area gets straight up ignored π. and this property is disabled by default, jsyk.
32 bit, 4 values, left, right, top, bottom. 0 disables an element.
Synaptics Soft Button Areasβ this property is only available on ClickPad devices β¨. the Right and middle soft button areas are there to support right and middle click actions on a ClickPad device. and if you hand it 0 for all values of a given button, that button area is disabled, simple as that.
32 bit, 8 values, RBL, RBR, RBT, RBB, MBL, MBR, MBT, MBB.
Synaptics Capabilitiesβ this one is read-only and it's basically the touchpad's little resume π, expressing its physical capability, most notably whether the touchpad hardware supports multi-finger tapping and scrolling.
8 bit (BOOL), 7 values (read-only), has left button, has middle button, has right button, two-finger detection, three-finger detection, pressure detection, and finger/palm width detection.
Synaptics Pad Resolutionβ 32 bit unsigned, 2 values (read-only), vertical, horizontal in units/millimeter.
π NOTES
okay real talk, configuration through InputClass sections is the recommended way in X servers 1.8 and later π«Ά. peep xorg.conf.d(5) for the deets. there's an example xorg.conf.d snippet provided in ${sourcecode}/conf/70-synaptics.conf β¨
configuration through hal fdi files is the recommended way in X servers 1.5, 1.6 and 1.7. an example hal policy file lives in ${sourcecode}/conf/11-x11-synaptics.fdi πΈ
now, if you're using either Protocol "auto-dev" (which is the default) or Protocol "event", the driver initializes defaults based on the capabilities the kernel driver reports. Acceleration, edges and resolution are all based on the dimensions the kernel reports. so:
- if the kernel reports multi-finger detection β two-finger vertical scrolling is enabled, horizontal two-finger scrolling is disabled, and edge scrolling is disabled.
- if no multi-finger capabilities are reported β edge scrolling is enabled for both horizontal and vertical scrolling.
and tapping? disabled by default on touchpads with one or more physical buttons π. to turn it on you gotta map tap actions to buttons. see the "TapButton1", "TapButton2" and "TapButton3" options, bestie.
button mapping for physical buttons is handled in the server, btw. so if the device gets switched to left-handed (which is an in-server mapping of physical buttons 1, 2, 3 to the logical buttons 3, 2, 1, respectively), then both physical and TapButtons are affected. to counteract that, you need to set the TapButtons up in reverse order (TapButton1=3, TapButton2=1). the way that's so sneaky π
π« REMOVED OPTIONS
these options are no longer part of the driver configuration, they're giving ghost of touchpad past π»:
Option "Repeater" "string"Option "HistorySize" "integer"Option "SpecialScrollAreaRight" "boolean"Option "GuestMouseOff" "boolean"Option "SHMConfig" "boolean"Option "FingerPress" "integer"Option "TrackstickSpeed" "float"Option "EdgeMotionMinZ" "integer"Option "EdgeMotionMaxZ" "integer"Option "EdgeMotionMinSpeed" "integer"Option "EdgeMotionMaxSpeed" "integer"Option "EdgeMotionUseAlways" "boolean"
π AUTHORS
Peter Osterlund <petero2@telia.com> and many others. (and many others, the way they carried this whole thing π)
π SEE ALSO
Xorg(1), xorg.conf(5), Xserver(1), X(7), synclient(1), syndaemon(1)
and that's the whole page, bestie!! π this was X Version 11, xf86-input-synaptics 1.10.0 β go forth and touch your touchpad with main character energy, you've absolutely got this π
β¨π¦
π¦ where this page comes from
- alpine 3.24: xf86-input-synaptics-doc 1.10.0-r0 Β· MIT
- arch rolling: xf86-input-synaptics 1.10.0-1 Β· MIT
- fedora 43: xorg-x11-drv-synaptics-legacy 1.10.0-3.fc43 Β· MIT
- fedora 44: xorg-x11-drv-synaptics-legacy 1.10.0-4.fc44 Β· MIT
- nixos 26.05: xf86-input-synaptics 1.10.0
- nixpkgs unstable: xf86-input-synaptics 1.10.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms