Everything your DualSense can do, on Linux, without the cable. OpenDS5 lets you shape your controller's adaptive triggers, haptics, audio, lighting, and buttons from one app — while your games see a wired DualSense with all its native features unlocked, even though you're playing over Bluetooth.
- Features
- Screenshots
- Why the "wired" part matters
- Supported distros
- Getting started
- How it works
- Limitations of custom trigger profiles
- Contributing game profiles
- Credits & license
- 🎮 Wireless-to-wired bridge (via vds) — play Bluetooth, look wired. Unlocks native DualSense features in games that normally demand a cable. OpenDS5 installs and manages vds for you, so this works out of the box.
- 🧪 Trigger Lab — design your own adaptive trigger effects with the full DualSense effect surface: constant resistance, weapon-style breaks, vibration, resistance ramps, and 10-zone custom curves. Live-preview everything on your controller.
- 🎯 Per-game trigger profiles — OpenDS5 detects the game you're running and applies your saved trigger effects automatically. Great for games with no native DualSense support.
- 📚 Profile library — browse and install community-made game profiles from inside the app. The library lives in its own repo (OpenDS5-Profiles), so new game profiles arrive without waiting for an app update. Import/export lets you share profiles as plain JSON files.
- 🔊 Haptics & controller audio — route sound to the controller's speaker and headphone jack, with haptic feedback support.
- 💡 Lighting — control the lightbar and player LEDs.
- 🎛️ Button remapping, personas & chords — remap buttons, save setups as switchable personas, and trigger actions with button combinations.
- 📦 Painless install — one AppImage. A first-launch setup wizard installs the kernel module and background service for you (one password prompt), with Secure Boot handled. See Supported distros.
More screenshots — audio, triggers, lighting, remapping, system
Audio ![]() |
Adaptive Triggers ![]() |
Lighting ![]() |
Button Remapping ![]() |
System ![]() |
Bridge Settings ![]() |
Many games with native DualSense support (adaptive triggers, haptics, controller audio) only enable those features when the controller is plugged in over USB. Over plain Bluetooth you get a basic gamepad and nothing else.
With vds running under OpenDS5, your controller stays wireless but games see a USB-connected DualSense. Native trigger effects, haptics, and speaker audio in supported games just work — no cable.
OpenDS5 ships a small kernel module (vds_hcd, from vds) that it installs
through DKMS — your distro's standard mechanism for out-of-tree modules.
DKMS builds the module against your running kernel and automatically rebuilds
it on every future kernel update, so it keeps working after upgrades. The
setup wizard handles all of this; the table below shows what it does on each
platform:
| Distro | How the module is installed |
|---|---|
| Fedora | dnf installs dkms + kernel-devel (or kernel-cachyos-devel on COPR kernels), then DKMS builds the module |
| Arch / CachyOS | pacman installs dkms + headers matched to your kernel flavor (linux-cachyos-headers, linux-zen-headers, …); Clang/LTO kernels build with LLVM=1 |
| Debian / Ubuntu | apt installs dkms + linux-headers-$(uname -r) |
| openSUSE | zypper installs dkms + kernel-default-devel |
| Bazzite / Silverblue | rpm-ostree install dkms kernel-devel layers the packages; one reboot, then re-run the wizard |
| NixOS | Declarative flake module — add inputs.opends5.nixosModules.default, enable services.opends5, then apply with nixos-rebuild switch |
On every DKMS platform the installer then registers the module source under
/usr/src/, builds it, and enables autoload — after that, kernel updates are
handled for you. Secure Boot is supported too: the module is signed with
DKMS's own MOK key, and if that key isn't enrolled yet the wizard walks you
through the one-reboot enrollment.
On anything else, the installer exits with a clear "unsupported" message — see docs/PORTING.md for manual steps.
- Download the latest
OpenDS5.AppImagefrom Releases and make it executable. - Run it. The setup wizard shows exactly what it will install (DKMS kernel
module,
vdsdservice, udev rules) and does it after one password prompt. - Pair your DualSense over Bluetooth and you're done.
Note
Setup disables BlueZ's input plugin so vds can own the controller's
Bluetooth HID channels — without this the system grabs the DualSense as a
plain gamepad and OpenDS5 never sees it. The trade-off (an upstream vds
limitation): other Bluetooth input devices like keyboards and mice won't
work while OpenDS5's driver stack is installed. Revert anytime with
sudo /usr/share/opends5/override-bluetoothd.sh enable-input --restart.
Prefer the terminal? ./OpenDS5.AppImage --install-system does the same
setup. See docs/INSTALLER.md for per-platform details,
exit codes, and logs.
DualSense (Bluetooth)
│
▼
vds_hcd.ko + vdsd ← presents a virtual USB DualSense to the system
│
▼
OpenDS5 app (Electron) ← triggers, haptics, audio, lighting, remapping
│
▼
Your games ← see a wired DualSense
OpenDS5 stands on the shoulders of some great projects:
- DS5Dongle by awalol pioneered the whole idea: firmware that turns a Pico 2 W into a DualSense dongle, making a wireless controller appear wired to the host. It's the foundation everything else here traces back to.
- DS5_Bridge by SundayMoments built a Windows companion GUI on top of DS5Dongle, and it's where OpenDS5 began. We ported it to Linux, swapped the Pico hardware for vds, and then kept building on that foundation — a trigger effect designer, per-game profiles, a community profile library, and a one-click installer.
- vds by hurryman2212 is the breakthrough that brought all of this to Linux. Where DS5Dongle needed a Pico plugged into the machine, vds does the same job entirely in software: a kernel module and daemon that pick up your Bluetooth DualSense and present it to the system as a genuine USB-wired one. Before vds, none of this existed on Linux — every feature in OpenDS5 flows through it, and this project simply wouldn't exist without it.
Custom profiles are powerful, but it's worth being clear about what they can and can't do:
- They react to your finger, not the game. A profile can change the trigger feel based on how far you've pulled it (e.g. vibrate on full pull), but it has no idea what's happening in-game. It can't tell whether you're out of ammo, driving on gravel, or drawing a bow — only native game support can do that.
- Don't stack them on natively supported games. If a game already drives the triggers itself, a custom profile will fight it. For those games, let the game do the work — OpenDS5's wired bridge is what makes that possible.
- State switching is inferred, not game-truth. A profile can hold several named states ("Pistol", "Shotgun", "Driving") and switch between them when you press the game's own swap buttons — but OpenDS5 only sees your inputs, never the game. If the game blocks a swap (out of ammo, cutscene), the tracked state can drift; the state chips in the app and select-style rules re-sync it in one press.
- Reactive effects need input access. Modifiers that respond to trigger
position read the controller's input device, which usually requires your
user to be in the
inputgroup. Without it, the profile's base effect still works; only the reactive parts are skipped. - Some effect modes need a current
vdsd. The newer modes (multi-feedback,slope,multi-vibration, frequency-controlledvibration) use the V2 trigger command. If they do nothing, update the daemon with./update-vdsd.sh.
Made a trigger profile you like? Export it from the app and open a PR against OpenDS5-Profiles — one game per PR, branch named after the game. CI validates profiles with the same rules the app enforces, and merged profiles appear in everyone's in-app library automatically.
OpenDS5 wouldn't exist without these projects — thank you:
- hurryman2212/vds — the virtual DualSense kernel module and daemon that make the wireless-to-wired bridge possible on Linux in the first place (MIT).
- awalol/DS5Dongle — the original Pico 2 W DualSense dongle project that DS5_Bridge, and by extension OpenDS5, is founded on.
- SundayMoments/DS5_Bridge — the Windows companion GUI for DS5Dongle that OpenDS5 was ported from and grew out of (AGPL-3.0-only).
The combined work is AGPL-3.0-only. Files under vds/ retain their
upstream MIT license. See ds5-bridge/LICENSE, ds5-bridge/NOTICE, and
vds/LICENSE.











