Announcing the release of CtrlAssist v0.3.0, which introduces significant new features and usability improvements. 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.
Major Features
System Tray Interface
This release introduces a graphical system tray application that provides desktop integration for managing controller multiplexing. Users can now:
- Configure primary and assist controller assignments via dropdown menus
- Start and stop the mux without using the command line
- Adjust settings through a context menu interface
- Receive desktop notifications for status changes
- Persist configuration across sessions
The tray interface supports live reconfiguration of device-invariant settings (mux mode and rumble target) while the mux is running.
Multiple Hiding Strategies
Controller hiding now supports three distinct strategies:
- None: No hiding, manual configuration required
- Steam: Automatically manages Steam’s controller blacklist via config.vdf modification
- System: Restricts device permissions system-wide (requires root access)
The Steam hiding strategy enables proper functionality in sandboxed environments without requiring elevated privileges, addressing a key limitation for Flatpak users.
Live Runtime Updates
The mux runtime now supports dynamic reconfiguration without restart for:
- Mux mode changes (Priority, Average, Toggle)
- Rumble target adjustments (Primary, Assist, Both, None)
This functionality is available through both the system tray and programmatic (D-BUS) interfaces, allowing users to adapt behavior during gameplay sessions.
Flatpak Distribution
CtrlAssist is now packaged as a Flatpak application with:
- Automated GitHub Actions workflow for release builds
- Desktop entry and metainfo for application catalogs
- Proper sandbox permissions for device access
- Support for Steam configuration modifications within the sandbox
Flatpak bundles are automatically built and attached to GitHub releases.
Additional Improvements
- Configuration persistence to
$XDG_CONFIG_HOME/ctrlassist/config.toml - Controller selection by name with best-effort matching across sessions
- Enhanced documentation with installation instructions for both Cargo and Flatpak
- New pixel art banner and application icon (via Aseprite)
- Improved force feedback device recovery after disconnection
- Better error handling and user feedback throughout the application
Installation
CtrlAssist v0.3.0 can be installed via:
- Cargo:
cargo install ctrlassist --force - Flatpak: Download the bundle from the releases page and install with
flatpak install
Full installation instructions are available in the README.
Breaking Changes
The --hide flag now requires an enum value (none, steam, system) instead of being a boolean flag. Users upgrading from v0.2.x should update their scripts accordingly:
- Previous:
ctrlassist mux --hide - Current:
ctrlassist mux --hide system
This intrigued me so I grabbed it but I still dont quite know what I grabbed.
Is the whole point of this to be able to combine 2 controllers into 1 controller? Some of this feels niche, and like the people who need it will REALLY want it, but for most people, it does nothing beneficial, or am I missing something here that I should keep an eye on.
It’ll be helpful for people with HOTAS systems where the joystick and throttle are separate playing games that only support one joystick. I ran into that problem with Freespace 2 a few years ago but I think proper multi-stick support has been added since then.
Admittedly, it’s pretty niche software. But for those who grew up using equivalents on gaming consoles such as Xbox or PlayStation, it was (still is) a pivotal accessibility feature.
And it’s not necessarily only for those with physical disabilities or reflexive motor skill issues. Sometimes you’d like to introduce a really good story based game to a novice player that you know just doesn’t have (yet or never) the coordination or muscle memory to complete it.
My grandparents never grew up playing videogames, and some of my nieces and nephews in the family are too young to grasp complex game mechanics. However, all of them really enjoyed playing with a control assist, where they could take the initiative in gameplay, like choosing dialogue options, steering saddled horses, flying broomsticks, exploring the world at their discretion, and I could just coast along in the backseat, fixing their camera angles, steering them back on course when lost, rescuing them in high stake combat encounters, etc.
In some ways, you could think about it as co-oping for single player games, but because it’s per controller, you can do the same thing for multiplayer games as well. Like to help level the age gap in PvP games with your older sister versus your younger brother.
Before we ever played with control assist, I tried the classic method of tossing around the one controller like a hot potato, but it’s just not the same in a number of ways. For one, having to relinquish a single controller really breaks immersion, as your suddenly fumbling about between living room chairs only your game characters on death’s door from an unexpected boss encounter. It also deprives them of that haptics, where they can learn more easily attack patterns or UX interaction that conventionally telegraph via force feedback.
There is perhaps some functionality for solo players as well, such as splitting hand control across multiple gamepads. Like if your hands/arms were of different sizes, or you wanted to play other than with the controller on your lap, you could just easily dual wield controllers mux together the left and right sides-in-reach, or mux a regular handheld gamepad with something more like a Xbox Adaptive Controller for when dexterity or convenience demands.
Although, I think the majority of folks will find the assist co-op scenario for single player games the most appealing aspect. As others have replied on prior release posts, like parents helping their kids through their first playthrough ever, it’s really an underrated feature for game consoles, and bringing that to gaming on Linux was really appreciated.
That’s really cool! It does sound like something I don’t particularly have a use for, but I see the appeal for others.
And giving it a test drive with flatpak is pretty simple, so no downsides for me there.
Keep up the great work.


