Skip to content

v0.6.0.4 — working gyroscope (DS4 + Steam Controller 2), DS4 Bluetooth, NixOS package

Choose a tag to compare

@Patola Patola released this 11 Jul 06:46
· 92 commits to main since this release

Feature and bug-fix release on top of v0.6.0.3, focused on gyroscope support — the DualShock 4 and the Steam Controller 2 now have fully working, hardware-verified gyro aiming — plus a NixOS package contributed by the community.

Changes

Gyroscope (DualShock 4 + Steam Controller 2)

  • Absolute (tilt) gyro works. Map pitch/yaw/roll to gamepad axes and the stick deflection follows the controller's actual orientation — hold a tilt and it holds the deflection. On the DS4 this is host-side sensor fusion (gyro integration with accelerometer drift-correction, calibrated on real hardware: a held tilt stays pinned, no drift); on the SC2 it uses the controller's own firmware-fused orientation.
  • Gyro→mouse got intuitive, Steam-like semantics. With Absolute checked you get a laser pointer — the cursor tracks the controller's rotation and stops when you stop. Unchecked gives lean-to-turn — cursor speed proportional to how far you hold the tilt. Previously one mode did nothing and the other scrolled forever.
  • The Tilt tab actually works. It used to fire continuously with the pad at rest on euler-gyro controllers; now all six directions (nose up/down, tilt left/right, rotate left/right) trigger correctly past ~45°, verified on hardware.
  • Steam Controller 2: the IMU protocol was reverse-engineered wrong and is now fixed. The orientation quaternion and the angular rates were mis-split in the report layout, which scrambled or deadened every gyro mode. Layout, axes and signs are now pinned down from held-pose captures (unit-quaternion norm checks) and documented in docs/steam-controller-v2-protocol.md.
  • Fixed a family of bugs that made gyro→mouse bindings label wrong ("Mouse" vs "Mouse X"), route to the joystick instead of the cursor, or not highlight in the axis-selector dialog.
  • A gyro binding released from a mode-shift no longer leaves the axis stuck (runaway cursor).

DualShock 4

  • Bluetooth support via a new hidraw driver — full report parsing, so touchpad and gyro work wirelessly too.
  • Touchpad coordinates are scaled correctly (no more jitter/jumpiness), the touchpad highlights in Input Test, and right stick / triggers / touchpad no longer die after a mapper crash.

Steam Controller 2

  • Hovering Left/Right Trigger in the GUI now brightens the actual trigger (it used to light up a region beside the shoulder buttons).
  • The daemon warns explicitly if a future firmware switches the motion stream to the quaternion-less 0x45 report instead of failing silently.

NixOS

  • New: package.nix for NixOS users (works with rootless nix-user-chroot too, and includes testing capabilities) — attached below and shipped in the repo. Contributed by @ThomasEricB in #1 — thank you! The attached file pins this release (v0.6.0.4, updated in #2).

Packaging / infrastructure

  • Python ≥ 3.11 is now required for source installs (3.10 is EOL soon). The AppImages keep working regardless of the bundled Python.
  • CI builds AppImages for four distro bases again (jammy, noble, bookworm, trixie) for compatibility coverage; releases ship the most-compatible jammy pair, now with .zsync (delta updates) and .sha256 checksums.
  • Two fixes were split out and sent upstream: the AppImage tray/librsvg minimal-host fix (C0rn3j/sc-controller#101, merged) and the empty-enum crash on Python ≤ 3.10 with the 3.11 floor (C0rn3j/sc-controller#102).

Which AppImage do I download?

  • …-x86_64.AppImage → a normal PC (Intel/AMD desktop or laptop, and the Steam Deck). If you're not sure, this is the one you want.
  • …-aarch64.AppImage → ARM devices only (Raspberry Pi, ARM boards, etc.). It will not run on a normal PC.

There's a single build, made on Ubuntu 22.04 (jammy); it runs on Ubuntu 22.04+, Debian 12+, Arch, Fedora and anything newer.

⚠️ AppImage users: install the udev rules first

The AppImage cannot install the udev rules it needs, so a detected controller will appear to do nothing (no device access, and the virtual gamepad at /dev/uinput can't be created) until you install them. This is needed only for the AppImage — the Arch and other distro packages already include these rules.

Steam Deck (SteamOS): you can skip all of this — SteamOS already ships udev rules for Steam devices, so the AppImage works out of the box.

Download the attached 69-sc-controller.rules, then:

sudo cp 69-sc-controller.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger

(Log out and back in — or replug the controller — afterwards.)