SC Controller // A powerful tool for all of your game controllers
User-mode driver, mapper, and GTK 4 based GUI for game controllers, including but not limited to the Steam Controller (2015 & 2026).
- Allows to setup, configure and use the Steam Controller (2015 & 2026) without ever launching Steam
- Emulates the Xbox 360 controller, mouse, trackball and keyboard
- Connect multiple controllers at the same time
- Supports profiles, switchable in the GUI, or with a controller button
- Joystick, Touchpad and Gyroscope input
- Haptic Feedback and in-game Rumble support
- Macros, button cycling, rapid fire, modeshift, mouse regions, …
- OSD, Menus, On-Screen Keyboard for desktop and in games - except in GNOME
- Automatic profile switching based on the active window - X11 only for now
All controllers should be supported at some level, either fully by a custom SC Controller driver, or best-effort by means of generic interfaces like evdev.
Controllers supported via a custom driver:
- Steam Controller (2015, 2026)
- Steam Deck
- DualShock 4 (v1, v2)
- DualSense
- DualSense Edge - untested, lacks support for the 4 extra buttons at the moment
The controllers above will be autodetected and used without having to explicitly configure them.
If your controller is not in the list above, you have to add it via Settings -> Controllers -> Register New Controller.
Upon starting the registration process, your controller will be automatically mapped via SDL's GameControllerDB, which has hundreds of supported devices.
In case your controller is missing from the database, you will have to manually map each button in the UI, and afterwards you should contribute the layout.
Beware that even when you do use automapper instead of manual assignment, you still have to press all the buttons as instructed, to automatically set up deadzones and thresholds for inputs like triggers and joysticks.
Note that there is no automatic discovery of evdev nodes for gyroscope/touchpad, so if your controller has one of those, it currently needs SCC to implement a custom driver for it.
That does mean that devices like Nintendo controllers do not have a working gyroscope, as I do not own any.
You can check out the ways to donate on my website, or just go straight to my Ko-Fi.
For reporting bugs or having feature suggestions, head to the Issues tab.
If you're not sure your topic belongs there, you can always head to Discussions instead.
We also have a Discord available.
|
|
Linux:
|
- Python 3.12+
- GTK 4.14+
- gtk4-layer-shell
- PyGObject
- python-gi-cairo and gir1.2-rsvg-2.0 on Debian-based distributions (included in PyGObject elsewhere)
- python-evdev
- python-pylibacl
- python-vdf
- python-libusb1
- python-hidraw-pure - Note: Temporarily vendored as v1.2 can conflict with python-hidapi, but system version is preferred by the code if present
- python-ioctl-opt
- setuptools
Download and extract latest release.zip releases without .git directory are currently broken - tracked in #50- Clone the repository
git clone https://github.com/C0rn3j/sc-controller.gitand navigate into it:cd sc-controller python3 -m build --wheelpython3 -m installer --destdir="./build" dist/*.whl- Run the app via:
SCC_SHARED="${PWD}" PYTHONPATH="./build/usr/lib/python3.14/site-packages" PATH="${PWD}/build/usr/bin:${PATH}" ./build/usr/bin/sc-controller
A test build with Docker can be created using the following way:
docker build -o build-output --build-arg BASE_CODENAME=noble .Download and extract latest release.zip releases without .git directory are currently broken - tracked in #50- Clone the repository
git clone https://github.com/C0rn3j/sc-controller.gitand navigate into it:cd sc-controller - Optionally checkout a branch or a tag, like
main(default) orv0.6.2 - Execute
./run.sh, this automatically builds the project into a venv called.venv, activates it and runs sc-controller, which in turn runs scc-daemon if one does not run already - If you are debugging an issue, running
./run.sh daemonfirst will launch the daemon in debug mode, allowing you to launch sc-controller in another terminal with./run.sh- note that sc-controller launched viarun.shalways runs in debug mode too.
If you contribute AI-assisted work, please disclose it, ensure you have tested the changes, and do not use unreviewed AI-generated text to communicate with maintainers.
Do not use AI-generated text to communicate with maintainers. You should understand and be able to explain your own work. Using AI to improve grammar or clarity is fine, but the substance of your responses must be your own.
If you wish to include context from an interaction with AI in your comments, it should be in a quote block (e.g., using >) and disclosed as such. It must be accompanied by your own commentary explaining the relevance and implications of the context.
This project uses AI tools to assist with debugging and writing code. AI output is reviewed, usually edited, and tested before being committed. In short, AI is treated as a development tool.
The exception to this is the contributed Steam Controller (2026) driver, which lives in its separate file, and its associated reverse engineering documentation.
Based on Standalone Steam Controller Driver by Ynsta.
Donation links for kozec, who is the original developer, can be found on the old upstream repository.