pskursor is a simple Linux device driver written in Rust. It lets you use your gamepads and controllers to control your mouse cursor, making it fun to navigate your desktop without a mouse.
- Leverages HIDAPI for bluetooth and USB device detection.
- Linux native api integration for mouse movement control.
- Implemented in rust, so you know its blazingly fast...
# 1. Pick a controller: highlight it and press `y` to activate.
# Only nodes marked ✓ in the Cursor column can drive the cursor.
pskursor --config
# 2. Run the daemon. Stick movement and button presses are logged by default.
pskursor
# Every raw evdev event, including SYN/MSC frames:
pskursor --verboseLogging goes to stderr and defaults to pskursor=debug. RUST_LOG overrides
it when set:
RUST_LOG=pskursor=trace pskursor # firehose
RUST_LOG=pskursor=info pskursor # startup only, no per-event outputTo see how pskursor classifies your devices without opening the TUI:
cargo run --example list_devicesA DualSense registers three event nodes and only the first can drive the cursor:
| Node | Name | Cursor capable |
|---|---|---|
event22 |
DualSense Wireless Controller |
✓ gamepad — sticks and buttons |
event23 |
… Motion Sensors |
✗ accelerometer/gyro, no buttons |
event24 |
… Touchpad |
✗ pointer, no gamepad buttons |
Activating a sibling node is the most common reason the daemon reports no joystick events. pskursor rejects those nodes at activation and at daemon startup, naming the capability that is missing.
Reading /dev/input/event* requires membership of the input group:
sudo usermod -aG input "$USER" # then log out and back inThe active device is recorded in a DEVAYNC (Device Activation Synchronization) file, resolved in this order:
$PSKURSOR_CONFIG— explicit file path, wins outright./devaync.json— legacy location, used only if it already exists$XDG_CONFIG_HOME/pskursor/devaync.json$HOME/.config/pskursor/devaync.json
The XDG fallbacks matter because the daemon does not generally share a working directory with the TUI.
This project is licensed under the GNU General Public License, Version 2.


