Saitek X52/X52pro userspace driver for Unix/Linux
 
 
 
 
 
Go to file
nirenjan 03d58c62e8 feat: Improve virtual mouse speed calculations
Prior to this change, the mouse speed was controlled by an opaque
numeric value, that controlled both the speed and the delay between
updates. This caused a lot of choppy behavior with lower speeds, and the
really low speeds had as little as 1% speed difference between them in
the practical pixels/second speed, while there was effectively a 50%
jump in the speed between speed settings 11 and 12, due to the
hyperbolic relationship between steps. Post that, it was an even 25%
increase in sensitivity for every step.

This change modifies it so that the old Speed option is deprecated, it
is now replaced by the Sensitivity option, which is a direct percentage
scale from 10% to 500%. In addition, there is a CurveFactor option to
let it have fine control when there is little deflection, and move
faster when further away from the center. This also adds an
IsometricMode option which computes the speed as a function of the
cartesian distance from the center (`sqrt(dx^2 + dy^2)`). The default
behavior uses the existing linear speed which controls the speed of the
X and Y axes independently, but now uses the sensitivity and curve
factors to get better behavior. Also, the mouse events are consistently
reported every 10ms. This should make it a lot smoother.

Finally, this change also adds a Deadzone factor, which allows the user
to ignore small changes near the center of the joystick that can cause
mouse drift. This deadzone uses the total distance, so if just the X or
Y axis has moved, it will still allow suppressing any play in the thumb
stick.

Issue: #44
2026-04-01 22:49:04 -07:00
.github build(deps): bump codecov/codecov-action from 5 to 6 2026-03-27 08:17:04 +00:00
bugreport fix: Address compiler warnings 2026-03-19 00:10:18 -07:00
cli fix: Address compiler warnings 2026-03-19 00:10:18 -07:00
daemon feat: Improve virtual mouse speed calculations 2026-04-01 22:49:04 -07:00
docker build: Migrate CI to use distro containers 2026-03-26 12:23:38 -07:00
docs doc: Add new headers 2026-03-31 21:53:57 -07:00
evtest fix: Address compiler warnings 2026-03-19 00:10:18 -07:00
joytest build: Migrate to meson build 2026-03-12 10:20:01 -07:00
kernel_module Add kernel driver for Saitek X65F joystick 2021-09-29 12:59:34 -07:00
libusbx52 Initialize variables to avoid maybe-uninitialized warnings 2023-01-03 12:26:51 -08:00
libx52 feat: Update symbol visibility 2026-03-30 22:35:52 -07:00
libx52io feat: Update symbol visibility 2026-03-30 22:35:52 -07:00
libx52util feat: Update symbol visibility 2026-03-30 22:35:52 -07:00
m4 Disable -Wpacked compiler flag 2021-08-05 07:54:53 -07:00
po feat: Improve virtual mouse speed calculations 2026-04-01 22:49:04 -07:00
subprojects fix(pinelog): Cleanup unused parameter warnings 2026-03-18 22:25:26 -07:00
sys fix: Address compiler warnings 2026-03-19 00:10:18 -07:00
udev feat: Add meson support for configuring udev rules dir 2026-03-12 14:45:08 -07:00
vkm feat: Update symbol visibility 2026-03-30 22:35:52 -07:00
.gitattributes doc: Update for version 0.3.3 2026-03-12 11:34:54 -07:00
.gitignore Add client communication library 2021-11-04 10:48:59 -07:00
AUTHORS Add license clarification and authors file 2016-12-27 13:13:37 -08:00
CONTRIBUTING.md Update bug template and contributing guidelines 2021-09-19 16:39:49 -07:00
ChangeLog.md feat: Improve virtual mouse speed calculations 2026-04-01 22:49:04 -07:00
Doxyfile.in feat: Add virtual keyboard/mouse library support 2026-03-30 10:01:50 -07:00
DoxygenLayout.xml Replace all references to x52pro-linux with libx52 2021-09-29 00:30:55 -07:00
INSTALL.md build: Migrate CI to use distro containers 2026-03-26 12:23:38 -07:00
LICENSE Move license text to LICENSE file 2018-04-18 12:16:48 -07:00
Makefile.am build: Migrate to meson build 2026-03-12 10:20:01 -07:00
PRIVACY.md doc: Fix bullets in PRIVACY.md 2026-03-03 18:00:03 -08:00
README.md doc: Add badges for SonarQube and CodeCov 2026-03-16 23:22:23 -07:00
SECURITY.md doc: Add security policy and reporting guidelines 2026-03-06 15:29:31 -08:00
Version doc: Update for version 0.3.3 2026-03-12 11:34:54 -07:00
autogen.sh Move pthread build logic to configure.ac 2020-04-15 17:31:46 -07:00
config.h.meson build: Migrate to meson build 2026-03-12 10:20:01 -07:00
configure.ac feat: Update symbol visibility 2026-03-30 22:35:52 -07:00
install-doxygen-docs.sh fix: Scope the list of man pages installed 2026-03-22 15:59:35 -07:00
meson.build feat: Improve virtual mouse speed calculations 2026-04-01 22:49:04 -07:00
meson_options.txt feat: Add meson support for configuring udev rules dir 2026-03-12 14:45:08 -07:00
usb-ids.h Replace hard-coded values with #define's 2020-07-08 17:35:17 -07:00
version-info build: Migrate to meson build 2026-03-12 10:20:01 -07:00

README.md

Saitek X52Pro joystick driver for Linux

Build/Test Kernel Module CodeQL Quality Gate Status codecov

This project adds a new driver for the Saitek/MadCatz X52 Pro flight control system. The X52 pro is a HOTAS (hand on throttle and stick) with 7 axes, 39 buttons, 1 hat and 1 thumbstick and a multi-function display which is programmable.

Currently, only Windows drivers are available from Saitek PLC, which led me to develop a new Linux driver which can program the MFD and the individual LEDs on the joystick. The standard usbhid driver is capable of reading the joystick, but it cannot control the MFD or LEDs.

Most of the extra functionality can be handled from userspace. See the individual folders for README information.

For data handling and privacy (e.g. GDPR/CCPA), see PRIVACY.md.

Note: This repository currently only provides commandline interfaces to control the MFD and LEDs. If you are not comfortable working in the commandline, then the gx52 project might be a better fit for your needs as it provides a graphical interface to control the MFD and LEDs.

Installing released versions

Beginning from version v0.2.3, prebuilt packages are available on Ubuntu PPA and the Arch User Repository.

Ubuntu

This project has been released as a PPA on Ubuntu. To install the package, run the following commands in the terminal.

sudo apt-add-repository ppa:nirenjan/libx52
sudo apt update
sudo apt install libx52-1

Arch Linux

This is available on the AUR

Building and installing from source

See INSTALL.md