Razer Control Center for Linux - button remapping, macros, RGB lighting, and DPI control
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file razer_control_center-1.7.0.tar.gz.
File metadata
- Download URL: razer_control_center-1.7.0.tar.gz
- Upload date:
- Size: 170.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ee522fba82a410df47d4af08d88f2a729ecbf3466ed515fec06aa68b06d5b8a
|
|
| MD5 |
bab0a878f78e643fcf0f5b9c8506ce51
|
|
| BLAKE2b-256 |
ab126749c01fc641677a807147b607537870a01e16a3a9113f28dd2f0f34cab2
|
Provenance
The following attestation bundles were made for razer_control_center-1.7.0.tar.gz:
Publisher:
release.yml on AreteDriver/Razer_Controls
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
razer_control_center-1.7.0.tar.gz -
Subject digest:
0ee522fba82a410df47d4af08d88f2a729ecbf3466ed515fec06aa68b06d5b8a - Sigstore transparency entry: 790830330
- Sigstore integration time:
-
Permalink:
AreteDriver/Razer_Controls@b9c23697df7df5b29212056f0c83a1ebc369ccea -
Branch / Tag:
refs/tags/v1.7.0 - Owner: https://github.com/AreteDriver
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b9c23697df7df5b29212056f0c83a1ebc369ccea -
Trigger Event:
release
-
Statement type:
File details
Details for the file razer_control_center-1.7.0-py3-none-any.whl.
File metadata
- Download URL: razer_control_center-1.7.0-py3-none-any.whl
- Upload date:
- Size: 118.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a171d6bcb5b4f9e0f797098724f7a89b5ff09e2047761a47667eef8bb298b05d
|
|
| MD5 |
b5297ea0248592636745950a66bd1c68
|
|
| BLAKE2b-256 |
cfedc1ce5ac55f839fa046182838a92e9d027ac8b07e5ff0cd93850019db663d
|
Provenance
The following attestation bundles were made for razer_control_center-1.7.0-py3-none-any.whl:
Publisher:
release.yml on AreteDriver/Razer_Controls
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
razer_control_center-1.7.0-py3-none-any.whl -
Subject digest:
a171d6bcb5b4f9e0f797098724f7a89b5ff09e2047761a47667eef8bb298b05d - Sigstore transparency entry: 790830333
- Sigstore integration time:
-
Permalink:
AreteDriver/Razer_Controls@b9c23697df7df5b29212056f0c83a1ebc369ccea -
Branch / Tag:
refs/tags/v1.7.0 - Owner: https://github.com/AreteDriver
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b9c23697df7df5b29212056f0c83a1ebc369ccea -
Trigger Event:
release
-
Statement type: