UATP(4)
π UATP(4): USB Apple trackpad driver π
okay so bestie, this is the UATP(4) page from the Kernel Interfaces Manual, with the manual name folded right in up top instead of doing that boring header-line copy situation. Itβs the USB Apple trackpad driver tea, and itβs lowkey iconic. π
π NAME π
uatp β USB Apple trackpad driver β¨
β¨ SYNOPSIS β¨
uatp* at uhidev? reportid ?
wsmouse* at uatp? mux 0
πΈ DESCRIPTION πΈ
The uatp driver provides support for the USB trackpads found in Apple laptops since 2005, exposed through wsmouse(4). Some USB Apple trackpads are standard USB HID mice supported by ums(4), but uatp supports more features. π¦
The following sysctl(8) variables control behavior of USB Apple trackpads β these knobs are literally the main character energy of this whole page:
hw.uatpN.two_finger_buttonsβ Bit mask of buttons to emulate when two fingers are on the trackpad while the button is pressed. π«Άhw.uatpN.three_finger_buttonsβ Bit mask of buttons to emulate when three fingers are on the trackpad while the button is pressed. πhw.uatpN.multifinger_trackβ What to do when multiple fingers are moved on the trackpad. If set to0, ignore the input. If set to1, move as if a single finger were at the mean position of the fingers. If set to2, scroll. Note that scrolling is currently broken. πhw.uatpN.x_sensorsβ Number of sensor columns detecting the x positions of fingers on the trackpad. The driver should detect this based on the model of hardware, so you should not have to set this, and likewise for the x ratio and y sensors and ratio. π§hw.uatpN.x_ratioβ Ratio of the number of sensor columns in the trackpad to the number of distinct cursor x positions. β¨hw.uatpN.y_sensorsβ Number of sensor rows detecting the y positions of fingers on the trackpad. πΈhw.uatpN.y_ratioβ Ratio of the number of sensor rows in the trackpad to the number of distinct cursor y positions. π¦hw.uatpN.sensor_thresholdβ Nonnegative integer giving a lower bound on the βpressureβ a sensor must report for the driver to recognize input from it. π₯hw.uatpN.sensor_normalizerβ Nonnegative integer to subtract from the βpressureβ reported by a sensor when averaging them to estimate the pressure of a single finger. πhw.uatpN.palm_widthβ If zero, palm detection is disabled. Otherwise, a positive integer giving the number of consecutive sensors wide or high that will be interpreted as a palm instead of a finger and therefore ignored. πhw.uatpN.old_raw_weight,hw.uatpN.old_smoothed_weight,hw.uatpN.new_raw_weightβ When a finger moves on the trackpad, the new smoothed (cursor) position is computed as a positive linear combination of the old raw (trackpad) position, the old smoothed position, and the new raw position. The weights of the linear combination are given by these sysctl knobs. πhw.uatpN.motion_thresholdβ Threshold below which a difference in smoothed position will not be reported as an input event to userland. πhw.uatpN.motion_multiplierβ Positive integer by which a difference in smoothed position will be multiplied before passing it as an input event to userland. πhw.uatpN.motion_divisorβ Positive integer by which a difference in smoothed position will be divided, after multiplying it by the motion multiplier, before passing it as an input event to userland. β¨hw.uatpN.fast_motion_thresholdβ Threshold above which to use the fast motion factors below. βhw.uatpN.fast_motion_multiplierβ Positive integer by which to multiply a large difference in smoothed position. π₯hw.uatpN.fast_motion_divisorβ Positive integer by which to divide a large difference in smoothed position, after multiplying it by the fast motion multiplier. π¦hw.uatpN.motion_delayβ Number of input packets beforeuatpreports motion to userland. πhw.uatpN.tap_limit_msecβ Positive integer giving the number of milliseconds of a fingerβs contact with the trackpad before it will not be considered a tap. πΈhw.uatpN.double_tap_limit_msecβ Positive integer giving the maximum number of milliseconds after a tap before a second tap will keep the button down. πhw.uatpN.one_finger_tap_buttonsβ Bit mask of buttons that a one-finger tap will press. π«Άhw.uatpN.two_finger_tap_buttonsβ Bit mask of buttons that a two-finger tap will press. πhw.uatpN.three_finger_tap_buttonsβ Bit mask of buttons that a three-finger tap will press. β¨hw.uatpN.tap_track_distance_limitβ Maximum distance in smoothed position that will be interpreted as a tap instead of motion. π
π¦ SEE ALSO π¦
Go give these pages some love, bestie:
β HISTORY β
The uatp driver first appeared in NetBSD 7.0. Periodt. β¨
π AUTHORS π
The uatp driver was originally written by Taylor R. Campbell <riastradh@NetBSD.org>. ππ
π BUGS π
Okay bestie, the not-so-cute parts:
- Sometimes, particularly when X starts up, the driver gets wedged in an interrupt storm and does not reset the device. Setting
hw.uatpN.sensor_thresholdto a large number, say1000, and then back to its original value, can fix this. π - Palm detection is not very robust. π
- Multi-touch scrolling is currently broken. π
- Pinch-to-zoom and other fancy multi-touch input is not implemented. π
- On suspending and resuming,
uatpdetaches and reattaches, and loses all sysctl settings in the process. π
β οΈ Do not submerge your uatp devices in water: USB adenosine triphosphate is unstable in water, and will hydrolyze to USB adenosine diphosphate and phosphate, which is a lower energy state that makes your mouse narcoleptic in X. π
π cute little sign-off: the footer source/version is Debian, the date is August 4, 2012, and the manual page is UATP(4). mwah πβ¨
π¦ where this page comes from
- nixpkgs unstable: netbsd-source 11.0
- Copyright (c) 2012 The NetBSD Foundation, Inc
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms