v0.6.0.4 — working gyroscope (DS4 + Steam Controller 2), DS4 Bluetooth, NixOS package
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
0x45report instead of failing silently.
NixOS
- New:
package.nixfor 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.sha256checksums. - 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.)