Отримання макро-ключів від Razer BlackWidow для роботи на Linux


49

Я підняв Razer BlackWidow Ultimate, який має додаткові клавіші, призначені для макросів, які встановлюються за допомогою інструменту, встановленого в Windows . Я припускаю, що це не якісь приховані ключі joojoo, і вони повинні випромінювати коди, як і будь-які інші клавіші.

По-перше, чи є стандартний спосіб перевірити ці скан-коди в Linux? По-друге, як мені встановити ці клавіші для виконання завдань у командному рядку та на базі X на установках Linux? Моя поточна установка Linux - це Xubuntu 10.10, але я перейду на Kubuntu, як тільки виправлю кілька речей. В ідеалі відповідь має бути загальною та загальносистемною.

Що я спробував досі:

Те, що мені потрібно спробувати

  • snoopy pro + реверсна інженерія (о дорогий)

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

  • Потрібно перекреслити, що при виведенні lsusb з Linux, у трьох сценаріях: автономному, переданому до VM Windows без встановлених драйверів, і тому ж з.

  • LSUSB виявляє лише один пристрій під час самостійної установки Linux

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

Речі, які я опрацював:

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

  • Драйвер миші бачили в Linux під evdevі lsusbпід

  • Одномісний пристрій під ОС X, мабуть, хоча мені ще спробувати lsusbрівнозначно

  • Клавіатура переходить у режим імпульсного підсвічування в OS X після ініціалізації з драйвером. Це, мабуть, повинно вказувати на те, що є деяка послідовність ініціалізації, що надсилається на клавіатуру при активації.

  • Насправді вони є примхливими ключами joojoo.

Подовжуючи це питання:

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

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

Мінімальний кінцевий результат, який я вимагаю:

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

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


будь ласка, оновіть будь-які рішення, я хотів би досягти того ж!
День Джонатана

Останнім часом я над цим не встиг попрацювати, але я оновлюю це питання тим, що я зробив, поки не отримаю відповідь.
Подорожник Geek

Можливо, відредагуйте, щоб згадати 500 повторень великим шрифтом? Інакше це проголошення не має особливого сенсу (враховуючи 50 репутаційних коштів, зареєстрованих у системі)
Даніель Бек

Це все ще працює для вас? (Я говорю про останню прошивку, згадану нижче Сергієм)
Адоніс К. Какулідіс,

Боюсь, я не тестував цього, я мав намір спробувати рішення сергія, щоб перевірити, чи працює він, але я працював у Windows, як правило, останні кілька місяців для шкільних робіт. Якщо це станеться, я опублікую коментар для цього
Journeyman Geek

Відповіді:


44

M1-M5 насправді є звичайними клавішами - їх просто потрібно спеціально ввімкнути, перш ніж натиснути на них, генеруватиме код сканування. tux_mark_5 розробив невелику програму Haskell, яка надсилає правильне повідомлення SET_REPORT на клавіатури Razer, щоб увімкнути ці клавіші, а екс-папуга переніс такий же код на 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 (немає необхідності в root):

    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, який був необхідний для встановлення необхідної умови пакету uske-пакету haskell до списку необхідних умов. Програмне забезпечення працює без будь-яких модифікацій на моїй стандартній верхівці blackwidow, з ідентифікатором продукту 1532: 010d згідно lsusb. Ключі виявляються на evtest і, здається, є корисними, тому це цілком відповідало вимогам питання.
Подорожник Geek

окрім цього, у kde немає ключового варіанту прив’язки, здається, xbindkeys, здається, працює тхо
Journeyman Geek

з ідентифікатором 10e працює з моєю стандартною чорнобривкою (не остаточною). Я рекомендую додати правило udev, щоб воно почалося автоматично, без проблем, наприклад, зробіть у ньому файл 99-enable-razer-keyboard.rules int /etc/udev/rules.d SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="1532", ATTR{idProduct}=="010e", RUN+="/root/EnableRazer"(тут, можливо, вам доведеться змінити шлях і знову ідентифікатор)
flolo

Мабуть, утиліта, яку я писав, також працює з Razer Anansi. Ось допис у блозі того, хто зняв це: norgelinux.blogspot.com/2012/02/razer-anasi-on-arch-linux.html
tux_mark_5

1
У мене є Razer BlackWidow 2013 (не остаточний), коли я виконую скрипт blackwidow_enable.py (з коренем і без нього), я отримую повідомлення "Blackwidow not found.". Не могли б ви допомогти мені налагодити це? Я на UbuntuGnome 13.04. Здається, що Product_ID відрізняється, і після зміни ідентифікатора продукту я отримую цю помилку:Could not select configuration endpoint.
Адоніс К. Какулідіс,

22

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

"Чарівні байти" програми Haskell у відповіді tux_mark_5 не працюватимуть із останньою прошивкою. Натомість драйвер посилає ці байти під час послідовності ініціалізації: '0200 0403'. Вони включають макро-клавіші, але клавіатура переходить у своєрідний режим, коли замість стандартного HID-протоколу вона надсилає 16-байтові пакети (імовірно, для збільшення кількості клавіш, які можна одночасно натискати). Система HID Linux не може цілком впоратися з цим, і хоча більшість клавіш працює, як очікувалося, макро-клавіші залишаються нерозпізнаними: драйвер 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 () та світлодіодні команди логотипу Razer як бонус :)

#!/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. На жаль, я не можу дати ще одну винагороду за це - частково через те, як працює система Bounty. Я , мабуть, переключуся на правильну відповідь на вашу, якщо це зробить тхо.
Подорожник Geek

мабуть, модуль usb відсутній у моїй системі, тому це не працює: /
Journeyman Geek

Модуль usb, ймовірно, знаходиться в пакеті pyusb (або python-usb чи щось подібне, залежно від дистрибутива).
Сергій

2
Сергій дуже дякую, він працює навіть з новою версією Razer BlackWidow 2013 з PRODUCT_ID = 0x011b. Я ще не намагався встановити жоден макрос, але бачу події, що надходять з / dev / input / by-id / usb-Razer_Razer_BlackWidow_2013-event-kbd, а також у xev :).
binary_runner

Дякую, це чудово. Я використовую це вже кілька років без проблем (нарешті отримав репутацію прокоментувати :)). Один коментар до pyusb: Оскільки Ubuntu досі не постачає pyusb для python 3, мені довелося встановити його вручну з джерела, використовуючиsudo python3 setup.py install
luator

8

Можливо, це може пролити трохи світла на цю проблему (з сторінки показу виставки):

У режимі сировини 2.6 ядра або режимі сканування коду взагалі не дуже сильно. Коди сканування спочатку перекладаються на ключові коди, а коли потрібні коди сканування, коди ключів переводяться назад. Задіяні різні перетворення, і зовсім немає гарантії того, що кінцевий результат відповідає тому, що апаратне забезпечення клавіатури надіслало. Отже, якщо ви хочете знати коди сканування, що надсилаються різними ключами, краще завантажувати ядро ​​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 для зйомки сировини працює як на мишах з алмазним зворотом, так і на пристрої 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

Мені цікаво, як надіслати цю інформацію на пристрої миші та миші. подібна миша, здається, несе відповідальність, оскільки вона пов'язана з обробником подій на клавіатурі. Я маю на увазі, що теоретично все, що потрібно, - це ініціалізувати пристрій та встановити належну карту сканування-> клавішного коду з setkeycode і ittl підбирати події як звичайні натискання клавіш.
srmaddox

Можливо, я можу просто відкрити затемнення і написати програму, щоб дозволити вхід / вихід в / з пристрою. Тоді спроба та помилка можуть переважати.
srmaddox

jespersaur.com/drupal/book/export/html/21 це повинно представляти інтерес, якщо йде процес. Це далеко поза моїм набором майстерності.
Подорожник Geek

7

Моє рішення стосується механічної ігрової клавіатури Razer BlackWidow 2013 (Номер моделі: RZ03-0039) та була протестована на openSUSE 12.3.

Я використовував Google Translate за цим посиланням .

В основному для цього питання використовується модифікована версія відповіді @ Сергія , але з простими модифікаціями:

  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{idVendor}=="1532", ATTR{idProduct}=="011b", RUN+="/usr/local/sbin/init_blackwidow.py"

Де ви знайшли копію pyusb, яка має usb.util?
KayEss

@KayEss, я використовую python-usb-1.0.0-21.1.noarch.rpm. IIRC - це частина постійних сховищ 0penSUSE 12.3. Згідно з даними rpm -qi, джерело знаходиться на sourceforge.net/projects/pyusb, а джерело пакета знаходиться на obs: //build.opensuse.org/devel: languages: python
Chen Levy

Я перебуваю на Ubuntu, і на цьому немає жодної упакованої версії для python3. Тоді у мене виникли проблеми з отриманням всього рядка sudo, python3, pip та virtualenv, але це зараз відсортовано, і я бачу коди для макро-клавіш.
KayEss

1
@KayEss, для Ubuntu 14.04 я використав інструкції від: github.com/walac/pyusb . Зокрема: sudo apt-get install python libusb-1.0-0sudoіpip install pyusb --pre
Чен Леві

2

Можливо, цей документ вам допоможе:

Клавіатура та консоль Linux HOWTO , Корисні програми


це початок, і варто внести внесок. Цікаво, що макро-клавіші взагалі не відображаються у вітринах
Journeyman Geek

можливо, цей макро-ключ видає код сканування лише в поєднанні з іншим ключем. Як скан-код для макро-1 тощо?
ascobol

1
Вони, здається, працюють незалежно, налаштовуючись у Windows. Можливо, мені доведеться розглянути підхід нижчого рівня. Я здогадуюсь, оскільки існує підтримка мишей, створена тією ж компанією, що і razercfg використовує нестандартні сканоди . хе. Якби це було легко, я гадаю, я би його знайшов;)
Подорожник Geek

Цей документ не оновлювався з 2002 року. Він все ще актуальний?
Пітер Мортенсен

1

Див. Розділ Razer Key Mapper для Linux .

Це працює з усіма макросами пристрою Razer, враховуючи деяку модифікацію коду. Якщо у вас все ще немає рішення, і ваш пристрій не вказаний у списку, я радий допомогти вам налаштувати свій пристрій і додати його до мого списку, що підтримується.


Як це краще, ніж прийнята відповідь?
Тото

1
Простіше я здогадуюсь. Попередньо зроблений. Залишилося лише заповнити конфігураційні файли.
Camille Guay
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.