Native Linux Gui tool for configuring DualSense controllers.
Note
DualSense Edge support is wired in (device ID and firmware are handled) but
is not tested and not officially supported yet. If you have problems with
this device, please open an Issue.
- Live input visualization (buttons, D-pad, sticks, triggers, touchpad)
- Battery level and charging status
- USB and Bluetooth connection, with automatic hotplug detection
- Per-stick sensitivity curves
- Inner and outer deadzones per stick
- Invert X / Y per stick
- Swap left/right sticks
- Independent left/right configuration
- Effect modes:
Off,Feedback,Weapon,Bow,Galloping,Vibration,Machine - Adjustable start/end position, strength and frequency
- Per-trigger deadband (release point and full-stroke point)
- Haptic patterns:
Constant,Pulse,Ramp,Wave(with strength and speed) - Raw PCM haptic streaming to the voice-coil actuators (USB, and Bluetooth via the daemon)
- RGB lightbar color, brightness and on/off
- Animated lightbar effects (via the daemon):
- Breath
- Rainbow
- Strobe
- Player-number indicator LEDs
- Microphone mute LED:
Off,On,Pulse
- Output routing: internal speaker, headphone, or both
- Microphone on/off toggle
- Save, load, switch and delete profiles (see Profiles)
- A profile captures everything: lightbar/LEDs, sticks, triggers, haptics, gyro, touchpad, mic, plus button remaps and disabled buttons
- Switch/list/reload profiles from the command line
- Read the controller's current firmware version and build info
- Check the latest firmware version
- Download and flash official firmware for DualSense / DualSense Edge
- Built-in themes:
- Default
- Author theme (my custom theme)
- Deep Dark
- Tokyo Night
- Custom theme support (see Custom Themes)
- Background service that keeps the controller connection alive and runs live effects and input processing (see Daemon)
- Start/stop directly from the GUI, run via the CLI, or install as a systemd user service
Released build:
yay -S ds4uLatest git build:
yay -S ds4u-git- Rust
- libraries:
libudev,alsa-lib,openssl,libxkbcommon
git clone https://gitlab.com/deadYokai/ds4u.git
cd ds4u
cargo build --release./target/release/ds4uTo talk to the controller without running as root, install a udev rule that grants your user access to the DualSense hidraw device.
The AUR package does this for you.
/etc/udev/rules.d/70-ds4u.rules:
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0664", GROUP="input", TAG+="uaccess"
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0df2", MODE="0664", GROUP="input", TAG+="uaccess"
Then reload the rules and reconnect the controller:
sudo udevadm control --reload-rules && sudo udevadm triggerRunning ds4u with no arguments launches the GUI.
The following flags talk to a running daemon over its Unix socket:
| Command | Description |
|---|---|
ds4u |
Launch the GUI |
ds4u --daemon |
Run as the background daemon |
ds4u --status |
Show the connected controller (serial, product id, USB/BT) and battery |
ds4u --list-profiles |
List saved profile names |
ds4u --switch-profile <name> |
Switch the active profile |
ds4u --reload-profile |
Reload the current profile from disk |
The profile commands require the daemon to be running.
The daemon is a background process that owns the controller connection and runs
the continuous work the GUI cannot do on its own.
While it runs it:
- maintains the connection to the controller and watches for hotplug events,
- applies the active profile, and
- runs the live loops for animated lightbar effects, haptic-pattern playback, gyro processing, and input transforms (stick curves, deadzones, invert/swap, button remap, touchpad behavior).
One-shot hardware settings (lightbar color, brightness, player LEDs, mic, mic LED) work whether or not the daemon is running;
the live/animated features above need it.
From the GUI (Settings), via the CLI, or as a service.
ds4u --daemonOr run as systemd service:
[Unit]
Description=DS4U DualSense Daemon
After=graphical-session.target
[Service]
ExecStart=/usr/local/bin/ds4u --daemon
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.targetProfiles are stored as JSON in ~/.config/ds4u/profiles/<name>.json, and the filename is derived from the profile name.
The active profile name is recorded in settings.json. A Default profile is created automatically if none exists.
Manage profiles from the GUI (the Profiles section) or from the command line.
Filename must match id field inside JSON.
{
"id": "tokyo_night",
"name": "Tokyo Night",
"dark_mode": true,
"colors": {
"window_bg": [26, 27, 38],
"panel_bg": [22, 22, 30],
"extreme_bg": [16, 16, 24],
"accent": [122, 162, 247],
"widget_hovered": [41, 46, 66],
"widget_inactive": [32, 36, 54],
"text": [192, 202, 245],
"text_dim": [86, 95, 137],
"success": [158, 206, 106],
"error": [247, 118, 142],
"warning": [224, 175, 104]
}
}All color values are [R, G, B] in the 0–255 range.
| Key | Description |
|---|---|
window_bg |
Main application background |
panel_bg |
Sidebar and panel backgrounds |
extreme_bg |
Deepest background (headers, separators) |
accent |
Highlights, active indicators, selected items |
widget_hovered |
Widget background on hover |
widget_inactive |
Widget background at rest |
text |
Primary text |
text_dim |
Secondary / hint text |
success |
Success indicators (e.g. connected, applied) |
error |
Error indicators |
warning |
Warning indicators |
| Path | Contents |
|---|---|
~/.config/ds4u/settings.json |
Active theme ID and active profile name |
~/.config/ds4u/profiles/ |
Saved profiles (<name>.json) |
~/.config/ds4u/themes/ |
Custom theme files (<id>.json) |
$XDG_RUNTIME_DIR/ds4u.socket |
Daemon Unix socket |
See CONTRIBUTING.md.
- other possible issues
- DualSense Egde support
