Skip to content

Gnarus-G/maccel

Repository files navigation

maccel

Mouse pointer acceleration driver. A CLI tool and TUI allows you to easily edit a curve's parameters.

Linear Acceleration Function

image

$$V = \frac{\sqrt{dx_0^2 + dy_0^2}}{i}$$

$$dx_f = dx_0 * (1 + aV)$$

$$dy_f = dy_0 * (1 + aV)$$

Where $dx$ and $dy$ are the directional displacements read from the mouse, $i$ is the polling interval of the mouse; this would be 1ms if the polling rate is 1000Hz, and $a$ is the user provided acceleration factor.

The more general function, which is relevant with a set input offset, is:

$$(dx_f, dy_f) = (dx_0, dy_0) * (1 + a * (V - offset_in)^2 / V)$$

Other Curves

  • Natural image

  • Synchronous image

  • Look up table

Install

Shell Script (Recommended)

Make sure to have these dependencies installed on your machine: curl, git, make, dkms, and the linux headers in /lib/modules/

You might also, and you probably don't, have to install gcc or clang depending on with which your distro's kernel was built.

curl -fsSL https://www.maccel.org/install.sh | sudo sh

If you choose to build the cli from source:

curl -fsSL https://www.maccel.org/install.sh | sudo BUILD_CLI_FROM_SOURCE=1 sh

You'll need cargo

Arch (PKGBUILD)

git clone https://github.com/Gnarus-G/maccel
cd maccel
makepkg -si

Run modprobe maccel after installing.

Optionally, add modprobe_on_install=true to your dkms config file (usually located at /etc/dkms/framework.conf) to automatically modprobe after installing a dkms module.

Post-install recommendation

Optionally, add yourself to the maccel group using usermod -aG maccel $USER after installing, if you want to run maccel without running as root.

Uninstall

sh /opt/maccel/uninstall.sh

CLI Usage

CLI to control the parameters for the maccel driver

Usage: maccel [COMMAND]

Commands:
  tui         Open the Terminal UI to manage the parameters and see a graph of the sensitivity
  set         Set the value for a parameter of the maccel driver
  get         Get the values for parameters of the maccel driver
  completion  Generate a completions file for a specified shell
  help        Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

Notes

One should disable the acceleration done by default in some distros, e.g. by xset or libinput. Full Guide

Here is Breakdown of why and how I ended up making this

Troubleshooting Install

linux headers

You want to make sure that /lib/modules/ is not empty. For example mine looks like this:

total 0
drwxr-xr-x 1 root root    114 Jan 29 17:59 .
drwxr-xr-x 1 root root 159552 Jan 29 22:39 ..
drwxr-xr-x 1 root root     10 Jan 29 17:59 6.6.14-1-lts
drwxr-xr-x 1 root root     12 Jan 29 17:59 6.7.0-zen3-1-zen
drwxr-xr-x 1 root root    494 Jan 29 17:59 6.7.2-arch1-1
drwxr-xr-x 1 root root    494 Jan 31 21:54 6.7.2-zen1-1-zen

You want to find headers that match your kernel as represented by

uname -r

On an arch based distro you search for the available headers with

pacman -Ss linux headers

gcc

The version matters, it must match the version with which the kernel was built.

For example you might encounter such an error:

image

And you'll have to find a version of gcc that matches. This will be more or less annoying depending on your distro and/or how familiar you are with it.

debian stable

This distro is effectively not supported for the foreseeable future. It's hard to install and build the kernel module for it due to missing/outdated and hard-to-install dependencies. See issues: #81 #43

Miscellaneous

If you notice any weird behavior and are looking to investigate it,
then try a debug build of the driver. Run this modified install command.

curl -fsSL https://www.maccel.org/install.sh | sudo DEBUG=1 sh

Watch the extra log messages flowing though:

dmesg -w

This debugging experience might be lacking still. Feel free to report any issue

References

Contributing

First off, I appreciate you. Now here are some guidelines:

Commit messages

Subject line:

  • First letter is capitalized
  • Imperative tense (e.g. "Add ...", not "Added ..." or "Adds ...")
  • Include as much detail as you can.

See more

Add new acceleration curves/modes

See PR #60 which implements the Synchronous mode for a walkthrough of how to do it.