Skip to main content

Razer Control Center for Linux - button remapping, macros, RGB lighting, and DPI control

Project description

Razer Control Center for Linux

CI codecov Tests Version Python 3.10+ License: MIT Platform

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 OpenRazer

# Ubuntu/Debian
sudo add-apt-repository ppa:openrazer/stable
sudo apt update
sudo apt install openrazer-daemon openrazer-driver-dkms

# Add yourself to the plugdev group
sudo gpasswd -a $USER plugdev

2. Install Razer Control Center

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

  1. Profiles Panel (left): Create, select, and manage profiles
  2. Devices Tab: Select which input devices to remap
  3. Bindings Tab: Configure key/button bindings and macros
  4. Lighting & DPI Tab: Control OpenRazer device settings
  5. Daemon Tab: Start/stop the remap daemon service

Creating a Binding

  1. Select a profile (or create a new one)
  2. Go to the Bindings tab
  3. Click "Add Binding"
  4. Select the input key/button (e.g., BTN_SIDE for mouse side button)
  5. 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

  1. Go to the Macros sub-tab in Bindings
  2. Click "Add Macro"
  3. Enter macro steps in the format:
    • key:A - Press and release A
    • down:CTRL - Hold Ctrl
    • up:CTRL - Release Ctrl
    • delay:100 - Wait 100ms
    • text:hello - Type "hello"

Automatic Profile Switching (App Watcher)

The app watcher automatically switches profiles when you focus different applications.

  1. Add match_process_names to your profile JSON:

    {
      "name": "Gaming",
      "match_process_names": ["steam", "*.exe", "lutris", "wine*"],
      "is_default": false
    }
    
  2. Set one profile as default (fallback when no match):

    {
      "name": "Default",
      "is_default": true
    }
    
  3. Start the daemon with app watcher enabled:

    razer-remap-daemon --app-watcher
    

Pattern matching supports:

  • Exact match: firefox
  • Wildcards: *.exe, steam*
  • Substring: chrome matches com.google.chrome
  • Case-insensitive: Firefox matches firefox

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

razer_control_center-1.5.1.tar.gz (137.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

razer_control_center-1.5.1-py3-none-any.whl (108.2 kB view details)

Uploaded Python 3

File details

Details for the file razer_control_center-1.5.1.tar.gz.

File metadata

  • Download URL: razer_control_center-1.5.1.tar.gz
  • Upload date:
  • Size: 137.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for razer_control_center-1.5.1.tar.gz
Algorithm Hash digest
SHA256 ab5595be0d06b860d51b93349446fbbd9fff5005fc9c262a6db8c67209f76615
MD5 b86c100ffa0a71f062e874ab778806ea
BLAKE2b-256 0e69a678979c6a8390fb5392525dcb10e50f8293534fe8f29efc55cfb61c36c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for razer_control_center-1.5.1.tar.gz:

Publisher: release.yml on AreteDriver/Razer_Controls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file razer_control_center-1.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for razer_control_center-1.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6bf9db69392ede9e144e0308d973ec86c50bad881592217b42e13fd31192b328
MD5 7ae8623c0af8d07c336f040a8a893539
BLAKE2b-256 7c90fbc14dab5b6a4fc460fb3480256f08dc730500126a87fa073b149c0e0fdf

See more details on using hashes here.

Provenance

The following attestation bundles were made for razer_control_center-1.5.1-py3-none-any.whl:

Publisher: release.yml on AreteDriver/Razer_Controls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page