1212# ✨ Features
1313
1414- 🎮 Combine physical controllers into one virtual gamepad
15- - Controllers are assigned as either Primary or Assist
15+ - Assign controllers as either Primary or Assist
1616- 🎛️ Customizable multiplexing modes for buttons and axes
1717 - Logically merging or preempting events is flexible
1818- 🙈 Hide physical controllers for improved game compatibility
4949 - Ideal when fine-grain conflict-free control is needed
5050 - E.g. Game menu navigation or precise interventions
5151
52+ [ Screencast_20251230_070245.webm] ( https://github.com/user-attachments/assets/40f72091-cfeb-461b-a4fb-5b4198604e9d )
53+
5254# ⬇️ Install
5355
5456The following installation methods are available:
@@ -64,22 +66,22 @@ The following installation methods are available:
6466
6567## 🦀 Cargo
6668
67- - Build dependencies
69+ - Build dependencies:
6870 - [ libudev-dev] ( https://pkgs.org/search/?q=libudev-dev )
6971 - [ pkg-config] ( https://pkgs.org/search/?q=pkg-config )
70- - Rust toolchain
72+ - Rust toolchain:
7173 - https://rust-lang.org/tools/install/
7274 - configure ` PATH ` per Notes linked above
7375
74- Add the ` --force ` flag to upgrade to latest version:
76+ Install or upgrade to the latest version:
7577
7678``` sh
77- cargo install ctrlassist
79+ cargo install ctrlassist --force
7880```
7981
8082## 📦 Flatpak
8183
82- - Runtime dependencies
84+ - Runtime dependency:
8385 - [ Flatpak] ( https://flatpak.org/setup/ ) (likely already installed)
8486
8587Download latest bundle from [ releases page] ( https://github.com/ruffsl/ctrlassist/releases ) and install:
@@ -96,7 +98,7 @@ Run and test via Flatpak using the application ID:
9698flatpak run io.github.ruffsl.ctrlassist --help
9799```
98100
99- Or launch as system tray via installed desktop icon.
101+ Or launch the system tray via the installed desktop icon.
100102
101103# 📖 Usage
102104
@@ -138,7 +140,7 @@ The system tray provides:
138140- ** Desktop notifications** for status changes
139141- ** Persistent settings** saved to disk on use
140142
141- Options are greyed out while the mux is running but show current active selections .
143+ Device invariant options can be altered while the mux is running; all other options are disabled (greyed out) until the mux is stopped .
142144
143145## 🧾 list
144146
@@ -179,7 +181,6 @@ Manually specify mode for merging controllers:
179181
180182``` sh
181183$ ctrlassist mux --mode priority
182- ...
183184```
184185
185186### 🕹️ Spoof Virtual Device
@@ -198,7 +199,7 @@ Virtual: (2) Microsoft X-Box One pad (Firmware 2015)
198199
199200### 🫨 Rumble Pass-Through
200201
201- Target force feedback to either or both physical controllers:
202+ Target force feedback to either, none, or both physical controllers:
202203
203204``` sh
204205$ ctrlassist mux --rumble both
@@ -207,22 +208,21 @@ $ ctrlassist mux --rumble both
207208
208209### 🙈 Hide Physical Devices
209210
210- There are multiple hiding strategies to avoid input conflicts:
211+ Multiple hiding strategies are available to avoid input conflicts:
211212
212213| Strategy | Access/Compatibility | Granularity | Restart Required |
213214| ------------| -----------------------------| ---------------------| --------------------|
214215| ** Steam** | No root, Flatpak compatible | Vendor/Product ID | Steam only |
215216| ** System** | Root required, no Flatpak | Per-device | Game/Launcher |
216217
217- For example, use ** Steam** when running CtrlAssist via Flatpak. For 2v1 scenarios, where the third player not using CtrlAssist shares the same controller make and model, use ** System** to avoid hiding the third player's gamepad.
218+ Use ** Steam** hiding when running CtrlAssist via Flatpak. For 2v1 scenarios, where a third player not using CtrlAssist shares the same controller make and model, use ** System** to avoid hiding the third player's gamepad.
218219
219220#### Steam Input
220221
221222Automatically configure Steam's controller blacklist:
222223
223224``` sh
224- $ ctrlassist mux --hide steam
225- ...
225+ ctrlassist mux --hide steam
226226```
227227
228228> [ !NOTE]
@@ -236,8 +236,7 @@ $ ctrlassist mux --hide steam
236236Restrict device tree permissions system-wide:
237237
238238``` sh
239- $ sudo ctrlassist mux --hide system
240- ...
239+ sudo ctrlassist mux --hide system
241240```
242241
243242> [ !NOTE]
@@ -266,15 +265,15 @@ Settings are loaded on startup and saved when using the mux. Controllers are mat
266265
267266# ⚠️ Limitations
268267
269- - System hiding requires root access
270- - temporarily modifies group permissions for selected devices
268+ - System hiding requires root access (not available in Flatpak)
269+ - Temporarily modifies group permissions for selected devices
271270- Hiding must be done before starting games or launchers
272- - processes with open file handles may retain device access
271+ - Processes with open file handles may retain device access
273272- Reconnecting a hidden controller may revert its visibility
274273 - Steam hiding persists across reconnects while CtrlAssist is running
275274 - System hiding: custom udev rules needed for persistent permissions
276275- Steam hiding affects all controllers of the same make and model
277- - blacklists by vendor/product ID, not individual devices
276+ - Blacklists by vendor/product ID, not individual devices
278277- Steam hiding requires Steam restart
279278 - Steam only checks controller_blacklist config on startup
280279- Toggle mode requires pressing all buttons and axes after startup
0 commit comments