Получение макроклавиш от Razer BlackWidow для работы в Linux

32443
Journeyman Geek

Я выбрал Razer BlackWidow Ultimate, в котором есть дополнительные ключи для макросов, которые устанавливаются с помощью инструмента, установленного в Windows . Я предполагаю, что это не какие-то причудливые ключи joojoo, и они должны генерировать сканкоды, как и любые другие ключи.

Во-первых, существует ли стандартный способ проверки этих скан-кодов в Linux? Во-вторых, как мне настроить эти ключи для работы в командной строке и X-based Linux? Моя текущая установка Linux - Xubuntu 10.10, но я перейду на Kubuntu, как только я исправлю некоторые вещи. В идеале ответ должен быть общим и общесистемным.

Вещи, которые я пробовал до сих пор:

Что мне нужно попробовать

  • Snoopy Pro + обратный инжиниринг (о дорогой)

  • Wireshark - предварительное возмущение указывает на отсутствие кодов сканирования, когда, как мне кажется, контролируется клавиатура и нажимаются клавиши. Может означать, что дополнительные ключи являются отдельным устройством или должны быть как-то инициализированы.

  • Нужно сделать перекрестную ссылку, чтобы при выводе lsusb из Linux в трех сценариях: автономный, передаваемый на виртуальную машину Windows без установленных драйверов и то же самое с.

  • LSUSB обнаруживает только одно устройство в автономной установке Linux

  • Возможно, было бы полезно проверить, используют ли мыши один и тот же драйвер Razer Synapse, поскольку это означает, что может работать некоторая вариация razercfg (не обнаружено, похоже, работает только для мышей)

Вещи, которые я разработал:

  • В системе Windows с драйвером клавиатура рассматривается как клавиатура и указательное устройство. Указывающее устройство использует, в дополнение к стандартным драйверам мыши, драйвер для чего-то, называемого Razer Synapse.

  • Драйвер мыши видели в Linux под evdevи lsusbа

  • Одно устройство под OS X, по-видимому, хотя я еще не пробовал lsusbэквивалент на этом

  • Клавиатура переходит в режим импульсной подсветки в OS X при инициализации с драйвером. Это, вероятно, должно указывать на то, что при активации на клавиатуре посылается последовательность инициализации.

  • На самом деле, они представляют собой необычные штаны-джу-джу.

Продолжим этот вопрос немного:

У меня есть доступ к системе Windows, поэтому, если мне нужно использовать какие-либо инструменты для ответа на вопрос, это нормально. Я также могу попробовать это на системах с и без утилиты конфигурации. Ожидаемый конечный результат все еще должен сделать эти ключи пригодными для использования в Linux.

Я также понимаю, что это очень специфическое семейство аппаратных средств. Я хотел бы протестировать все, что имеет смысл в системе Linux, если у меня есть подробные инструкции - это должно открыть вопрос для людей, которые имеют навыки работы с Linux, но не имеют доступа к этой клавиатуре.

Минимальный конечный результат, который мне требуется:

Мне нужно, чтобы эти клавиши были обнаружены и могли использоваться любым способом на любом из текущих графических основных вариантов Ubuntu, и, естественно, я должен работать с моей клавиатурой. Виртуальные куки и безумные реквизиты, если это что-то красиво упакованное и используемое обычным пользователем.

Я потребую скомпилированный код, который будет работать на моей системе, или источник, который я могу компилировать (с указанием, если это более сложный, чем ./configure, make, make install), если дополнительное программное обеспечение не на репозиториях Ubuntu для текущего LTS или стандартного выпуска настольных в момент ответ. Мне также потребуется достаточно информации для репликации и успешного использования ключей в моей собственной системе.

49
Пожалуйста, обновите с любыми решениями, я хотел бы добиться того же! Jonathan Day 12 лет назад 0
У меня действительно не было времени работать над этим в последнее время, но я буду обновлять этот вопрос тем, что я сделал, пока не получу ответ. Journeyman Geek 12 лет назад 0
Может быть, редактировать, чтобы упомянуть 500 представителей крупным шрифтом? В противном случае это объявление не имеет особого смысла (учитывая награду в 50 представителей, зарегистрированную в системе) Daniel Beck 12 лет назад 0
Это все еще работает для вас? (Я говорю о последней прошивке, упомянутой ниже Сергеем) Adonis K. Kakoulidis 11 лет назад 0
Я не проверял это, я боюсь, я хотел попробовать решение Сергея, чтобы увидеть, работает ли оно, но я в течение последних нескольких месяцев запускал окна для школьных занятий. Если это произойдет, я опубликую комментарий на этот счет Journeyman Geek 11 лет назад 0

6 ответов на вопрос

42
tux_mark_5

M1-M5 на самом деле являются обычными клавишами - их просто нужно специально включить, прежде чем нажимать их, чтобы генерировать скан-код. tux_mark_5 разработал небольшую программу на Haskell, которая отправляет правильное сообщение SET_REPORT на клавиатуры Razer для включения этих клавиш, и ex-parrot перенес тот же код на Python.

В системах Arch Linux порт Python упакован и доступен по адресу https://aur.archlinux.org/packages.php?ID=60518 .

В системах Debian или Ubuntu настроить порт Python для кода относительно просто. Вам нужно установить PyUSB и libusb (как root):

 aptitude install python-usb 

Затем возьмите blackwidow_enable.pyфайл с http://finch.am/projects/blackwidow/ и запустите его (также как пользователь root):

 chmod +x blackwidow_enable.py ./blackwidow_enable.py 

Это будет включать клавиши до тех пор, пока клавиатура не будет отключена или машина не будет перезагружена. Чтобы сделать этот постоянный вызов скрипта из любого стиля запуска скрипта, который вы предпочитаете. Инструкции по настройке этого в Debian смотрите в документации Debian .

Чтобы использовать код Haskell в tux_mark_5, вам нужно установить Haskell и скомпилировать код самостоятельно. Эти инструкции предназначены для Debian-подобной системы (включая Ubuntu).

  1. Установите GHC, libusb-1.0-0-dev и cabal (как root):

    aptitude install ghc libusb-1.0-0-dev cabal-install git pkg-config 
  2. Получить список пакетов:

    cabal update 
  3. Установите привязки USB для Haskell (без рута):

    cabal install usb 
  4. Скачайте утилиту:

    git clone git://github.com/tuxmark5/EnableRazer.git 
  5. Создайте утилиту:

    cabal configure cabal build 
  6. Запустите утилиту (также с правами root):

    ./dist/build/EnableRazer/EnableRazer 

После этого вы можете скопировать двоичный файл EnableRazer куда угодно и запустить его при запуске.

Сразу после выполнения X-сервер должен видеть M1 как XF86Tools, M2 как XF86Launch5, M3 как XF86Launch6, M4 как XF86Launch7 и M5 как XF86Launch8. События для FN также генерируются.

Эти ключи могут быть привязаны в xbindkeys или системных настройках KDE к произвольным действиям.

Поскольку ваша клавиатура может отличаться, вам может потребоваться изменить идентификатор продукта в строке Main.hs 64:

withDevice 0x1532 0x<HERE GOES YOUR KEYBOARD's PRODUCT ID> $ \dev -> do 
Это работает, хорошо идет. Вы получите 500 повторений в день или два, когда система позволит мне. Я взял на себя смелость добавить pkg-config, который был необходим для установки обязательного пакета usb пакета haskell в список необходимых компонентов. Программное обеспечение работает без каких-либо изменений на моем стандартном BlackWidow Ultimate, с идентификатором продукта 1532: 010d в соответствии с lsusb. Ключи обнаруживаются на evtest и кажутся пригодными для использования, так что это полностью соответствует требованиям вопроса. Journeyman Geek 12 лет назад 0
кроме того, kde, похоже, не имеет опции привязки ключей, xbindkeys работает Journeyman Geek 12 лет назад 0
с ID 10e это работает с моим стандартным blackwidow (не окончательным). Я рекомендую добавить правило udev, чтобы оно запускалось автоматически, без проблем, например, создайте файл 99-enable-razer-keyboard.rules int /etc/udev/rules.d с `SUBSYSTEM ==" usb ", ACTION = = "добавить", ATTR == "1532", ATTR == "010e", RUN + = "/ root / EnableRazer" `в нем (здесь вам, возможно, придется изменить путь и идентификатор снова) flolo 12 лет назад 0
Видимо, утилита, которую я написал, работает и с Razer Anansi. Вот запись в блоге того, кто справился с этой задачей: http://norgelinux.blogspot.com/2012/02/razer-anasi-on-arch-linux.html tux_mark_5 12 лет назад 0
У меня Razer BlackWidow 2013 (не окончательный), когда я выполняю сценарий blackwidow_enable.py (с рутом и без него), я получаю сообщение «Черная вдова не найдена». Не могли бы вы помочь мне отладить это? Я на UbuntuGnome 13.04. Кажется, что Product_ID отличается, и после изменения идентификатора продукта я теперь получаю эту ошибку: «Не удалось выбрать конечную точку конфигурации». Adonis K. Kakoulidis 10 лет назад 1
Ссылка https://aur.archlinux.org/packages.php?ID=60518 не работает (404). Peter Mortensen 6 лет назад 0
«BlackWidow» не найден, но «lsusb» показывает «Устройство 001 Bus 001: ID 1532: 011a Razer USA, Ltd» Jonathan 5 лет назад 0
22
Sergey

В настоящее время Razer, похоже, навязывает свой облачный конфигуратор Synapse 2 всем пользователям, сопровождая обновление прошивки до версии 2. *. После того, как вы обновили прошивку, вы не сможете вернуться назад (клавиатура полностью заглушена, если вы пытаетесь прошить ее более старой прошивкой).

«Волшебные байты» из программы на Haskell в ответе tux_mark_5 не будут работать с последней прошивкой. Вместо этого драйвер отправляет эти байты во время последовательности инициализации: «0200 0403». Они активируют макроклавиши, но клавиатура входит в особый режим, в котором вместо стандартного протокола HID она отправляет 16-байтовые пакеты (предположительно, для увеличения количества клавиш, которые могут быть нажаты одновременно). Система Linux HID не может справиться с этим, и хотя большинство клавиш работают должным образом, макроклавиши остаются нераспознанными: драйвер HID не передает никаких данных на входной слой при их нажатии.

Чтобы заставить вашу клавиатуру перейти в прежний режим (в котором макроклавиши отправляют коды клавиш XF86Launch *, а клавиша FN отправляет код клавиши 202), отправьте эти байты: 0200 0402.

Полный пакет будет:

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

Вот очень грубая и грязная программа, которую я написал в менее эзотерическом Python 3 для выполнения этой задачи. Обратите внимание на код для генерации управляющих пакетов Razer в blackwidow.bwcmd () и команды LED Razer logo в качестве бонуса :)

#!/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() 
моя клавиатура была обновлена, и я еще не пробовал. Я попробую, когда у меня снова будет правильная система Linux. К сожалению, я не могу дать еще одну награду за это - отчасти из-за того, как работает система премий. Я * вероятно * передам правильный ответ на ваш, если это произойдет. Journeyman Geek 11 лет назад 0
по-видимому, модуль USB отсутствует в моей системе, так что это не работает: / Journeyman Geek 11 лет назад 0
Модуль usb, вероятно, находится в пакете pyusb (или python-usb или что-то подобное, в зависимости от дистрибутива). Sergey 11 лет назад 0
Сергей, большое спасибо, он работает даже с более новым Razer BlackWidow 2013 с PRODUCT_ID = 0x011b. Я еще не пытался установить какой-либо макрос, но я вижу события, поступающие из / dev / input / by-id / usb-Razer_Razer_BlackWidow_2013-event-kbd, а также из xev :). binary_runner 10 лет назад 2
Спасибо, это здорово. Я использую его уже несколько лет без проблем (наконец-то появилась репутация комментировать :)). Один комментарий к pyusb: Так как Ubuntu по-прежнему не поставляет pyusb для Python 3, мне пришлось установить его вручную из исходного кода, используя `sudo python3 setup.py install` luator 9 лет назад 0
Ваш код также хорошо работает с устройством 0x010d. С xmodmap мои M1-M5 теперь генерируют F13-F17. Если вы отправили это в хранилище, было бы неплохо, если бы вы могли опубликовать URL для других. etherfish 9 лет назад 0
8
srmaddox

Возможно, это могло бы пролить некоторый свет на проблему (с man-страницы showkey):

В ядре 2.6 режим raw или режим скан-кода совсем не очень сырой. Сканированные коды сначала переводятся в коды клавиш, а когда требуются коды сканирования, коды клавиш переводятся обратно. Различные преобразования происходят, и нет никакой гарантии, что конечный результат соответствует тому, что выслало аппаратное обеспечение клавиатуры. Итак, если вы хотите узнать коды сканирования, отправленные различными ключами, лучше загрузить ядро ​​2.4. Начиная с версии 2.6.9, также имеется параметр загрузки atkbd.softraw = 0, который сообщает ядру 2.6, что нужно возвращать действительные коды сканирования.

Необработанные коды сканирования доступны только на клавиатурах AT и PS / 2, и даже в этом случае они отключены, если не используется параметр ядра atkbd.softraw = 0. Когда необработанные коды сканирования недоступны, ядро ​​использует фиксированную встроенную таблицу для получения кодов сканирования из кодов клавиш. Таким образом, setkeycodes (8) могут влиять на вывод showkey в режиме дампа кода сканирования.

Я собираюсь посмотреть, будет ли showkey сбрасывать что-либо с ключами макроса после установки этой опции загрузки.

РЕДАКТИРОВАТЬ: После перезагрузки, безуспешно, но я пытался захватить необработанный ввод с самих USB-устройств. Интересно отметить следующее (у меня есть Razer Diamondback и 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]# 

Однако использование dd для захвата необработанного ввода работает на обеих мышах diamondback, на устройстве event-kbd, но не на устройствах мыши BlackWidow.

Я предполагаю, что, возможно, они не генерируют какой-либо вывод до тех пор, пока не будут активированы установленные драйверы. Однако я не очень разбираюсь в Linux USB, поэтому даже не знаю, имеет ли это смысл. Возможно, они должны быть связаны в первую очередь?

Ну, все три устройства черной вдовы отмечены в /proc/bus/input/devices, но они, кажется, не перечислены в lsusbили /proc/bus/usb/devices. Я не уверен, как получить доступ к этим устройствам, чтобы попытаться связать их или каким-либо образом взаимодействовать с ними.

event4кажется, соответствует реальной клавиатуре, event6 с макро клавишами, но я все еще не могу захватить какой-либо ввод от них. Надеюсь, что все помогло.

 [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]#  
Я предполагаю, что система должна связываться с клавиатурой для их инициализации - с OS X моя клавиатура переключается в режим «пульсирующего» освещения. Вероятно, требуется некоторая инициализация, прежде чем сработают макроклавиши клавиатуры Journeyman Geek 12 лет назад 0
Что меня интересует, так это как отправить эту информацию на мышь и мышь для событий. Event-mouse, кажется, ответственен, так как он связан с обработчиком событий клавиатуры. Я имею в виду, теоретически, все, что нужно, это инициализировать устройство и настроить правильную карту кодов сканирования> код ключа с помощью setkeycode и ittl воспринимать события как обычные нажатия клавиш. srmaddox 12 лет назад 0
Возможно, я могу просто открыть Eclipse и написать программу, позволяющую вводить / выводить данные с устройства. Тогда проба и ошибка могут преобладать. srmaddox 12 лет назад 0
http://www.jespersaur.com/drupal/book/export/html/21 это должно быть интересно, насколько процесс идет. Это далеко за пределами моих навыков, хотя. Journeyman Geek 12 лет назад 0
7
Chen Levy

Мое решение предназначено для механической игровой клавиатуры Razer BlackWidow 2013 (номер модели: RZ03-0039) и протестировано на openSUSE 12.3.

Я использовал Google Translate по этой ссылке .

В основном он использует измененную версию ответа @ Sergey на этот вопрос, но с простыми изменениями:

  1. мой PRODUCT_ID = 0x011b

  2. В моем openSUSE 12.3 python-usb недоступен для Python 3, поэтому я преобразовал этот сценарий для работы с Python 2, удалив bwcmdметод и определив, USB_BUFFER = ...как в ссылке, из ответа @ tux_mark_5 .


Для удобства вот содержание моего /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() 

... и мой /etc/udev/rules.d/99-razer-balckwidow.rulesэто:

SUBSYSTEM=="usb", ACTION=="add", ATTR=="1532", ATTR=="011b", RUN+="/usr/local/sbin/init_blackwidow.py" 
Где вы нашли копию pyusb с `usb.util`? KayEss 9 лет назад 0
@KayEss, я использую `python-usb-1.0.0-21.1.noarch.rpm`. IIRC является частью стандартных хранилищ 0penSUSE 12.3. Согласно `rpm -qi`, источник находится по адресу http://sourceforge.net/projects/pyusb/, а источник пакета - по адресу obs: //build.opensuse.org/devel: languages: python. Chen Levy 9 лет назад 0
Я нахожусь на Ubuntu, и там нет упакованной версии для python3. Тогда у меня возникли некоторые проблемы с объединением всех sudo, python3, pip и virtualenv в строку, но теперь они отсортированы, и я вижу коды для макроклавиш. KayEss 9 лет назад 0
@KayEss, для Ubuntu 14.04, я использовал инструкции от: https://github.com/walac/pyusb/. В частности: `sudo apt-get install python libusb-1.0-0sudo` и` pip install pyusb --pre` Chen Levy 8 лет назад 1
2
ascobol

Может быть, этот документ поможет вам:

Клавиатура и консоль Linux HOWTO , Полезные программы

это начало, и стоит воздержаться. Интересно, что макроклавиши вообще не отображаются в showkeys Journeyman Geek 12 лет назад 0
может быть, этот макро ключ генерирует скан-код только в сочетании с другим ключом. Как скан-код для макроса-1 и т. Д.? ascobol 12 лет назад 0
Похоже, они работают независимо после настройки в Windows. Мне может понадобиться рассмотреть подход более низкого уровня. Я предполагаю, что существует поддержка мышей, созданных той же компанией с помощью [razercfg] (http://bues.ch/cms/hacking/razercfg.html) с использованием нестандартных кодов сканирования. хе. Если бы это было легко, я полагаю, я бы нашел это;) Journeyman Geek 12 лет назад 1
Этот документ не обновлялся с 2002 года. Он все еще актуален? Peter Mortensen 6 лет назад 0
1
Camille Guay

Смотрите Razer Key Mapper для Linux .

Это работает со всеми макросами устройства Razer, учитывая некоторую модификацию кода. Если у вас все еще нет решения, а ваше устройство отсутствует в списке, я буду рад помочь вам настроить его и добавить в список поддерживаемых.

Как это лучше, чем принятый ответ? Toto 6 лет назад 0
Проще, наверное. Предварительно сделал. Осталось только заполнить конфигурационные файлы. Camille Guay 6 лет назад 1