Best way to achieve very slow pointer motion? (for accessibility)

Colomban Wendling cwendling at hypra.fr
Tue Nov 27 10:25:05 UTC 2018


Hello,

I'm working on the MATE desktop environment to try and enhance the
pointer speed user setting to allow for a very slow pointer to better
fit accessibility for people with limited motor abilities (motor
deficiencies, some elderly, etc.).

Currently, MATE is providing a setting controlling libinput's "Accel
Speed" (through the libinput X driver, which allows values in the range
[-1, 1]).  This is nice and works well for most users, but is not nearly
enough to slow the mouse to the kind of levels we're talking about for
accessibility.
Note that I am *not* saying that the mouse speed, DPI or whatnot is
incorrect, just that I need to be able to *also* reach slower speeds,
while still allowing the current ones.

The question here is what is the recommended way to achieve
lower-than-normal pointer speeds?  I found a few candidates, but would
like input on what is a sensible way to go, balancing what libinput
provides and a simple and powerful enough user setting:

* Use the "flat" acceleration profile for slow mode
  - This works fairly well and allows for very low pointer speeds.
  - The main question is: is there a sensible way to know the rough
equivalence point between the "adaptive" and "flat" profiles, so it
could be switched automatically on low value of a single "pointer speed"
setting?  The idea is that we'd like to have a setting as simple as
possible yet providing sensible results for typical use cases.  Ideally,
we'd have single slider controlling pointer speed that would just do the
Right Thing.

* Modifying libinput to allow for values of "Accel Speed" lower than -1
  - Requires changing libinput and/or the libinput X driver (?)
  - Requires using that newer version

* Kind of OT on this ML, but using the "Coordinate Transformation
Matrix" setting (which I don't think comes from libinput, but I'm not
sure yet)
  - It does the job, but:
    - it is trickier to use
    - it isn't designed for this
    - it seems to cause issues on some corner case setups (e.g. certain
Wine apps)
    - it might conflict with more legitimate use of the feature, like
automatic touchscreen/tablet rotation, etc.

Are there other, more appropriate options?
Basically, what I'd like to achieve is similar to being able to set the
"Accel Speed" to a value way under -1.  If there are no better options,
I can consider adding a "enable pointer acceleration" user setting which
would control whether the "adaptive" or "flat" profile is used, but I'd
like to avoid it if possible to keep the user setting simple and
understandable.

Thanks for your input,
Colomban


More information about the wayland-devel mailing list