Linuxで動作するRazer BlackWidowからマクロキーを取得する


49

Windowsにインストールされているツールを使用して設定されるマクロ用の追加キーを持つRazer BlackWidow Ultimateを選びました。私はこれらがいくつかの派手なjoojooキーではなく、他のキーと同じようにスキャンコードを出力するはずだと仮定しています。

まず、Linuxでこれらのスキャンコードをチェックする標準的な方法はありますか?第二に、これらのキーを設定して、コマンドラインおよびXベースのLinuxセットアップで操作を行うにはどうすればよいですか 私の現在のLinuxインストールはXubuntu 10.10ですが、いくつかの問題を修正したらKubuntuに切り替えます。理想的には、答えは汎用的でシステム全体である必要があります。

私が今までに試したこと:

私が試す必要があるもの

  • スヌーピープロ +リバースエンジニアリング(あぁ)

  • Wireshark-予備的なふらつきは、キーボードが監視され、キーが押されていると思われるときにスキャンコードが出力されないことを示しているようです。追加のキーが別のデバイスであるか、何らかの方法で初期化する必要があることを示す場合があります。

  • Linuxからのlsusb出力で、3つのシナリオでそれを相互参照する必要があります:スタンドアロン、ドライバーがインストールされていないWindows VMにパススルーされ、同じです。

  • LSUSBは、スタンドアロンLinuxインストールで1つのデバイスのみを検出します

  • マウスが同じRazer Synapseドライバーを使用しているかどうかを確認すると便利な場合があります。これは、razercfgのいくつかのバリエーションが機能する可能性があることを意味します(検出されず、マウスでのみ機能するようです)

私が解決したこと:

  • ドライバーを備えたWindowsシステムでは、キーボードはキーボードポインティングデバイスとして認識されます。ポインティングデバイスは、標準のマウスドライバーに加えて、Razer Synapseと呼ばれるもののドライバーを使用します。

  • 下のLinuxで見られるマウスドライバevdevlsusbうまくとして

  • どうやらOS Xでの単一のデバイスですが、それにlsusb相当するものはまだ試していません

  • キーボードは、ドライバーでの初期化時にOS Xでパルスバックライトモードになります。これはおそらく、起動時にキーボードに送信される初期化シーケンスがあることを示しているはずです。

  • 実際、それらはファンシーパンツジョジョキーです。

この質問を少し拡張します。

Windowsシステムにアクセスできるので、質問に答えるためにツールを使用する必要がある場合は問題ありません。configユーティリティを使用するシステムと使用しないシステムで試すこともできます。ただし、期待される最終結果は、これらのキーをLinuxで使用できるようにすることです。

また、これが非常に特殊なハードウェアファミリであることも認識しています。詳細な指示があれば、Linuxシステムで理にかなっていることなら何でもテストできます。これにより、Linuxのスキルはあるがこのキーボードにアクセスできない人に質問が開かれるはずです。

最低限必要な最終結果:

私は、これらのキーが検出された必要があり、中に使用可能な任意の Ubuntuはバリアント現在のグラフィカル主流のいずれかのファッション、そして自然に私のキーボードと仕事をしなければなりません。仮想Cookieとマッドプロップは、平均的なユーザーが適切にパッケージ化して使用できるものである場合に使用します。

私はコンパイル私のシステム上で動作するコード、または(それよりも複雑だ場合の命令で私がコンパイルできることをソースが必要になります./configuremakemake install)の場合ではなく、現在のLTSかの時点での標準的なデスクトップリリースのUbuntuのリポジトリに追加のソフトウェア答え。また、複製するには十分な情報が必要であり、自分のシステムでキーを正常に使用します。


ソリューションを更新してください、私は同じことを達成したいと思います!
ジョナサン日

私は最近それに取り組む時間は本当にありませんでしたが、答えが得られるまで、私がやったことでこの質問を更新します。
ジャーニーマンオタク

たぶん、大きなフォントで500担当者に言及するように編集しますか?それ以外の場合、その宣言はあまり意味がありません(システムに登録されている50人の担当者に報奨金を与えた場合)
ダニエルベック

これはまだあなたのために働きますか?(私はセルゲイによって以下に記載されている最新のファームウェアについて話している)
アドニスK. Kakoulidis

私はそれをテストしていません、私は恐れています、私はそれが機能するかどうかを確認するためにセルゲイのソリューションを試すことを意味していましたが、私はほとんど学校の仕事のために過去数ヶ月間窓を走らせてきました。もしそうなら、その旨のコメントを投稿します
ジャーニーマンオタク

回答:


44

M1-M5は実際には通常のキーです-押すとスキャンコードが生成される前に、それらを特別に有効にする必要があります。tux_mark_5は、Razerキーボードに正しいSET_REPORTメッセージを送信してこれらのキーを有効にする小さなHaskellプログラムを開発し、同じコードをPythonにex-parrotで移植しました。

Arch Linuxシステムでは、Pythonポートがパッケージ化されており、https://aur.archlinux.org/packages.php?ID = 60518から入手できます

DebianまたはUbuntuシステムでは、コードのPythonポートのセットアップは比較的簡単です。PyUSBとlibusbを(rootとして)インストールする必要があります:

    aptitude install python-usb

次にblackwidow_enable.pyhttp://finch.am/projects/blackwidow/からファイルを取得して実行します(rootとしても):

    chmod +x blackwidow_enable.py
    ./blackwidow_enable.py

これにより、キーボードのプラグを抜くか、マシンを再起動するまでキーが有効になります。これを永続的にするには、どのスタイルの起動スクリプトからでも最も好きなスクリプトを呼び出します。Debianでこれを設定する方法については、Debianのドキュメントをご覧ください。

tux_mark_5のHaskellコードを使用するには、Haskellをインストールし、自分でコードをコンパイルする必要があります。これらの手順は、Debianライクシステム(Ubuntuを含む)向けです。

  1. GHC、libusb-1.0-0-devおよびcabalを(ルートとして)インストールします。

    aptitude install ghc libusb-1.0-0-dev cabal-install git pkg-config
    
  2. パッケージのリストを取得します。

    cabal update
    
  3. HaskellのUSBバインディングをインストールします(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の製品IDを変更する必要がある場合があります。

withDevice 0x1532 0x<HERE GOES YOUR KEYBOARD's PRODUCT ID> $ \dev -> do

これはうまくいきます。システムで許可されている場合は、1〜2日で500人の担当者を獲得できます。haskell usbパッケージの前提条件を前提条件のリストにインストールするために必要なpkg-configを追加する自由を取りました。このソフトウェアは、lsusbによると、製品IDが1532:010dで、私の標準のblackwidow ultimateをまったく変更することなく動作します。キーはevtestで検出され、使用可能であるように見えるため、これは質問の要件を完全に満たしています。
ジャーニーマンオタク

さらに、kdeにはキーバインドオプションがないようです。xbindkeysは動作するようです
Journeyman Geek

ID 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"します(ここで、パスとIDをもう一度)
フローロ

私が書いたユーティリティはRazer Anansiでも動作するようです。これを実行した人のブログ投稿は次のとおり
2012

1
Razer BlackWidow 2013(最終版ではありません)を使用しています。blackwidow_enable.pyスクリプトを実行すると(rootの有無にかかわらず)、「Blackwidow not found。」というメッセージが表示されます。これのデバッグを手伝ってもらえますか?UbuntuGnome 13.04を使用しています。PRODUCT_IDが異なっているように思えるとプロダクトIDを変更した後、私は今、このエラーを取得:Could not select configuration endpoint.
アドニスK. Kakoulidis

22

Razerは現在、クラウドベースのSynapse 2コンフィギュレーターをすべてのユーザーに強制しているようで、それに伴ってバージョン2. *へのファームウェアアップグレードが行われています。ファームウェアをアップグレードすると、元に戻すことはできません(古いファームウェアでフラッシュしようとすると、キーボードは完全にブリックされます)。

tux_mark_5の回答にあるHaskellプログラムの「マジックバイト」は、最新のファームウェアでは機能しません。代わりに、ドライバーは初期化シーケンス中にこれらのバイトを送信します: '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でタスクを実行するために書いた非常にラフで汚いプログラムです。blackwidow.bwcmd()でRazerコントロールパケットを生成するコードと、ボーナスとしてRazerロゴLEDコマンドに注意してください:)

#!/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システムを再び使用できるようになったら、試してみます。残念なことに、私はこれに別の報奨金を与えることはできません-報奨金制度がどのように機能するかに一部起因します。私はされます、それはカントーを行う場合は、おそらくあなたに正しい答えを切り替えます。
ジャーニーマンオタク

私のシステムにはモジュールusbがないようです。これは機能しません:/
Journeyman Geek

usbモジュールはおそらくpyusbパッケージ(またはディストリビューションに応じてpython-usbなど)に含まれています。
セルゲイ

2
セルゲイ、ありがとうございます。PRODUCT_ID= 0x011bの新しいRazer BlackWidow 2013でも動作します。私はまだマクロを設定しようとしませんでしたが、/ dev / input / by-id / usb-Razer_Razer_BlackWidow_2013-event-kbdおよびxevからのイベントが表示されます:)。
binary_runner 14年

ありがとう、これは素晴らしい。私は何年も問題なくこれを何年も使用しています(最終的にコメントする評判を得ました:))。pyusbに関する1つのコメント:Ubuntuはまだpython 3のpyusbを出荷していないので、使用してソースから手動でインストールする必要がありましたsudo python3 setup.py install
-luator

8

おそらくこれは、問題にいくつかの光を当てる可能性があります(showkeyのマンページから)。

2.6カーネルでは、rawモード、またはスキャンコードモードはまったく生ではありません。スキャンコードは最初にキーコードに変換され、スキャンコードが必要な場合はキーコードが元に戻されます。さまざまな変換が行われ、最終結果がキーボードハードウェアが送信したものに対応するという保証はまったくありません。したがって、さまざまなキーによって送信されたスキャンコードを知りたい場合は、2.4カーネルを起動することをお勧めします。2.6.9以降では、2.6カーネルに実際のスキャンコードを返すように指示するブートオプションatkbd.softraw = 0もあります。

rawスキャンコードは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についてはあまり知らないので、これが理にかなっているかどうかさえ知りません。おそらく最初にバインドする必要がありますか?

さて、3つのブラックウィドウデバイスはすべてに記載され/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では、キーボードが「パルス」ライトモードになります。キーボードマクロキーの作業の前に必要ないくつかの初期化は、おそらくあります
ジャーニーマンオタク

私が思っているのは、その情報をマウスとイベントマウスデバイスに送信する方法です。キーボードイベントハンドラにバインドされているため、イベントマウスが原因のようです。つまり、理論的には、デバイスを初期化し、setkeycodeを使用して適切なscancode-> keycodeマップをセットアップし、通常のキーストロークとしてイベントを取得するだけです。
srmaddox

たぶん、私は単に日食を開いて、デバイスへの生の入出力を許可するプログラムを書くことができます。その後、試行錯誤が行われます。
srmaddox

jespersaur.com/drupal/book/export/html/21これは、プロセスが進む限り興味深いものです。私のスキルセットをはるかに超えています。
ジャーニーマンオタク

7

私のソリューションはRazer BlackWidow 2013メカニカルゲーミングキーボード(モデル番号:RZ03-0039)向けであり、openSUSE 12.3でテストされました。

このリンクで Google翻訳を使用しました。

基本的に、この質問に対する@Sergeyの回答の修正バージョンを使用しますが、簡単な修正を行います。

  1. 僕の PRODUCT_ID = 0x011b

  2. 私は削除することでPythonの2で動作するように、このスクリプトを変換するので、私のopenSUSE 12.3には、のpython-USBは、Pythonの3のために利用できない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にあります
チェンレヴィ14

私はUbuntuを使っていますが、その上にpython3のパッケージバージョンはありません。sudo、python3、pip、virtualenvのすべてを1行で取得するのに少し苦労していましたが、今ではソートされており、マクロキーのコードが表示されています。
KayEss 14

1
@ KayEss、Ubuntu 14.04の場合、github.com / walac / pyusbの手順を使用しました。特に:sudo apt-get install python libusb-1.0-0sudopip install pyusb --pre
陳レビー

2

たぶん、このドキュメントはあなたを助けるでしょう:

LinuxキーボードとコンソールHOWTO便利なプログラム


その始まりであり、賛成に値する。興味深いことに、マクロキーはショーキーにまったく表示されませ
ジャーニーマンオタク

このマクロキーは、別のキーと組み合わせてスキャンコードのみを送信する場合があります。マクロ-1などのスキャンコードのように?
ascobol

1
これらは、Windowsで設定されると独立して動作するようです。低レベルのアプローチを検討する必要があるかもしれません。私の推測では、razercfgで非標準のスキャンコードを使用して同じ会社が作ったマウスをサポートしているからです。へえ。それが簡単だった場合、私はそれを見つけたと思う;)
ジャーニーマンオタク

このドキュメントは2002年以降更新されていません。まだ最新ですか?
ピーターモーテンセン

1

Linux用Razer Key Mapperを参照してください。

これは、コードの変更があれば、すべてのRazerデバイスのマクロで機能します。それでも解決策がなく、デバイスがリストにない場合は、デバイスの構成とサポートされているリストへの追加をお手伝いさせていただきます。


これは受け入れられた答えよりも優れていますか?
トト

1
簡単だと思います。既製。あとは、設定ファイルを入力するだけです。
カミーユグエイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.