Skip to main content

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

Project description

Razer Control Center for Linux

PyPI Python CI codecov 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 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

  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.6.2.tar.gz (147.0 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.6.2-py3-none-any.whl (110.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: razer_control_center-1.6.2.tar.gz
  • Upload date:
  • Size: 147.0 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.6.2.tar.gz
Algorithm Hash digest
SHA256 01aa097d6a2a9a4e035abd2a7588fd01ddcad36ca17fe0328ba582be04e8e34a
MD5 70e2da210504be4b76ef42380a8c5131
BLAKE2b-256 060d92d4dbb86b244ab295acfb9d66f96b109548c7f7dd8fcf4c12ed33979735

See more details on using hashes here.

Provenance

The following attestation bundles were made for razer_control_center-1.6.2.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.6.2-py3-none-any.whl.

File metadata

File hashes

Hashes for razer_control_center-1.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 dacce293ec92905586ea4be0e4ce1c8223cad6195ed2a12be5a2f067deb554b0
MD5 9d4f4e919d8f925d434aaa00e625b8fb
BLAKE2b-256 a26d4ddd03028d7f9e915776d93968a47656516d5704bd13b80ca254be626b86

See more details on using hashes here.

Provenance

The following attestation bundles were made for razer_control_center-1.6.2-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