MousePods is an open-source Python app that turns motion from supported AirPods into mouse input on Linux, without an Apple device. Created by Matteo Gaudioso, it reads the earbuds’ motion data and sends cursor input through Linux’s virtual input system. The project lists AirPods 3 and AirPods Pro 2 as verified on hardware. (MousePods project)

How MousePods turns motion into cursor input

Dark MousePods interface with a rendered earbud, orientation axes, a cursor panel and colored motion traces.

MousePods maps head turns or movement of an earbud held in your hand to cursor movement. Its interface includes a motion view, cursor panel, calibration controls and sensor information. The project also describes click options including a stem press, a quick head tilt or dwell, where the cursor stays over a target.

If you want mouse input, start with the mode the project lists as hardware-tested. Pointer mode and glide have different, narrower test status.

Why the AirPods 3 MTU finding matters

For AirPods 3 models A2564/A2565, MousePods’ technical findings describe a specific Linux Bluetooth issue. The project says motion-sensor descriptors did not appear at the default 672-byte L2CAP receive MTU. They appeared after it was raised to 2,582 bytes, the value the project identifies as used by iOS. L2CAP is the Bluetooth protocol layer that carries this connection’s data; here, the receive MTU affected which sensor descriptors the earbuds announced. (MousePods AirPods 3 findings)

The project identifies the AirPods 3 route as Apple RemoteHID over AACP on RTBuddy channel 0x800, rather than the SensorDataWX start protocol used by newer models. Its documented test used Ubuntu 24.04, BlueZ 5.72, Python 3.12 and AirPods firmware marketing version 6296592.

MousePods reports a maximum AirPods 3 motion stream of about 210 Hz, but recommends about 100 Hz as a practical setting. In a 23-second shared-link test near 180 Hz, the project recorded 12 gaps of 50 ms while A2DP audio and a BLE mouse shared the link. Those figures describe the project’s test conditions, not a guarantee for every Bluetooth setup.

Which models and modes the project lists

MousePods lists AirPods 3 and AirPods Pro 2 as hardware-verified. It lists AirPods 2, AirPods Pro 1 and AirPods Max as untested. The project notes that AirPods 4 share a protocol with Pro models, but does not list AirPods 4 as verified by MousePods.

The project marks mouse mode, using head movement or an earbud held in the hand, as tested on hardware. Pointer mode with corner calibration is simulation-only, while glide mode, which moves an earbud across a table, is experimental. The AirPods charging case cannot provide the motion input: the project says AirPods 3 sensors are off while the earbuds are inside it.

MousePods’ website describes its opentrack output as tested offline, not in a game. The repository separately describes a contributor’s direct Steam/Proton integration, tested on Bazzite with AirPods Pro 2 in Assetto Corsa and Euro Truck Simulator 2. That is a different route from opentrack. (MousePods repository)

What you need to run MousePods on Linux

The project requires Linux with BlueZ, paired AirPods and write access to /dev/uinput, the interface used to create virtual input devices. It says root access and an Apple host are not required. The project lists Python 3.10 or later as a requirement; its documented AirPods 3 test used Python 3.12.

A browser is not enough: the project says MousePods relies on Bluetooth Classic, while Web Bluetooth supports BLE. The app’s mouse output is described for both Wayland and X11, but the project’s stated model and mode status still matters when deciding whether a particular setup matches its tested cases.