v0.6.0.6 — DualSense (PS5) gyroscope, gyro trigger/sensitivity fixes, OSD over fullscreen games
Bug-fix release on top of v0.6.0.5. The DualSense (PS5) gyroscope now works — it never had, on any release — and a round of gyro fixes came out of a detailed user report against the Steam Controller 2 (thank you for the reports!). The OSD also finally draws over fullscreen games on Wayland.
Changes
DualSense / PS5 (all new)
- The gyroscope works. It was reading the wrong quantity entirely: the driver stored raw quaternion components where the mapper expected euler angles, so the pitch-bound axis sat pegged at full deflection, the yaw-bound axis followed your pitch, and real yaw did nothing at all. Absolute (tilt) gyro, lean-to-turn and every tilt binding were affected. Now converted in the driver, putting the DualSense on the same hardware-verified gyro path as the Steam Controller v1/v2 and DS4.
- Gyro drift is gone. The DualSense reports a small zero-rate offset on each axis even sitting untouched on a table — measured here at about 1.5 °/s, enough to walk an absolute gyro across its whole range in half a minute. It is now measured whenever the controller is at rest and subtracted.
- Turning the controller off no longer kills sc-controller. The DualSense has no "powering off" signal — a long press on the PS button just drops the link — and the resulting read error crashed the whole daemon, taking every other connected controller down with it and sometimes leaving a stuck OSD menu on screen. It now disconnects cleanly.
Gyroscope (all controllers)
- Gyro bound to a trigger is usable. It was being fed stick-range values and clamped into the trigger's 0–255 range, so about 0.7° of rotation pinned the trigger at maximum — it behaved like a button — and rotating the other way did nothing at all, because the whole negative half was silently discarded. Now scaled to the trigger's own range, resting at "released".
- Gyro sensitivity was being squared.
⚠️ Behaviour change: a per-axis sensitivity was applied twice (and one of the two came from the wrong axis), so a setting of2.0actually behaved as4.0. If you tuned a value by feel on an earlier release, square it to match — a working2.0becomes4.0. Sensitivity also now moves the point at which the axis reaches full deflection, instead of scaling an already-saturated reading. - Gyro gated behind an analog trigger works. A mode-shift condition like "right trigger ≥ 70%" had no hysteresis, so a trigger held near that threshold flickered across it many times a second. Each flicker re-centered the gyro, which left absolute gyro → stick and lean-to-turn → mouse looking completely dead while other bindings worked. The threshold now has a 5% band.
OSD
- The OSD draws over fullscreen games on Wayland. Menus and the circular menu were being hidden behind the game — which is most of the point of an OSD. They now sit on the compositor's overlay layer. (Verified on KDE Plasma;
SCC_OSD_LAYER=TOPoverrides it if a compositor prefers that.) Also fixes OSD positioning measuring positive Y from the wrong screen edge.
Known limitations
- DualSense pitch beyond about 75° couples into yaw and roll (gimbal lock). This is inherent to the euler-angle representation every controller here shares, and sits far outside the range gyro aiming uses.
- DualSense yaw still drifts slowly during sustained motion. The zero-rate correction removes the constant part, and the angle re-zeros whenever the controller rests or the gyro re-engages. Accelerometer fusion — which would pin pitch and roll absolutely — is planned for a later release.
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.)