Makro-Schlüssel von einem Razer BlackWidow erhalten, um unter Linux zu funktionieren

32648
Journeyman Geek

Ich habe ein Razer BlackWidow Ultimate gekauft, das über zusätzliche Tasten für Makros verfügt, die mit einem unter Windows installierten Tool festgelegt werden . Ich gehe davon aus, dass es sich dabei nicht um einige fantastische Joojoo-Schlüssel handelt, die Scancodes wie alle anderen Tasten ausgeben sollten.

Gibt es eine Standardmethode, um diese Scancodes unter Linux zu überprüfen? Zweitens: Wie kann ich diese Tasten so einstellen, dass sie in Befehlszeilen- und X-basierten Linux-Setups ausgeführt werden? Meine derzeitige Linux-Installation ist Xubuntu 10.10, aber ich werde zu Kubuntu wechseln, sobald ich ein paar Dinge behoben habe. Idealerweise sollte die Antwort generisch und systemweit sein.

Dinge, die ich bisher ausprobiert habe:

Dinge, die ich versuchen muss

  • snoopy pro + reverse engineering (ach liebe)

  • Wireshark - ein vorläufiges Anpassen scheint zu zeigen, dass keine Scancodes ausgestrahlt werden, wenn ich glaube, dass die Tastatur überwacht wird und die Tasten gedrückt werden. Dies kann bedeuten, dass zusätzliche Tasten ein separates Gerät sind oder auf irgendeine Weise initialisiert werden müssen.

  • In drei Szenarien müssen Sie darauf verweisen, dass die Ausgabe von lsusb unter Linux erfolgt: Standalone, Weitergabe an eine Windows-VM, ohne dass die Treiber installiert sind.

  • LSUSB erkennt nur ein Gerät in einer eigenständigen Linux-Installation

  • Es kann nützlich sein, zu überprüfen, ob die Mäuse denselben Razer Synapse-Treiber verwenden, da dadurch möglicherweise einige Variationen von Razercfg funktionieren (nicht erkannt, scheint nur für Mäuse zu funktionieren).

Dinge, die ich erarbeitet habe:

  • In einem Windows-System mit Treiber wird die Tastatur als Tastatur und Zeigegerät betrachtet. Das Zeigegerät verwendet zusätzlich zu Ihren Standard-Maustreibern einen Treiber für etwas, das als Razer Synapse bezeichnet wird.

  • Maustreiber in Linux unter evdevund lsusbals auch

  • Einzelgerät unter OS X anscheinend, obwohl ich das lsusbÄquivalent dazu noch nicht probiert habe

  • Bei der Initialisierung mit dem Treiber wechselt die Tastatur in OS X in den pulsierenden Hintergrundlichtmodus. Dies sollte wahrscheinlich darauf hindeuten, dass bei der Aktivierung eine Initialisierungssequenz an die Tastatur gesendet wird.

  • Sie sind in der Tat phantasievolle Joojoo-Schlüssel.

Diese Frage etwas erweitern:

Ich habe Zugriff auf ein Windows-System. Wenn ich also Werkzeuge zur Beantwortung der Frage brauche, ist das in Ordnung. Ich kann es auch auf Systemen mit und ohne das Konfigurationsdienstprogramm ausprobieren. Das erwartete Endergebnis besteht jedoch immer noch darin, diese Schlüssel unter Linux nutzbar zu machen.

Mir ist auch klar, dass dies eine sehr spezifische Hardwarefamilie ist. Ich wäre bereit, alles zu testen, was auf einem Linux-System sinnvoll ist, wenn ich detaillierte Anweisungen habe. Dies sollte die Frage für Leute mit Linux-Kenntnissen eröffnen, aber keinen Zugriff auf diese Tastatur.

Das minimale Endergebnis benötige ich:

Ich brauche diese Tasten erkannt und auf jede Art und Weise in einer der gängigen Ubuntu-Mainstream-Varianten verwendbar und muss natürlich mit meiner Tastatur arbeiten. Virtueller Cookie und tolle Requisiten, wenn es für den Durchschnittsbenutzer gut verpackt und verwendbar ist.

Ich werde kompilierten Code erfordern, die auf meinem System funktionieren wird, oder eine Quelle, die ich (mit Anweisungen, wenn es komplizierter ist als kompilieren ./configure, make, make install), wenn zusätzliche Software nicht auf den Ubuntu - Repositories für die aktuelle LTS oder Standard - Desktop - Release zum Zeitpunkt der die Antwort. Ich werde auch ausreichende Informationen benötigen, um die Schlüssel auf meinem eigenen System zu replizieren und erfolgreich zu verwenden.

49
bitte mit irgendwelchen Lösungen aktualisieren, ich würde gerne das gleiche erreichen! Jonathan Day vor 12 Jahren 0
Ich hatte in letzter Zeit wirklich keine Zeit, daran zu arbeiten, aber ich werde diese Frage mit dem aktualisieren, was ich getan habe, bis ich eine Antwort bekomme. Journeyman Geek vor 12 Jahren 0
Vielleicht bearbeiten Sie die 500 Wiederholungen in der großen Schrift? Ansonsten macht diese Proklamation nicht viel Sinn (angesichts der im System registrierten 50 Wiederholungsprämie). Daniel Beck vor 12 Jahren 0
Funktioniert das immer noch für Sie? (Ich spreche von der neuesten Firmware, die unten von Sergey erwähnt wird) Adonis K. Kakoulidis vor 11 Jahren 0
Ich habe es nicht getestet, ich befürchte, ich wollte sergeys Lösung ausprobieren, um zu sehen, ob es funktioniert, aber ich habe in den letzten Monaten meistens Fenster für Schularbeiten ausgeführt. Wenn ja, werde ich einen Kommentar dazu posten Journeyman Geek vor 11 Jahren 0

6 Antworten auf die Frage

42
tux_mark_5

M1-M5 are in fact regular keys - they just need to be specifically enabled before pressing them will generate a scancode. tux_mark_5 developed a small Haskell program which sends the correct SET_REPORT message to Razer keyboards to enable these keys, and ex-parrot ported the same code to Python.

On Arch Linux systems the Python port has been packaged and is available from https://aur.archlinux.org/packages.php?ID=60518.

On Debian or Ubuntu systems setting up the Python port of the code is relatively easy. You need to install PyUSB and libusb (as root):

 aptitude install python-usb 

Then grab the blackwidow_enable.py file from http://finch.am/projects/blackwidow/ and execute it (also as root):

 chmod +x blackwidow_enable.py ./blackwidow_enable.py 

This will enable the keys until the keyboard is unplugged or the machine is rebooted. To make this permanent call the script from whatever style of startup script you most prefer. For instructions on how to set this up in Debian have a look at the Debian documentation.

To use tux_mark_5's Haskell code you'll need to install Haskell and compile the code yourself. These instructions are for a Debian-like system (including Ubuntu).

  1. Install GHC, libusb-1.0-0-dev and cabal (as root):

    aptitude install ghc libusb-1.0-0-dev cabal-install git pkg-config 
  2. Fetch the list of packages:

    cabal update 
  3. Install USB bindings for Haskell (no need for root):

    cabal install usb 
  4. Download the utility:

    git clone git://github.com/tuxmark5/EnableRazer.git 
  5. Build the utility:

    cabal configure cabal build 
  6. Run the utility (also as root):

    ./dist/build/EnableRazer/EnableRazer 

After this you can copy EnableRazer binary anywhere you want and run it at startup.

Immediately after execution, X server should see M1 as XF86Tools, M2 as XF86Launch5, M3 as XF86Launch6, M4 as XF86Launch7 and M5 as XF86Launch8. Events for FN are emitted as well.

These keys can be bound within xbindkeys or KDE's system settings to arbitrary actions.

Since your keyboard might be different, you might need to change the product ID in Main.hs line 64:

withDevice 0x1532 0x<HERE GOES YOUR KEYBOARD's PRODUCT ID> $ \dev -> do 
Das funktioniert gut. Sie erhalten 500 Wiederholungen an einem oder zwei Tagen, wenn das System es mir erlaubt. Ich habe mir die Freiheit genommen, pkg-config hinzuzufügen, was erforderlich war, um eine Voraussetzung des haskell-usb-Pakets in die Liste der Voraussetzungen zu installieren. Die Software funktioniert ohne Modifikationen an meinem Standard blackwidow ultimate mit einer Produkt-ID von 1532: 010d gemäß lsusb. Schlüssel werden bei evtest erkannt und scheinen verwendbar zu sein, so dass dies die Anforderungen der Frage perfekt erfüllt. Journeyman Geek vor 12 Jahren 0
Darüber hinaus hat kde keine Schlüsselbindungsoption, wie es scheint, xbindkeys scheint zu funktionieren Journeyman Geek vor 12 Jahren 0
mit ID 10e funktioniert es mit meinem Standard blackwidow (nicht ultimativ). Ich empfehle, eine udev-Regel hinzuzufügen, damit sie automatisch und ohne Probleme gestartet wird. Erstellen Sie beispielsweise eine Datei 99-enable-razer-keyboard.rules int /etc/udev/rules.d mit SUBSYSTEM == "usb", ACTION = = "add", ATTR == "1532", ATTR == "010e", RUN + = "/ root / EnableRazer" `(hier müssen Sie möglicherweise den Pfad und die ID erneut ändern) flolo vor 12 Jahren 0
Anscheinend funktioniert das Dienstprogramm, das ich geschrieben habe, auch mit Razer Anansi. Hier ist der Blog-Post von jemandem, der das abgelehnt hat: http://norgelinux.blogspot.com/2012/02/razer-anasi-on-arch-linux.html tux_mark_5 vor 12 Jahren 0
Ich habe das Razer BlackWidow 2013 (nicht das ultimative). Wenn ich das Script blackwidow_enable.py (mit und ohne root) ausführen, erhalte ich die Meldung "Blackwidow nicht gefunden.". Könnten Sie mir bitte beim Debuggen helfen? Ich bin auf UbuntuGnome 13.04. Es scheint, dass die Product_ID anders ist, und nachdem ich die Produkt-ID geändert habe, erhalte ich jetzt den folgenden Fehler: `Konfigurationsendpunkt konnte nicht ausgewählt werden.` Adonis K. Kakoulidis vor 10 Jahren 1
Der Link https://aur.archlinux.org/packages.php?ID=60518 ist fehlerhaft (404). Peter Mortensen vor 6 Jahren 0
"BlackWidow" nicht gefunden, aber "lsusb" zeigt "Bus 001 Device 004: ID 1532: 011a Razer USA, Ltd" Jonathan vor 5 Jahren 0
22
Sergey

Razer scheint heutzutage seinen Cloud-basierten Synapse 2-Konfigurator für alle Benutzer zu zwingen, mit einem Firmware-Upgrade auf Version 2. *. Nachdem Sie die Firmware aktualisiert haben, können Sie nicht mehr zurückkehren (die Tastatur ist vollständig gemauert, wenn Sie versuchen, sie mit einer älteren Firmware zu flashen).

Die 'magischen Bytes' aus dem Haskell-Programm in der Antwort von tux_mark_5 funktionieren mit der neuesten Firmware nicht. Stattdessen sendet der Treiber diese Bytes während der Initialisierungssequenz: '0200 0403'. Diese aktivieren die Makrotasten, aber die Tastatur wechselt in einen speziellen Modus, in dem anstelle des Standard-HID-Protokolls 16-Byte-Pakete gesendet werden (vermutlich, um die Anzahl der Tasten zu erhöhen, die gleichzeitig gedrückt werden können). Das Linux-HID-System kann damit nicht ganz zurechtkommen, und während die meisten Tasten wie erwartet funktionieren, werden die Makrotasten nicht erkannt: Der HID-Treiber leitet beim Drücken keine Daten an die Eingabeebene weiter.

Damit Ihre Tastatur in den Legacy-Modus wechselt (in dem die Makrotasten XF86Launch * -Codes und die FN-Taste den Keycode 202 senden), senden Sie diese Bytes: 0200 0402.

Das volle Paket wird sein:

00000000 00020004 02000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0400 

Hier ist ein sehr grobes und schmutziges Programm, das ich in weniger esoterischem Python 3 geschrieben habe, um die Aufgabe auszuführen. Beachten Sie den Code zum Generieren der Razer-Kontrollpakete in blackwidow.bwcmd () und die LED-Befehle des Razer-Logos als Bonus :)

#!/usr/bin/python3  import usb import sys  VENDOR_ID = 0x1532 # Razer PRODUCT_ID = 0x010e # BlackWidow / BlackWidow Ultimate  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() 
Meine Tastatur wurde aktualisiert und ich habe es noch nicht probiert. Ich werde es versuchen, wenn ich wieder ein richtiges Linux-System habe. Leider kann ich dafür keine weitere Belohnung geben - zum Teil aufgrund der Funktionsweise des Belohnungssystems. Ich * werde * wahrscheinlich die richtige Antwort auf Ihre umstellen, wenn dies der Fall ist. Journeyman Geek vor 11 Jahren 0
anscheinend fehlt das Modul usb auf meinem System, so dass dies nicht funktioniert: / Journeyman Geek vor 11 Jahren 0
Das USB-Modul ist wahrscheinlich im Paket pyusb (oder python-usb oder etwas Ähnlichem, abhängig von der Distribution). Sergey vor 11 Jahren 0
Sergey thank you very much, it works even with the newer Razer BlackWidow 2013 with PRODUCT_ID = 0x011b. I've not tried to set any macro yet but I see the events coming from /dev/input/by-id/usb-Razer_Razer_BlackWidow_2013-event-kbd and also in xev :). binary_runner vor 10 Jahren 2
Danke, das ist großartig. Ich benutze es seit einigen Jahren ohne Probleme (endlich bekam ich den Ruf zu kommentieren :)). Ein Kommentar zu pyusb: Da Ubuntu für python 3 immer noch kein pyusb liefert, musste ich es manuell mit Hilfe von `sudo python3 setup.py install` vom Quellcode installieren luator vor 9 Jahren 0
Ihr Code funktioniert auch gut mit dem Gerät 0x010d. Mit xmodmap erzeugen meine M1 bis M5 jetzt F13 bis F17. Wenn Sie dies irgendwo in einem Repository festgelegt haben, wäre es schön, wenn Sie die URL für andere veröffentlichen könnten. etherfish vor 9 Jahren 0
8
srmaddox

Vielleicht könnte das Problem (von der showkey-Manpage) etwas beleuchtet werden:

Im 2.6er Kernel-Modus oder Scancode-Modus ist der Roh-Modus überhaupt nicht sehr roh. Scancodes werden zuerst in Schlüsselcodes übersetzt, und wenn Scancodes gewünscht werden, werden die Schlüsselcodes zurückübersetzt. Es gibt verschiedene Transformationen, und es gibt keine Garantie dafür, dass das Endergebnis dem entspricht, was die Tastaturhardware gesendet hat. Wenn Sie also wissen möchten, welche Scancodes von verschiedenen Schlüsseln gesendet werden, ist es besser, einen 2.4-Kernel zu starten. Seit 2.6.9 gibt es auch die Boot-Option atkbd.softraw = 0, die den 2.6-Kernel anweist, die tatsächlichen Scan-Codes zurückzugeben.

Die unbehandelten Scan-Codes sind nur für AT- und PS / 2-Tastaturen verfügbar und auch dann deaktiviert, wenn der Kernel-Parameter atkbd.softraw = 0 verwendet wird. Wenn die unbehandelten Scan-Codes nicht verfügbar sind, verwendet der Kernel eine fest eingebaute Tabelle, um Scan-Codes aus Schlüsselcodes zu erzeugen. Setkeycodes (8) können daher die Ausgabe von showkey im Scancode-Dump-Modus beeinflussen.

Ich bin dabei zu sehen, ob showkey etwas mit den Makrotasten ausgibt, nachdem diese Startoption festgelegt wurde.

BEARBEITEN: Nach dem Neustart kein Erfolg, aber ich habe mich bemüht, rohe Eingaben von den USB-Geräten selbst zu erfassen. Interessant habe ich folgendes festgestellt (ich habe einen Razer Diamondback sowie BlackWidow):

[root@kestrel by-id]# pwd /dev/input/by-id [root@kestrel by-id]# ls usb-Razer_Razer_BlackWidow_Ultimate-event-kbd usb-Razer_Razer_Diamondback_Optical_Mouse-event-mouse usb-Razer_Razer_BlackWidow_Ultimate-event-mouse usb-Razer_Razer_Diamondback_Optical_Mouse-mouse usb-Razer_Razer_BlackWidow_Ultimate-mouse [root@kestrel by-id]# 

Die Verwendung von dd zum Erfassen roher Eingaben funktioniert jedoch für beide Diamondback-Mäuse, für das Event-kbd-Gerät, nicht jedoch für die BlackWidow-Mausgeräte.

Ich vermute, dass sie vielleicht keine Ausgabe erzeugen, bis sie irgendwie von den installierten Treibern aktiviert werden. Ich weiß nicht viel über Linux USB, daher weiß ich nicht einmal, ob dies sinnvoll ist. Vielleicht müssen sie zuerst gebunden werden?

Nun, alle drei schwarzen Witwengeräte sind in notiert /proc/bus/input/devices, scheinen jedoch nicht in lsusboder aufgezählt zu werden /proc/bus/usb/devices. Ich bin nicht sicher, wie ich auf diese Geräte zugreifen kann, um zu versuchen, sie zu binden oder in irgendeiner Weise mit ihnen zu kommunizieren.

event4scheint der eigentlichen Tastatur zu entsprechen, event6 mit den Makrotasten, aber ich kann immer noch keine Eingabe von ihnen erfassen. Hoffe, dass alles geholfen hat.

 [root@kestrel input]# ls devices handlers [root@kestrel input]# cat handlers N: Number=0 Name=kbd N: Number=1 Name=mousedev Minor=32 N: Number=2 Name=evdev Minor=64 N: Number=3 Name=rfkill [root@kestrel input]# pwd /proc/bus/input [root@kestrel input]# cat devices I: Bus=0019 Vendor=0000 Product=0001 Version=0000 N: Name="Power Button" P: Phys=PNP0C0C/button/input0 S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 U: Uniq= H: Handlers=kbd event0  B: EV=3 B: KEY=10000000000000 0  I: Bus=0019 Vendor=0000 Product=0001 Version=0000 N: Name="Power Button" P: Phys=LNXPWRBN/button/input0 S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 U: Uniq= H: Handlers=kbd event1  B: EV=3 B: KEY=10000000000000 0  I: Bus=0017 Vendor=0001 Product=0001 Version=0100 N: Name="Macintosh mouse button emulation" P: Phys= S: Sysfs=/devices/virtual/input/input2 U: Uniq= H: Handlers=mouse0 event2  B: EV=7 B: KEY=70000 0 0 0 0 B: REL=3  I: Bus=0003 Vendor=1532 Product=010d Version=0111 N: Name="Razer Razer BlackWidow Ultimate" P: Phys=usb-0000:00:12.1-3/input0 S: Sysfs=/devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.0/input/input4 U: Uniq= H: Handlers=kbd event4  B: EV=120013 B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe B: MSC=10 B: LED=7  I: Bus=0003 Vendor=1532 Product=010d Version=0111 N: Name="Razer Razer BlackWidow Ultimate" P: Phys=usb-0000:00:12.1-3/input1 S: Sysfs=/devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.1/input/input5 U: Uniq= H: Handlers=kbd event5  B: EV=1f B: KEY=837fff002c3027 bf00444400000000 1 c040a27c000 267bfad941dfed 9e000000000000 0 B: REL=40 B: ABS=100000000 B: MSC=10  I: Bus=0003 Vendor=1532 Product=010d Version=0111 N: Name="Razer Razer BlackWidow Ultimate" P: Phys=usb-0000:00:12.1-3/input2 S: Sysfs=/devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.2/input/input6 U: Uniq= H: Handlers=mouse2 event6  B: EV=17 B: KEY=70000 0 0 0 0 B: REL=103 B: MSC=10  I: Bus=0003 Vendor=1532 Product=0002 Version=0110 N: Name="Razer Razer Diamondback Optical Mouse" P: Phys=usb-0000:00:12.1-2/input0 S: Sysfs=/devices/pci0000:00/0000:00:12.1/usb4/4-2/4-2:1.0/input/input9 U: Uniq= H: Handlers=mouse1 event3  B: EV=17 B: KEY=7f0000 0 0 0 0 B: REL=103 B: MSC=10  [root@kestrel input]#  
Ich vermute, dass das System zur Initialisierung mit der Tastatur kommunizieren muss - unter OS X wird meine Tastatur in den pulsierenden Lichtmodus versetzt. Es ist wahrscheinlich etwas Initialisierung erforderlich, bevor die Tastatur-Makrotasten funktionieren Journeyman Geek vor 12 Jahren 0
Ich frage mich, wie ich diese Informationen an Maus- und Ereignis-Mausgeräte senden kann. Event-Maus scheint verantwortlich zu sein, da sie an einen Tastatur-Event-Handler gebunden ist. Ich meine, theoretisch müsste man nur das Gerät initialisieren und die richtige scancode-> keycode-Map mit setkeycode einrichten und die Ereignisse als normale Tastatureingaben übernehmen. srmaddox vor 12 Jahren 0
Vielleicht kann ich einfach Eclipse öffnen und ein Programm schreiben, um das Ein- / Ausgeben von Rohdaten in / aus dem Gerät zu ermöglichen. Dann kann sich Versuch und Irrtum durchsetzen. srmaddox vor 12 Jahren 0
http://www.jespersaur.com/drupal/book/export/html/21 Dies sollte für den Prozess von Interesse sein. Es geht weit über meine Fähigkeiten hinaus. Journeyman Geek vor 12 Jahren 0
7
Chen Levy

Meine Lösung ist für Razer BlackWidow 2013 Mechanical Gaming Keyboard (Modellnummer: RZ03-0039) und wurde unter openSUSE 12.3 getestet.

Ich habe Google Translate für diesen Link verwendet .

Grundsätzlich verwendet es für diese Frage die modifizierte Version von @Series Antwort, jedoch mit einfachen Modifikationen:

  1. Meine PRODUCT_ID = 0x011b

  2. In meinem openSUSE 12.3 ist Python-usb für Python 3 nicht verfügbar. Daher habe ich dieses Skript für die Verwendung mit Python 2 konvertiert, indem ich die bwcmdMethode entfernte und das USB_BUFFER = ...as in der Verknüpfung aus der Antwort von @tux_mark_5 definierte .


Der Einfachheit halber ist hier der Inhalt meines /usr/local/sbin/init_blackwidow.py:

#!/usr/bin/python  """This is a patched version of Sergey's code form https://superuser.com/a/474595/8647  It worked for my Razer BlackWidow 2013 Mechanical Gaming Keyboard (Model Number: RZ03-0039).  """ import usb import sys  VENDOR_ID = 0x1532 # Razer PRODUCT_ID = 0x011b # BlackWidow 2013 Mechanical Gaming Keyboard  USB_REQUEST_TYPE = 0x21 # Host To Device | Class | Interface USB_REQUEST = 0x09 # SET_REPORT  USB_VALUE = 0x0300 USB_INDEX = 0x2 USB_INTERFACE = 2  USB_BUFFER = b"\x00\x00\x00\x00\x00\x02\x00\x04\x02\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00"  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 send(self, c): def _send(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): for i in c: print(' >> {}\n'.format(i)) _send(i) 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() 

... und mein /etc/udev/rules.d/99-razer-balckwidow.rulesist:

SUBSYSTEM=="usb", ACTION=="add", ATTR=="1532", ATTR=="011b", RUN+="/usr/local/sbin/init_blackwidow.py" 
Wo haben Sie eine Kopie von Pyusb gefunden, die "usb.util" hat? KayEss vor 9 Jahren 0
@ KayEss, ich verwende `python-usb-1.0.0-21.1.noarch.rpm '. IIRC ist Teil der Standard-Repositories von 0penSUSE 12.3. Laut 'rpm -qi' befindet sich die Quelle unter http://sourceforge.net/projects/pyusb/, und die Paketquelle befindet sich unter obs: //build.opensuse.org/devel: languages: python Chen Levy vor 9 Jahren 0
Ich bin auf Ubuntu, und dazu gibt es keine gepackte Version für Python3. Ich hatte damals ein bisschen Probleme, Sudo, Python3, Pip und Virtualenv in einer Zeile zu finden, aber jetzt ist alles sortiert und ich sehe Codes für die Makrotasten. KayEss vor 9 Jahren 0
@KayEss, für Ubuntu 14.04 habe ich die Anweisungen von https://github.com/walac/pyusb/ verwendet. Insbesondere: `sudo apt-get install python libusb-1.0-0sudo` und` pip install pyusb --pre` Chen Levy vor 8 Jahren 1
2
ascobol

Vielleicht hilft Ihnen dieses Dokument:

Das Linux-Tastatur- und Konsolen-HOWTO , nützliche Programme

Es ist ein Anfang und eine Verbesserung wert. Interessanterweise werden die Makrotasten überhaupt nicht in Showkeys angezeigt Journeyman Geek vor 12 Jahren 0
Vielleicht gibt diese Makrotaste nur Scancode in Kombination mit einer anderen Taste aus. Wie ein Scancode für Makro-1 usw.? ascobol vor 12 Jahren 0
Sie scheinen unabhängig voneinander zu funktionieren, sobald sie in Windows konfiguriert sind. Möglicherweise muss ich einen Ansatz auf niedrigerer Ebene in Betracht ziehen. Meine Vermutung ist, da es Unterstützung für Mäuse gibt, die von derselben Firma mit [razercfg] (http://bues.ch/cms/hacking/razercfg.html) erstellt wurden, wobei nicht standardisierte Scancodes verwendet werden. heh Wenn es einfach wäre, hätte ich es wohl gefunden;) Journeyman Geek vor 12 Jahren 1
Dieses Dokument wurde seit 2002 nicht aktualisiert. Ist es noch aktuell? Peter Mortensen vor 6 Jahren 0
1
Camille Guay

Siehe Razer Key Mapper für Linux .

Dies funktioniert mit allen Makros des Razer-Geräts, wenn der Code geändert wurde. Wenn Sie immer noch keine Lösung haben und Ihr Gerät nicht aufgeführt ist, helfe ich Ihnen gerne bei der Konfiguration Ihres Geräts und füge es zu meiner unterstützten Liste hinzu.

Wie ist das besser als akzeptierte Antwort? Toto vor 6 Jahren 0
Einfacher, denke ich. Vorgefertigt Jetzt müssen Sie nur noch die Konfigurationsdateien füllen. Camille Guay vor 6 Jahren 1