Excited to announce release v0.2.0 for CtrlAssist, adding rumble pass-through support and significant improvements to controller multiplexing! CtrlAssist brings "controller assist" functionality to Linux gaming by allowing multiple physical controllers to operate as a single virtual input device. This enables collaborative play and customizable gamepad setups, making it easier for players of all ages and abilities to enjoy games together.
🎯 What's New
Rumble Pass-Through
Force feedback can now be forwarded to paired physical controllers! Configure which controller(s) receive rumble effects—route them to Primary, Assist, both, or neither. Share every haptic encounter from turbulence, engine failure, and hard landings with your co-pilot. Even better: if a controller disconnects mid-game (swapping batteries, USB cords, etc.), CtrlAssist automatically recovers and restores all force feedback effects when it reconnects.
Smoother Input Transitions
All assist modes now feature improved synchronization for more natural gameplay:
- Joysticks snap cleanly: When assistance begins or ends, both X and Y axes update together—no more jarring diagonal-to-cardinal transitions
- Toggle mode syncs instantly: Switching between Primary and Assist now mirrors the active controller's complete current state, eliminating phantom inputs from buttons or sticks that were held during the switch
Better Device Discovery
Controllers device trees are now discovered more reliably, preventing edge cases where multiple similar devices could cause conflicts. This also improves device hiding and rumble pass-through selection.
🛠️ Under the Hood
- Refactored input handling for consistency across all three modes
- Fixed button mapping quirks across physical and virtual device boundaries
- Improved error handling and logging for edge cases and issue reporting
- More graceful shutdown on Ctrl+C with robust cleanup
📦 Install and Upgrade
cargo install ctrlassist --force
Full changelog available at the GitHub release page.
Note: If you have experience with Arch or modding SteamOS, I could use also some help in fixing/documenting SteamDeck support, as I've not the hardware on hand and most of my Linux development has been on NixOS and Ubuntu thus far:
Indeed, I've encountered a few games on Steam that gracefully switch multiple controllers, but only by giving exclusive input on a first come-first-serve bases (i.e. which ever controller moves first after some cool down of inactivity from both). Hollow Knight: Silksong being one such example, as I couldn't necessarily drive separate axis from different controllers simultaneously, thus one such motivation for passing the game only one virtual controller and optionally hiding the rest to avoid input conflicts.
I'd be happy if Steam were to adopt such an accessibility feature into Steam input directly, much like Xbox and PlayStation. Perhaps they'll take more of an interest in multi controller configurations with the upcoming refresh of the Steam Controller, given the wireless dongle is meant for multi device pairing.