Skip to main content

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

Project description

Razer Control Center for Linux

Razer Control Center

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.9.3.tar.gz (1.6 MB 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.9.3-py3-none-any.whl (134.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: razer_control_center-1.9.3.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • 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.9.3.tar.gz
Algorithm Hash digest
SHA256 13ecdec11cd095136671eb356e9ae2ffd00e9798db7dd9fce571e19f40bfe698
MD5 60390cd060416d420e21401cb0650348
BLAKE2b-256 31d0d388bb5e423899301b10537df1ab9231fa8dacb5caf8795769a67df06dc0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for razer_control_center-1.9.3-py3-none-any.whl
Algorithm Hash digest
SHA256 25f5fda0e45e449f71593294a8663a725132edb9ed613d66dccee614dd02b24a
MD5 4f1ef4aaa3ecf6bda90683aae445f174
BLAKE2b-256 bead4601eba2aec8945884c2d77e9e43f36151fdbdc0fcd55715a02f4083ff37

See more details on using hashes here.

Provenance

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