#! /bin/python3 import openrazer.client import json from pathlib import Path from pynput import keyboard def get_keyboard(): devman = openrazer.client.DeviceManager() for device in devman.devices: if (device.name == "Razer BlackWidow Chroma V2"): return device return None def clear_all(kbd): # Set full keyboard to green for row in range(0,kbd_rows): for column in range(0, kbd_columns): kbd.fx.advanced.matrix[row,column] = [0, 0, 0] kbd = get_keyboard() if (kbd == None): print("No Razer device with devicename 'Razer Blackwidow Chroma V2' found.") exit() kbd_rows, kbd_columns = kbd.fx.advanced.rows, kbd.fx.advanced.cols last_key_pressed = None def on_press(key): global last_key_pressed last_key_pressed = key return False def get_key(): with keyboard.Listener(on_press=on_press) as listener: listener.join() def set_key_columns(keymap, column_range, prefix=""): for row in range(0,kbd_rows): for column in column_range: clear_all(kbd) kbd.fx.advanced.matrix[row,column] = [255, 255, 255] kbd.fx.advanced.draw() get_key() print('{} was pressed'.format(last_key_pressed)) keymap[prefix + str(last_key_pressed)] = row * kbd_columns + column def iter_keys(): keymap = dict() print("Make sure caps lock and numpad are disabled, if not, do it now and restart the script") print("This script will iterate over all keys, row by row. When a key lights up white, press it, and use the mouse to cancel any F-key effects. First, we'll skip the numpad. If no key lights up, press the bottom-right most key, excluding the numpad().") set_key_columns(keymap, range(0,18)) print("Now we'll iterate over the numpad, if no key lights up, press the bottom right key(enter)") set_key_columns(keymap, range(18,kbd_columns), "num_") return keymap def write_keymap_file(dictionary): keymap_json = json.dumps(keymap) path = Path.home() / '.config/openrazer_scripter/keymap.json' Path(path.parent).mkdir(parents=True, exist_ok=True) with open(path,'w') as keymap_file: keymap_file.write(keymap_json) keymap = iter_keys() write_keymap_file(keymap) print('Saved keymap to file (.config/openrazer_scripter/keymap.json)')