Skip to content
ProfessorTeePublic

About

DualSense über Bluetooth wie per Kabel unter Linux: adaptive Trigger, HD-Haptik, Lautsprecher (USB/IP-Brücke + Tray-Tool)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

DS5Tee

English · Deutsch

DualSense over Bluetooth – to games it looks like a wired controller. On Linux, adaptive triggers, HD haptics and the controller speaker normally only work over a USB cable. DS5Tee makes them work wirelessly without any extra hardware: it is a software version of the Pico dongles DS5Dongle and DS5_Bridge.

Tested with Stellar Blade (GE-Proton 11): triggers, haptics and speaker work over Bluetooth, also with several controllers at once.

How it works

Games only enable the DualSense extras for a wired controller and find its audio device (speaker + haptics) through the shared USB device. A virtual HID controller alone is therefore not enough.

For every DualSense connected over Bluetooth, ds5bridge presents a complete USB DualSense to the kernel – via USB/IP (vhci_hcd), using the USB descriptors of DS5Dongle (HID + 4-channel USB audio). Linux, PipeWire and Proton see a real USB device:

Direction Translation
Controller → PC Bluetooth input 0x31 → USB input 0x01
PC → Controller USB output 0x02 → Bluetooth 0x31 with sequence number and CRC32
USB audio (4 channels, 48 kHz) channels 3/4 → haptics (3 kHz, int8), channels 1/2 → speaker (Opus), Bluetooth report 0x39
Feature reports read: passed through · write: only 0x80 and 0x60–0x62 (others drop the connection)

The real Bluetooth controller is hidden from games and Steam so it doesn't show up twice: while the bridge runs, a udev rule (in /run/udev/rules.d) makes its nodes root-only the moment they appear, before anything can open them. Other Bluetooth devices (keyboard, mouse, other gamepads) are left alone.

DS5Tee – the tray tool

DS5Tee settings window

Settings per controller (or as the default for new controllers):

  • Speaker, haptics, rumble – with a short test sound / test rumble when you release the slider
  • Triggers L / R: strength and mode (from game, off, resistance, weapon, vibration)
  • Gyro to right stick (off / while aiming with L2 / always) with sensitivity, horizontal/vertical invert – like on the Switch: coarse with the stick, fine by tilting; works in every game without Steam Input
  • Light bar: custom color, by battery level (up to 5 points with your own colors, blended or in steps) or from the game, adjustable brightness; controller ID (player LEDs 1–4)
  • Controller microphone over Bluetooth (switch, off by default)
  • Auto-disconnect when idle, disconnect controller (also by middle-clicking the tray icon), reset
  • Touchpad as desktop mouse on/off (KDE Plasma)
  • Live view of buttons, sticks, triggers and touchpad (two fingers)
  • Battery level in the tooltip
  • Wired emulation on/off: off turns the pad back into a plain Bluetooth pad (restart the game after switching)
  • Keeps the pad's haptics/speaker stream on the controller when Arctis Sound Manager would route all game audio to the headset

Small and light: both are Rust programs (bridge ~0.6 MB, about 3 MB RAM; tray about 4 MB RAM). The settings window is its own process, drawn on the CPU (no GPU driver loaded, about 11 MB RAM), and only runs while it is open. Starting DS5Tee again while the tray runs opens the settings.

The interface follows the system language: German on German systems, English otherwise.

Requirements

  • Linux with vhci_hcd (part of the standard kernel, USB/IP) and BlueZ
  • libopus; to build: Rust (cargo)
  • For haptics and speaker in games: a Proton with DualSense audio support, e.g. GE-Proton 11
  • In the game / in Steam: turn off Steam Input for the game so it talks to the controller directly

Arch / CachyOS:

sudo pacman -S rust opus bluez-utils

Installation

git clone https://github.com/ProfessorTee/DS5Tee.git
cd DS5Tee
sudo ./install.sh

This builds both programs (as your user) and installs the system service ds5bridge and the tray tool DS5Tee (starts at login). Then connect the DualSense over Bluetooth as usual – even while a game is already running (tested with Monster Hunter Wilds: haptics arrive in the running game after connecting).

  • Log: journalctl -u ds5bridge -f
  • Settings: ~/.config/ds5bridge.json (written by DS5Tee)
  • Uninstall: sudo ./install.sh undo

Known limitations

  • The controller microphone is experimental and off by default (switch in the settings window).
  • The per-side trigger strength scales the effect parameters of the common modes; rare effects (bow, galloping, machine) are left unchanged.
  • Tested on CachyOS with KDE Plasma; the touchpad switch uses KWin.

Credits

License

MIT, see LICENSE.

About

DualSense über Bluetooth wie per Kabel unter Linux: adaptive Trigger, HD-Haptik, Lautsprecher (USB/IP-Brücke + Tray-Tool)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages