Razer Control Center for Linux
A Synapse-like control center for Razer devices on Linux. Configure button remapping, macros, RGB lighting, and DPI settings.
Features
- Button Remapping: Remap mouse buttons and keyboard keys to different keys, chords, or macros
- Macro Support: Create and execute macro sequences with key presses, delays, and text input
- Multi-Layer Bindings: Support for multiple binding layers with hold-to-shift (Hypershift-like)
- Profile Management: Multiple profiles with per-application auto-switching
- App Watcher: Automatic profile switching when applications gain focus (X11/GNOME Wayland)
- OpenRazer Integration: Control RGB lighting, brightness, and DPI via OpenRazer
- Wayland Compatible: Uses evdev/uinput for reliable input remapping under Wayland and X11
Requirements
- Python 3.10+
- OpenRazer daemon (for lighting/DPI control)
- Linux with evdev and uinput support
- PySide6 (for GUI)
Installation
1. Install System Dependencies
# Ubuntu/Debian
sudo add-apt-repository ppa:openrazer/stable
sudo apt update
sudo apt install openrazer-daemon openrazer-driver-dkms \
libgirepository1.0-dev gir1.2-gtk-3.0 python3-gi
# Add yourself to the plugdev group
sudo gpasswd -a $USER plugdev
2. Install Razer Control Center
Option A: Via pipx (recommended)
pipx install razer-control-center
Option B: From source
cd ~/projects/Razer_Controls
./install.sh
The install script will:
- Create a Python virtual environment
- Install all dependencies
- Set up the systemd user service
- Configure permissions
3. Start the Application
# Start the GUI
razer-control-center
# Or start just the remap daemon
systemctl --user start razer-remap-daemon
Usage
GUI Overview
- Profiles Panel (left): Create, select, and manage profiles
- Devices Tab: Select which input devices to remap
- Bindings Tab: Configure key/button bindings and macros
- Lighting & DPI Tab: Control OpenRazer device settings
- Daemon Tab: Start/stop the remap daemon service
Creating a Binding
- Select a profile (or create a new one)
- Go to the Bindings tab
- Click "Add Binding"
- Select the input key/button (e.g., BTN_SIDE for mouse side button)
- Choose an action type:
- Key: Output a different key
- Chord: Output multiple keys pressed together
- Macro: Execute a macro sequence
- Passthrough: Pass the original key through
- Disabled: Block the key entirely
Creating a Macro
- Go to the Macros sub-tab in Bindings
- Click "Add Macro"
- Enter macro steps in the format:
key:A- Press and release Adown:CTRL- Hold Ctrlup:CTRL- Release Ctrldelay:100- Wait 100mstext:hello- Type "hello"
Automatic Profile Switching (App Watcher)
The app watcher automatically switches profiles when you focus different applications.
-
Add
match_process_namesto your profile JSON:{ "name": "Gaming", "match_process_names": ["steam", "*.exe", "lutris", "wine*"], "is_default": false }
-
Set one profile as default (fallback when no match):
{ "name": "Default", "is_default": true }
-
Start the daemon with app watcher enabled:
razer-remap-daemon --app-watcher
Pattern matching supports:
- Exact match:
firefox - Wildcards:
*.exe,steam* - Substring:
chromematchescom.google.chrome - Case-insensitive:
Firefoxmatchesfirefox
Supported backends:
- X11 (requires
xdotool) - GNOME Wayland (uses DBus)
Architecture
razer-control-center/
├── apps/gui/ # PySide6 GUI application
├── services/
│ ├── remap_daemon/ # evdev->uinput remapping engine
│ ├── openrazer_bridge/ # DBus communication with OpenRazer
│ ├── app_watcher/ # Per-app profile switching
│ └── macro_engine/ # Macro recording and playback
├── crates/
│ ├── profile_schema/ # Profile data model
│ ├── device_registry/ # Stable device identification
│ └── keycode_map/ # Key code mapping tables
└── packaging/
└── systemd/ # Systemd user service
Configuration
Profiles are stored in ~/.config/razer-control-center/profiles/ as JSON files.
Troubleshooting
"Permission denied" when grabbing devices
Add yourself to the input group:
sudo usermod -aG input $USER
Then log out and back in.
uinput not available
Load the uinput kernel module:
sudo modprobe uinput
To load automatically on boot, add to /etc/modules-load.d/uinput.conf:
uinput
OpenRazer not detecting devices
Make sure the OpenRazer daemon is running:
systemctl --user status openrazer-daemon
License
MIT License
Metadata
Release files for razer-control-center 1.9.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| razer_control_center-1.9.8.tar.gz | 1.6 MB | With provenance | Details for razer_control_center-1.9.8.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| razer_control_center-1.9.8-py3-none-any.whl | Python 3 | none | any | Details for razer_control_center-1.9.8-py3-none-any.whl |
Total release size: 1.7 MB
Release files / razer_control_center-1.9.8.tar.gz
| Download URL | razer_control_center-1.9.8.tar.gz |
|---|---|
| Size | 1.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fbc2b3dd9413b92be8b6ee55036d0fa2005a7c8ad552dc2a5a03a9840880e273
|
|
BLAKE2b-256 checksum How to use checksums |
d8bf0b6a21a4e3cfdf0653b327fa9249f5bddcc32060dea73f442daaac6b5800
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 8, 2026.
Transparency logRelease files / razer_control_center-1.9.8-py3-none-any.whl
| Download URL | razer_control_center-1.9.8-py3-none-any.whl |
|---|---|
| Size | 135.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0bd3784454d319d9aa74ea595fd4cad96778732c8c7b743722b7860f7ad8bf73
|
|
BLAKE2b-256 checksum How to use checksums |
52094a168c56d3ffb9d47f7cd0800b7ef8beb45a63b0f53a22ea3f679b65ef42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 8, 2026.
Transparency logSecurity for razer-control-center 1.9.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for razer_control_center-1.9.8.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 8, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.