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.7.0.tar.gz (170.6 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.7.0-py3-none-any.whl (118.1 kB view details)

Uploaded Python 3

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

Hashes for razer_control_center-1.7.0.tar.gz
Algorithm Hash digest
SHA256 0ee522fba82a410df47d4af08d88f2a729ecbf3466ed515fec06aa68b06d5b8a
MD5 bab0a878f78e643fcf0f5b9c8506ce51
BLAKE2b-256 ab126749c01fc641677a807147b607537870a01e16a3a9113f28dd2f0f34cab2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for razer_control_center-1.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a171d6bcb5b4f9e0f797098724f7a89b5ff09e2047761a47667eef8bb298b05d
MD5 b5297ea0248592636745950a66bd1c68
BLAKE2b-256 cfedc1ce5ac55f839fa046182838a92e9d027ac8b07e5ff0cd93850019db663d

See more details on using hashes here.

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

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