ruffsl

joined 3 years ago
MODERATOR OF
 

CtrlAssist v0.4.0 introduces demultiplexing functionality along with enhancements to the system tray and rumble targeting. The updated README now features FAQ and Cookbook sections with practical examples, such as the "Double Agent Tag Team" scenario, where a single assist controller uses a demux to help multiple primary players across separate mux instances, and the "Couch Co-Op Swap" scenario, in which two players take turns assisting each other using toggle mode, with force feedback following the currently active controller by default.

While controller demultiplexing was a requested feature from a prior release, I didn't have a concrete use case until I found myself helping a pair of youngsters play couch co-op multiplayer games with each other. Instead of needing separate assist controllers for each player, otherwise charging/pairing four controllers in total, being able to unicast between mux instances with a single assist controller made juggling both inputs much simpler. Then after being roped into the "It Takes Two" session myself, I found being able to swap primary and assist players outright much simpler when both helping and playing, allowing the Helpee to also aid the Helper when it really does take two.

New Features

Demux Operation Mode

CtrlAssist now supports demultiplexing (demux), allowing a single physical controller to be split into multiple virtual gamepads. This complements the existing multiplexing (mux) functionality and enables more advanced input routing scenarios.

Demux Modes:

  • Unicast (default): Routes primary controller input to the currently active virtual gamepad. Cycle between virtual gamepads using the reserved Mode button.
    • Assist multiple players across separate mux instances
  • Multicast: Broadcasts primary controller input to all virtual gamepads simultaneously.
    • Replicate controller input for advanced input multiplexing pipelines

Active Rumble Targeting

A new "Active" rumble target has been added as the default option for mux operations. This routes force feedback to whichever controllers are currently active according to the selected mode:

  • Toggle Mode: Rumble follows the currently active controller
  • Priority/Average Modes: Rumble sent to both controllers, same as before

Expanded Documentation

The README has been significantly expanded with:

  • FAQ Section: Addresses common questions about who CtrlAssist is for, why it was developed, game compatibility, supported controllers, and running multiple instances
  • Cookbook Section: Provides practical examples demonstrating complex multi-instance setups:
    • Couch Co-Op Swap: Two players alternating assistance
    • Double Agent Tag Team: One assist controller helping multiple primary players

Breaking Changes

  • The rumble target enum options now defaults to "Active" instead of "Both"
  • Configuration file format has been extended to accommodate separate mux and demux settings

Installation

CtrlAssist v0.4.0 can be installed via:

  • Cargo: cargo install ctrlassist --force
  • Flatpak: Download the bundle from the releases page and install with flatpak install
 

CtrlAssist v0.4.0 introduces demultiplexing functionality along with enhancements to the system tray and rumble targeting. The updated README now features FAQ and Cookbook sections with practical examples, such as the "Double Agent Tag Team" scenario, where a single assist controller uses a demux to help multiple primary players across separate mux instances, and the "Couch Co-Op Swap" scenario, in which two players take turns assisting each other using toggle mode, with force feedback following the currently active controller by default.

While controller demultiplexing was a requested feature from a prior release, I didn't have a concrete use case until I found myself helping a pair of youngsters play couch co-op multiplayer games with each other. Instead of needing separate assist controllers for each player, otherwise charging/pairing four controllers in total, being able to unicast between mux instances with a single assist controller made juggling both inputs much simpler. Then after being roped into the "It Takes Two" session myself, I found being able to swap primary and assist players outright much simpler when both helping and playing, allowing the Helpee to also aid the Helper when it really does take two.

New Features

Demux Operation Mode

CtrlAssist now supports demultiplexing (demux), allowing a single physical controller to be split into multiple virtual gamepads. This complements the existing multiplexing (mux) functionality and enables more advanced input routing scenarios.

Demux Modes:

  • Unicast (default): Routes primary controller input to the currently active virtual gamepad. Cycle between virtual gamepads using the reserved Mode button.
    • Assist multiple players across separate mux instances
  • Multicast: Broadcasts primary controller input to all virtual gamepads simultaneously.
    • Replicate controller input for advanced input multiplexing pipelines

Active Rumble Targeting

A new "Active" rumble target has been added as the default option for mux operations. This routes force feedback to whichever controllers are currently active according to the selected mode:

  • Toggle Mode: Rumble follows the currently active controller
  • Priority/Average Modes: Rumble sent to both controllers, same as before

Expanded Documentation

The README has been significantly expanded with:

  • FAQ Section: Addresses common questions about who CtrlAssist is for, why it was developed, game compatibility, supported controllers, and running multiple instances
  • Cookbook Section: Provides practical examples demonstrating complex multi-instance setups:
    • Couch Co-Op Swap: Two players alternating assistance
    • Double Agent Tag Team: One assist controller helping multiple primary players

Breaking Changes

  • The rumble target enum options now defaults to "Active" instead of "Both"
  • Configuration file format has been extended to accommodate separate mux and demux settings

Installation

CtrlAssist v0.4.0 can be installed via:

  • Cargo: cargo install ctrlassist --force
  • Flatpak: Download the bundle from the releases page and install with flatpak install
 

CtrlAssist v0.4.0 introduces demultiplexing functionality along with enhancements to the system tray and rumble targeting. The updated README now features FAQ and Cookbook sections with practical examples, such as the "Double Agent Tag Team" scenario, where a single assist controller uses a demux to help multiple primary players across separate mux instances, and the "Couch Co-Op Swap" scenario, in which two players take turns assisting each other using toggle mode, with force feedback following the currently active controller by default.

While controller demultiplexing was a requested feature from a prior release, I didn't have a concrete use case until I found myself helping a pair of youngsters play couch co-op multiplayer games with each other. Instead of needing separate assist controllers for each player, otherwise charging/pairing four controllers in total, being able to unicast between mux instances with a single assist controller made juggling both inputs much simpler. Then after being roped into the "It Takes Two" session myself, I found being able to swap primary and assist players outright much simpler when both helping and playing, allowing the Helpee to also aid the Helper when it really does take two.

New Features

Demux Operation Mode

CtrlAssist now supports demultiplexing (demux), allowing a single physical controller to be split into multiple virtual gamepads. This complements the existing multiplexing (mux) functionality and enables more advanced input routing scenarios.

Demux Modes:

  • Unicast (default): Routes primary controller input to the currently active virtual gamepad. Cycle between virtual gamepads using the reserved Mode button.
    • Assist multiple players across separate mux instances
  • Multicast: Broadcasts primary controller input to all virtual gamepads simultaneously.
    • Replicate controller input for advanced input multiplexing pipelines

Active Rumble Targeting

A new "Active" rumble target has been added as the default option for mux operations. This routes force feedback to whichever controllers are currently active according to the selected mode:

  • Toggle Mode: Rumble follows the currently active controller
  • Priority/Average Modes: Rumble sent to both controllers, same as before

Expanded Documentation

The README has been significantly expanded with:

  • FAQ Section: Addresses common questions about who CtrlAssist is for, why it was developed, game compatibility, supported controllers, and running multiple instances
  • Cookbook Section: Provides practical examples demonstrating complex multi-instance setups:
    • Couch Co-Op Swap: Two players alternating assistance
    • Double Agent Tag Team: One assist controller helping multiple primary players

Breaking Changes

  • The rumble target enum options now defaults to "Active" instead of "Both"
  • Configuration file format has been extended to accommodate separate mux and demux settings

Installation

CtrlAssist v0.4.0 can be installed via:

  • Cargo: cargo install ctrlassist --force
  • Flatpak: Download the bundle from the releases page and install with flatpak install
 

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
 

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
 

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
[โ€“] ruffsl@programming.dev 1 points 7 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 7 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 7 months ago* (last edited 7 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 0 points 7 months ago (1 children)

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

[โ€“] ruffsl@programming.dev 1 points 7 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?

[โ€“] ruffsl@programming.dev 2 points 7 months ago* (last edited 7 months ago)

Compiling the Linux kernel from scratch takes over an hour on this laptop. Given I'm tracking the unstable channel on a rolling distro means doing that several times a week. Ain't nobody got time for that. Or at least I don't...

[โ€“] ruffsl@programming.dev 2 points 7 months ago (2 children)

I don't have resources to locally build an optimized kennel for every update for each of my systems, thus my interests in keeping with a community cache.

I didn't do much here, just swapped the kernel via config and ran some benchmarks. I posted as I was more curious to hear of what engineering trade offs may be at play, and what experience folks have had in daily driving CatchyOS's kernel patch sets.

[โ€“] ruffsl@programming.dev 2 points 7 months ago (4 children)

I wasn't sure if these results were specific to my older hardware, or more generalizable to newer systems.

[โ€“] ruffsl@programming.dev 3 points 8 months ago

Indeed perhaps. I'd really like to see something like a Content-addressed Storage model from snix get upstreamed. That could really revolutionize bandwidth requirements for nix package updates and store sizes. Imagine downloading only the binary diffs for updates to packages like large modern browsers, IDEs, election apps, etcs, that mostly share common files across versions and packages. Suddenly, daily driving a rolling distro on the bleeding edge would be no more taxing on networks or disks than your average infrequent Debian update.

[โ€“] ruffsl@programming.dev 1 points 8 months ago

I haven't gotten around to testing this yet, but I think they just share the Android app proot scaffolding. I wasn't too satisfied with the proot performance on Android in general using Termux, as with interpreted runtimes like python, the system call overhead really shows itself. That of course doesn't change here with nix-on-droid.

[โ€“] ruffsl@programming.dev 1 points 8 months ago

Sounds like their target customers are commercial service providers and industrial device manufacturers using NixOS, but need to support stable deployments for longer than NixOS's current 6 month release cycle. Probably not to applicable for individual desktop users, but they still plan on hosting a public channel and cache for newer releases.

[โ€“] ruffsl@programming.dev 0 points 8 months ago

@Ategon@programming.dev , this project's logo reminds me of your fun community icon artwork here.

view more: โ€น prev next โ€บ