Use a Flydigi Vader 3 Pro with Steam Input on Linux. This experimental daemon
translates each Bluetooth DInput controller into a virtual DualSense Edge using
Linux UHID and hid-playstation. USB and the 2.4 GHz dongle are not supported.
- Sticks, analog triggers, D-pad and standard buttons.
- Automatic discovery of eligible Bluetooth controllers, including controllers connected after startup. Each gets an independent virtual pad.
- Six independent extra buttons: C, Z and M1–M4.
- FN opens Steam's Quick Access Menu (the sidebar containing Decky) using an ordered Guide + A pulse.
- Rumble feedback forwarded over Bluetooth.
- Experimental Steam lightbar colors forwarded over Bluetooth. I observed the physical LEDs follow Steam color changes on my Legion Go.
- Experimental two-axis gyro input for pitch and yaw, disabled by default.
- Removal of a disconnected controller's virtual pad and recreation with the same identity on reconnect. Physical reconnect behavior remains unverified.
Gyro Z (roll) does not work. The third gyro component is not implemented. Pitch and yaw are uncalibrated, and the virtual acceleration values are fabricated. The current pitch correction and physical multi-controller behavior have not been hardware-tested.
The physical controller can still appear in Steam. To hide it, follow the optional Steam visibility guide. The daemon does not edit Steam settings, install kernel modules, or unbind drivers.
On x86-64 Linux, including Bazzite, install the latest published release as your normal user:
curl -fsSL https://raw.githubusercontent.com/Ownistic/vader3-pro-linux-driver/main/install.sh | shThe installer checks the SHA-256 checksum and installs the binary at
~/.local/bin/vader3p-steam. The checksum detects corruption; it is not an
independent signature. Review scripts before piping them to a shell. The command
requires curl, GNU coreutils, a published release and the D-Bus runtime library.
See the compatibility requirements.
It does not grant device access, pair controllers, change configuration, install
packages, or start or enable a service.
The installer will not replace an existing executable unless you pass
--replace. First, read the migration guide, stop
the verified old service, and back up the executable:
curl -fsSL https://raw.githubusercontent.com/Ownistic/vader3-pro-linux-driver/main/install.sh | sh -s -- --replaceThe installer uses the latest non-prerelease GitHub release. Continue with device access and configuration.
Prerequisites:
- Rust and
cargo; see the compatibility requirements pkg-config, BlueZ and D-Bus development headers (libdbus-1-devon Debian/Ubuntu ordbus-develon Fedora)- Linux kernel support for
/dev/uhidandhid-playstation
Before replacing an existing installation, follow the migration guide.
Build and install from the repository root:
cargo build --manifest-path driver/Cargo.toml --release --locked
install -Dm755 driver/target/release/vader3p-steam ~/.local/bin/vader3p-steamRun the daemon as your normal user. It needs read/write access to /dev/uhid,
read access to each physical controller's hidraw node, and evdev access for
optional event grabs. /dev/uhid permits creation of virtual HID devices; grant
access only to trusted users. See the device access guide
for Bazzite, other distributions, and permission checks after reconnecting.
Pair and connect controllers in Bluetooth DInput mode through your operating system. The daemon waits for eligible controllers and detects later connections; it does not pair them.
No Bluetooth address is required. Leave bluetooth_address unset to use all
eligible controllers, or set it to a full address to select one. The filter is
validated even when rumble and motion are disabled.
Without --config, the daemon reads ~/.config/vader3p-steam/config.toml (or
the path under $XDG_CONFIG_HOME). If the conventional file is absent, it uses
defaults. An explicit --config PATH must exist and be valid; the daemon does
not fall back to defaults if it is missing, unreadable or malformed.
To change settings, create ~/.config/vader3p-steam/config.toml:
mkdir -p ~/.config/vader3p-steamAdd the settings you need, for example:
# Optional: restrict operation to one controller.
# bluetooth_address = "AA:BB:CC:DD:EE:FF"
rumble = true
led = true
[motion]
enabled = falseSet enabled = true to try experimental pitch/yaw input. For all options, see
the configuration reference.
Set led = false to disable host color forwarding. A host color can replace the
controller's configured lighting effect. The daemon cannot restore that effect
on exit. A full power cycle restored the original button-pulse effect on my
controller; other firmware might behave differently.
Motion warning: The daemon does not restore the controller's motion selector on exit. If ordinary input stops after disabling motion, fully power-cycle and reconnect the controller. Restarting Steam alone does not reset the selector.
Start the daemon in the foreground and stop it with Ctrl+C:
~/.local/bin/vader3p-steamThe daemon needs a valid private per-user runtime directory: $XDG_RUNTIME_DIR,
or /run/user/<uid> when unset. Test the foreground run before setting up the
optional user service.
- Architecture and configuration reference
- Bluetooth protocol reference
- Testing guide
- Migration from the former uinput setup
- Manual Steam visibility setting
This software sends Bluetooth commands for rumble, color and experimental motion. Use it at your own risk: unexpected behavior, loss of functionality, or other damage may occur. See the motion warning.
The software is provided as is, without warranties. To the extent permitted by applicable law, the authors and contributors are not liable for damages arising from its use. See the license terms for the full disclaimer and limitations of liability.
Dual-licensed under MIT or Apache-2.0. Proprietary firmware and applications used for research are not included. This project is not affiliated with Flydigi or Valve.