macro keys for Razer BlackWidow Ultimate
I bought a new keyboard, a Razer BlackWidow Ultimate Elite. All keys will operate until the macro keys M1 to M5.
xev
gives no output for this keys. Is there a way to use keys with Ubuntu?
% lsusb | grep Razer
Bus 007 Device 003: ID 1532:011a Razer USA, Ltd
Solution 1:
First, we need a little Python3 script, taken from here (Please go and give @Sergey an upvote ;))
I have replaced the product id with my product id 011a
#!/usr/bin/python3
import usb
import sys
VENDOR_ID = 0x1532 # Razer
PRODUCT_ID = 0x011a # BlackWidow Ultimate Elite
USB_REQUEST_TYPE = 0x21 # Host To Device | Class | Interface
USB_REQUEST = 0x09 # SET_REPORT
USB_VALUE = 0x0300
USB_INDEX = 0x2
USB_INTERFACE = 2
LOG=sys.stderr.write
class blackwidow(object):
kernel_driver_detached = False
def __init__(self):
self.device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
if self.device is None:
raise ValueError("Device {}:{} not found\n".format(VENDOR_ID, PRODUCT_ID))
else:
LOG("Found device {}:{}\n".format(VENDOR_ID, PRODUCT_ID))
if self.device.is_kernel_driver_active(USB_INTERFACE):
LOG("Kernel driver active. Detaching it.\n")
self.device.detach_kernel_driver(USB_INTERFACE)
self.kernel_driver_detached = True
LOG("Claiming interface\n")
usb.util.claim_interface(self.device, USB_INTERFACE)
def __del__(self):
LOG("Releasing claimed interface\n")
usb.util.release_interface(self.device, USB_INTERFACE)
if self.kernel_driver_detached:
LOG("Reattaching the kernel driver\n")
self.device.attach_kernel_driver(USB_INTERFACE)
LOG("Done.\n")
def bwcmd(self, c):
from functools import reduce
c1 = bytes.fromhex(c)
c2 = [ reduce(int.__xor__, c1) ]
b = [0] * 90
b[5:5+len(c1)] = c1
b[-2:-1] = c2
return bytes(b)
def send(self, c):
def _send(msg):
USB_BUFFER = self.bwcmd(msg)
result = 0
try:
result = self.device.ctrl_transfer(USB_REQUEST_TYPE, USB_REQUEST, wValue=USB_VALUE, wIndex=USB_INDEX, data_or_wLength=USB_BUFFER)
except:
sys.stderr.write("Could not send data.\n")
if result == len(USB_BUFFER):
LOG("Data sent successfully.\n")
return result
if isinstance(c, list):
# import time
for i in c:
print(' >> {}\n'.format(i))
_send(i)
# time.sleep(.05)
elif isinstance(c, str):
_send(c)
###############################################################################
def main():
init_new = '0200 0403'
init_old = '0200 0402'
pulsate = '0303 0201 0402'
bright = '0303 0301 04ff'
normal = '0303 0301 04a8'
dim = '0303 0301 0454'
off = '0303 0301 0400'
bw = blackwidow()
bw.send(init_old)
if __name__ == '__main__':
main()
To start the script, we need pyusb
for Python3
sudo pip3 install --upgrade pip
sudo pip3 install pyusb
Save the Python script as init_blackwidow.py
and set the execution rights. Now start the script with
sudo ./init_blackwidow.py
Now you can check the keycodes with xev
…
… until the next reboot :\
But we can use /etc/rc.local
and udev
:
Copy the script
init_blackwidow.py
into/usr/local/bin
-
Add the line below in
/etc/rc.local
, before the lineexit 0
/usr/local/bin/init_blackwidow.py
Now you should have something like this
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. /usr/local/bin/init_blackwidow.py exit 0
-
Create a new rule
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="1532", ATTR{idProduct}=="011a", RUN+="/usr/local/bin/init_blackwidow.py"
in
/etc/udev/rules.d/99-razer_blackwidow.rules
-
Restart
udev
sudo service udev restart
and enjoy …
Solution 2:
As an alternative to the good anwser of A.B. :
Easy install of razer chroma drivers
The following project has support for many Razer chroma drivers. It also activates the Mx keys.
https://github.com/pez2001/razer_chroma_drivers
MacroW - A simple macro player/recorder.
There is an on-the-fly macro recorder/ playback for the M1,M2,M3,M4 and M5 keys called MacroW. MacroW is very simple to use (IMHO as dev). If you managed to activate your Mx keys and want to try MacroW you can check it out:
https://github.com/igorbb/MacroW
I would love to get some feedback/ help on it.