Skip to content

deadYokai/ds4u

Repository files navigation

Stand With Ukraine

Stand For Ukraine


Gitea GitLab GitHub

AUR AURGIT

DS4U - DualSense for You

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.

app preview

Features

Controller & inputs

  • Live input visualization (buttons, D-pad, sticks, triggers, touchpad)
  • Battery level and charging status
  • USB and Bluetooth connection, with automatic hotplug detection

Analog sticks

  • Per-stick sensitivity curves
  • Inner and outer deadzones per stick
  • Invert X / Y per stick
  • Swap left/right sticks

Adaptive triggers

  • 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)

Haptics & vibration

  • 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)

Lightbar & LEDs

  • 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

Audio

  • Output routing: internal speaker, headphone, or both
  • Microphone on/off toggle

Profiles

  • 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

Firmware

  • Read the controller's current firmware version and build info
  • Check the latest firmware version
  • Download and flash official firmware for DualSense / DualSense Edge

Themes

  • Built-in themes:
    • Default
    • Author theme (my custom theme)
    • Deep Dark
    • Tokyo Night
  • Custom theme support (see Custom Themes)

Daemon

  • 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

Installation

Arch Linux (AUR)

Released build:

yay -S ds4u

Latest git build:

yay -S ds4u-git

Building

Requirements

  • Rust
  • libraries: libudev, alsa-lib, openssl, libxkbcommon

Build

git clone https://gitlab.com/deadYokai/ds4u.git
cd ds4u
cargo build --release

Run

./target/release/ds4u

Device permissions

To 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 trigger

Command-line usage

Running 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.

Daemon

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.

Starting daemon

From the GUI (Settings), via the CLI, or as a service.

ds4u --daemon

Or 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.target

Profiles

Profiles 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.

Custom Themes

Filename must match id field inside JSON.

Theme file format

{
  "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.

Color roles

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

Config & Data Paths

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

Contributing

See CONTRIBUTING.md.

References:

Todo

  • other possible issues
  • DualSense Egde support

Support:

MySite Paypal Monobank Liberapay