ruffsl

joined 2 years ago
MODERATOR OF
 

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:

 

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:

 

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:

[–] ruffsl@programming.dev 7 points 6 days ago

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.

 

CtrlAssist – an open source project to bring more accessible, collaborative gaming to Linux! Inspired by PC gaming sessions with my own family, where both young and old relish exploring rich stories with immersive worlds (like Witcher 3, RDR3, Hogwarts Legacy, etc) but find coordinated combat or movement control too challenging to play solo, CtrlAssist lets you combine multiple controllers into one virtual gamepad, much like assist features on dedicated game consoles.

Whether your helping grandparents through tough boss fights, or co-oping with nieces and nephews to level age gaps, CtrlAssist aims to make PC gaming on Linux fun and accessible for everyone. While I’m certain similar utilities exist, I also just wanted a holiday hobby project to practice Rust development while scratching a personal itch.

Please give it a try, share your feedback in the relevant discussion categories, or check out the open issues if you’d like to contribute, help is always welcome!

#RustLang #LinuxGaming #Accessibility #OpenSource #CtrlAssist

 

CtrlAssist – an open source project to bring more accessible, collaborative gaming to Linux! Inspired by PC gaming sessions with my own family, where both young and old relish exploring rich stories with immersive worlds (like Witcher 3, RDR3, Hogwarts Legacy, etc) but find coordinated combat or movement control too challenging to play solo, CtrlAssist lets you combine multiple controllers into one virtual gamepad, much like assist features on dedicated game consoles.

Whether your helping grandparents through tough boss fights, or co-oping with nieces and nephews to level age gaps, CtrlAssist aims to make PC gaming on Linux fun and accessible for everyone. While I’m certain similar utilities exist, I also just wanted a holiday hobby project to practice Rust development while scratching a personal itch.

Please give it a try, share your feedback in the relevant discussion categories, or check out the open issues if you’d like to contribute, help is always welcome!

#RustLang #LinuxGaming #Accessibility #OpenSource #CtrlAssist

 

CtrlAssist – an open source project to bring more accessible, collaborative gaming to Linux! Inspired by PC gaming sessions with my own family, where both young and old relish exploring rich stories with immersive worlds (like Witcher 3, RDR3, Hogwarts Legacy, etc) but find coordinated combat or movement control too challenging to play solo, CtrlAssist lets you combine multiple controllers into one virtual gamepad, much like assist features on dedicated game consoles.

Whether your helping grandparents through tough boss fights, or co-oping with nieces and nephews to level age gaps, CtrlAssist aims to make PC gaming on Linux fun and accessible for everyone. While I’m certain similar utilities exist, I also just wanted a holiday hobby project to practice Rust development while scratching a personal itch.

Please give it a try, share your feedback in the relevant discussion categories, or check out the open issues if you’d like to contribute, help is always welcome!

#RustLang #LinuxGaming #Accessibility #OpenSource #CtrlAssist

 

CtrlAssist – an open source project to bring more accessible, collaborative gaming to Linux! Inspired by PC gaming sessions with my own family, where both young and old relish exploring rich stories with immersive worlds (like Witcher 3, RDR3, Hogwarts Legacy, etc) but find coordinated combat or movement control too challenging to play solo, CtrlAssist lets you combine multiple controllers into one virtual gamepad, much like assist features on dedicated game consoles.

Whether your helping grandparents through tough boss fights, or co-oping with nieces and nephews to level age gaps, CtrlAssist aims to make PC gaming on Linux fun and accessible for everyone. While I’m certain similar utilities exist, I also just wanted a holiday hobby project to practice Rust development while scratching a personal itch.

Please give it a try, share your feedback in the relevant discussion categories, or check out the open issues if you’d like to contribute, help is always welcome!

#RustLang #LinuxGaming #Accessibility #OpenSource #CtrlAssist

 

Related HN thread discussing NixOS:

[–] ruffsl@programming.dev 1 points 2 weeks ago

Not sure if something like that would even support x86 or C99, so would probably still need an older mainframe and early GCC source tree. Could probably get by with a virtual emulator for the former.

 

Related discussion thread:

[–] ruffsl@programming.dev 1 points 1 month ago

Would be good to cross post this to:
https://programming.dev/c/nix

[–] ruffsl@programming.dev 2 points 1 month ago (2 children)

I could imagine bootstrapping via Bell Labs Unix from the 90's would be more authentic, yet demanding LFS experience. I wonder how far back computer historians could bootstrap up to a modern compiler for integrity and verification purposes?

https://www.owlfolio.org/research/bootstrapping-trust-in-compilers/

https://www.theregister.com/2025/11/07/unix_fourth_edition_tape_rediscovered/

[–] ruffsl@programming.dev 2 points 1 month ago* (last edited 1 month ago)

I've observed some notable improvements when benchmarking with the CachyOS kernel on NixOS via Chaotic’s Nyx using moderately old hardware:

https://programming.dev/post/38304031

Haven't yet tried replicating the same comparison on newer hardware, but would be interested to see what others have tested. Any observations?

 

cross-posted from: https://lemmy.ml/post/38988050

4
submitted 1 month ago* (last edited 1 month ago) by ruffsl@programming.dev to c/linux@programming.dev
[–] ruffsl@programming.dev 2 points 1 month ago

You should be able to rebuild offline if the minimal change set is self contained enough, as in purely local. Did you update any other inputs? I guess you could be missing some kind of extra TLS or CA store dependency for adding custom CAs, but that doesn't seem likely for regular NixOS install. I use flakes instead of channels, so I wouldn't know what else may be blocked you. A stdout log may showcase your error more clearly.

[–] ruffsl@programming.dev 2 points 1 month ago (1 children)

I think you may need a successful switch to actually apply the addition of the proxy CA to your root CA store before attempting any other changes that could require reaching out across the network. At least that was the order of operations I had to follow to remove an offline remote cache before attempting any package updates.

[–] ruffsl@programming.dev 1 points 2 months ago

I'm in search for the same white whale. There's quite a bit of documentation for multi-seat configurations for Linux, i.e. supporting the use of multiple screens and keyboards for separate simultaneous logins.

However I'd like to remote into a separate game scope session with its own human interface inputs and virtual audio and video outputs, as the same primary user normally logged in active desktop environment session. I'd like it so the remote and local sessions would not interfere with each other state, but without necessitating multiple Linux users for each session use case.

That last bit is what makes it more tricky and very niche. Supporting essentially multiple desktop environments probably demands separate user debus sockets. Using c groups via containers makes that viable, but like you, I also like to avoid containers and extensive volume mounts.

[–] ruffsl@programming.dev 5 points 2 months ago

I top linked the most recently published video mostly for the introductory breakdown in ternary logic equivalence, but the interview with the ternary researcher, Dr Bos, also linked in the description above includes a number of corrections and accurate description of the subject.

Yeah, definitely not a lost art or anything, as physical ternary signals already have applications in communication like high data rate interfaces. Still, would be interesting to see ternary expand into logic domains with emerging developments in TCMOS research.

[–] ruffsl@programming.dev 3 points 2 months ago* (last edited 2 months ago) (1 children)

This is discussed around the 27 min mark of the video with Dr. Steven Bos, particularly in maintaining voltage thresholds for signal propagation when using multiple devices, in context of logic, memory, and communication use cases. Interestingly, for example, GDDR7 and USB 4.2 already use physical ternary signals.

Edit: signal to noise ratio is also discussed at the 40min mark, also with respect to increasing information density vs complexity from higher symbol bandwidth, or terms of radix vs frequency.

[–] ruffsl@programming.dev 9 points 2 months ago (1 children)

Thank you for all the work that goes into maintaining this instance!

[–] ruffsl@programming.dev 1 points 2 months ago

Appreciate the heads up. Looks like they use merge bots to auto update the package version JSON files for git packages, making for a very large/frequent commit history. Was that what made bisecting imposable?

I also see they pin the nixpkgs input, but do others normally modify that nixpkgs input to follow their global nixpkgs from their own system flake, or does that invalidate the use of Nyx community cache?

view more: next ›