लिनक्स पर काम करने के लिए एक रेज़र ब्लैकविडो से मैक्रो कीज़ प्राप्त करना


49

मैंने एक रेज़र ब्लैकविडो अल्टिमेट उठाया , जिसमें मैक्रो के लिए अतिरिक्त कुंजी है जो कि विंडोज पर इंस्टॉल किए गए टूल का उपयोग करके सेट किया गया है । मुझे लगता है कि ये कुछ fancypants joojoo चाबियाँ नहीं हैं और किसी भी अन्य कुंजी की तरह scancodes का उत्सर्जन करना चाहिए।

सबसे पहले, लिनक्स में इन स्कैकोड को जांचने का एक मानक तरीका है? दूसरी बात, मैं इन कुंजियों को कमांड लाइन और एक्स-आधारित लिनक्स सेटअप में काम करने के लिए कैसे निर्धारित करूं? मेरा वर्तमान लिनक्स इंस्टाल Xubuntu 10.10 है, लेकिन एक बार कुछ चीजें तय हो जाने के बाद मैं कुबुंटु में जाऊंगा। आदर्श रूप से उत्तर सामान्य और सिस्टम-वाइड होना चाहिए।

मैंने अब तक जिन चीजों की कोशिश की है:

चीजें जो मुझे आजमाने की जरूरत है

  • Snoopy समर्थक + रिवर्स इंजीनियरिंग (ओह प्रिय)

  • Wireshark - चारों ओर प्रारंभिक फेनिंग से लगता है कि जब मुझे लगता है कि कीबोर्ड की निगरानी की जाती है और कुंजी दबाया जाता है, तो कोई भी स्कैन नहीं किया जाता है। संकेत कर सकते हैं कि अतिरिक्त कुंजी एक अलग उपकरण है या किसी तरह से आरंभ करने की आवश्यकता है।

  • संदर्भ को पार करने की आवश्यकता है कि लिनक्स से तीन परिदृश्यों में lsusb आउटपुट के साथ: स्टैंडअलोन, स्थापित किए गए ड्राइवरों के बिना विंडोज वीएम के माध्यम से पारित हो गया, और उसी के साथ।

  • LSUSB केवल स्टैंडअलोन लिनक्स इंस्टाल पर एक डिवाइस का पता लगाता है

  • यह जाँचने के लिए उपयोगी हो सकता है कि क्या चूहे एक ही रेज़र सिनैप्स ड्राइवर का उपयोग करते हैं, क्योंकि इसका मतलब है कि रेजरचफ की कुछ भिन्नता काम कर सकती है (पता नहीं, केवल चूहों के लिए काम करती है)

जिन चीजों पर मैंने काम किया है:

  • ड्राइवर के साथ एक विंडोज सिस्टम में, कीबोर्ड को एक कीबोर्ड और एक पॉइंटिंग डिवाइस के रूप में देखा जाता है। पॉइंटिंग डिवाइस का उपयोग किया जाता है - अपने दलदल के मानक माउस ड्राइवरों के अलावा - एक ड्राइवर के लिए जिसे रेज़र सिनेप्स कहा जाता है।

  • माउस चालक लिनक्स में evdevऔर lsusbसाथ ही साथ देखा गया

  • जाहिरा तौर पर ओएस एक्स के तहत एकल उपकरण, हालांकि मेरे पास अभी तक इसके lsusbबराबर प्रयास करने के लिए नहीं है

  • चालक के साथ आरम्भ करने पर कीबोर्ड OS X में बैकलाइट मोड को स्पंदित करता है। यह संभवतः इंगित करना चाहिए कि सक्रियण पर कीबोर्ड को भेजे गए कुछ प्रारंभिक अनुक्रम हैं।

  • वे वास्तव में, fancypants joojoo चाबियाँ हैं।

इस प्रश्न को थोड़ा विस्तार देना:

मेरे पास एक विंडोज सिस्टम तक पहुंच है, इसलिए यदि मुझे इस सवाल का जवाब देने में मदद करने के लिए किसी भी उपकरण का उपयोग करने की आवश्यकता है, तो यह ठीक है। मैं यह भी विन्यास उपयोगिता के साथ और बिना सिस्टम पर कोशिश कर सकते हैं। हालाँकि, अपेक्षित अंतिम परिणाम अभी भी उन कुंजियों को लिनक्स पर प्रयोग करने योग्य बनाना है।

मुझे यह भी एहसास है कि यह हार्डवेयर का एक बहुत विशिष्ट परिवार है। मैं कुछ भी परीक्षण करने के लिए तैयार होऊंगा जो कि लिनक्स सिस्टम पर समझ में आता है यदि मेरे पास विस्तृत निर्देश हैं - तो यह उन लोगों के लिए सवाल खोलना चाहिए जिनके पास लिनक्स कौशल है, लेकिन इस कीबोर्ड तक कोई पहुंच नहीं है।

न्यूनतम अंतिम परिणाम मुझे चाहिए:

मुझे इन कुंजियों की आवश्यकता है, और किसी भी फैशन में वर्तमान ग्राफिकल मुख्यधारा उबंटू के किसी भी संस्करण में प्रयोग करने योग्य है , और स्वाभाविक रूप से मेरे कीबोर्ड के साथ काम करना है। आभासी कुकी और पागल सहारा अगर यह कुछ अच्छी तरह से पैक और औसत उपयोगकर्ता द्वारा प्रयोग करने योग्य है।

मुझे संकलित कोड की आवश्यकता होगी जो मेरे सिस्टम पर काम करेगा, या एक स्रोत जिसे मैं संकलित कर सकता हूं (निर्देशों के साथ अगर यह अधिक जटिल है ./configure, तो) make, make installयदि वर्तमान एलटीएस या मानक डेस्कटॉप रिलीज के समय उबंटू रिपॉजिटरी पर अतिरिक्त सॉफ़्टवेयर नहीं। उत्तर। मुझे दोहराने के लिए पर्याप्त जानकारी की भी आवश्यकता होगी, और अपने सिस्टम पर कुंजियों का सफलतापूर्वक उपयोग करने के लिए।


कृपया किसी भी समाधान के साथ अद्यतन करें, मुझे वही प्राप्त करना अच्छा लगेगा!
जोनाथन डे

मैं वास्तव में हाल ही में इस पर काम करने का समय नहीं है, लेकिन मैं इस सवाल को अद्यतन कर रहा हूँ जो कुछ भी मैंने किया है, जब तक कि मुझे जवाब नहीं मिलता।
यात्रा करने वाला गीक

शायद बड़े फ़ॉन्ट में 500 प्रतिनिधि का उल्लेख करने के लिए संपादित करें? अन्यथा कि घोषणा ज्यादा मतलब नहीं है (दिए गए 50 प्रतिनिधि प्रणाली के साथ पंजीकृत इनाम)
डैनियल बेक

क्या यह अभी भी आपके लिए काम करता है? (मैं सर्गेई द्वारा नीचे बताए गए नवीनतम फर्मवेयर के बारे में बात कर रहा हूं)
एडोनिस के। काकोलीडिस

मैंने इसका परीक्षण नहीं किया है, मुझे डर है, मुझे लगता है कि अगर यह काम करता है, तो सेर्गेई के समाधान की कोशिश करने का मतलब है, लेकिन मैं पिछले कुछ महीनों से ज्यादातर स्कूलवर्क के लिए खिड़कियां चला रहा हूं। यदि ऐसा है, मुझे लगता है कि प्रभाव के लिए एक टिप्पणी पोस्ट करेंगे
जर्नीमैन गीक

जवाबों:


44

M1-M5 वास्तव में नियमित कुंजी हैं - उन्हें केवल विशेष रूप से सक्षम करने की आवश्यकता होती है, इससे पहले कि उन्हें दबाने से एक स्केनोड उत्पन्न हो। tux_mark_5 ने एक छोटा Haskell प्रोग्राम विकसित किया है जो इन कीज़ को सक्षम करने के लिए रेज़र कीबोर्ड को सही SET_REPORT संदेश भेजता है और पूर्व-तोता ने समान कोड को पायथन में पोर्ट किया।

आर्क लिनक्स सिस्टम में पायथन पोर्ट को पैक कर दिया गया है और यह https://aur.archlinux.org/packages.php?ID=60518 से उपलब्ध है ।

डेबियन या उबंटू सिस्टम पर कोड के पायथन पोर्ट को स्थापित करना अपेक्षाकृत आसान है। आपको PyUSB और libusb (रूट के रूप में) स्थापित करने की आवश्यकता है:

    aptitude install python-usb

फिर http://finch.am/projects/blackwidow/blackwidow_enable.py से फ़ाइल को पकड़ो और इसे निष्पादित करें (रूट के रूप में भी):

    chmod +x blackwidow_enable.py
    ./blackwidow_enable.py

यह कीबोर्ड के अनप्लग होने या मशीन के रिबूट होने तक कीज़ को सक्षम करेगा। स्टार्टअप स्क्रिप्ट की जो भी शैली आप सबसे अधिक पसंद करते हैं, उससे इस स्थायी कॉल को स्क्रिप्ट बनाने के लिए। कैसे डेबियन में स्थापित करने के निर्देश के लिए डेबियन प्रलेखन पर एक नज़र है ।

Tux_mark_5 के Haskell कोड का उपयोग करने के लिए आपको Haskell को इंस्टॉल करना होगा और कोड को स्वयं संकलित करना होगा। ये निर्देश डेबियन जैसी प्रणाली (उबंटू सहित) के लिए हैं।

  1. GHC, libusb-1.0-0-dev और केबलल (रूट के रूप में) स्थापित करें:

    aptitude install ghc libusb-1.0-0-dev cabal-install git pkg-config
    
  2. पैकेजों की सूची प्राप्त करें:

    cabal update
    
  3. हास्केल के लिए USB बाइंडिंग स्थापित करें (रूट की कोई आवश्यकता नहीं):

    cabal install usb
    
  4. उपयोगिता डाउनलोड करें:

    git clone git://github.com/tuxmark5/EnableRazer.git
    
  5. उपयोगिता का निर्माण करें:

    cabal configure
    cabal build
    
  6. उपयोगिता चलाएँ (रूट के रूप में भी):

    ./dist/build/EnableRazer/EnableRazer
    

इसके बाद आप EnableRazer बाइनरी को कहीं भी कॉपी कर सकते हैं जिसे आप चाहते हैं और इसे स्टार्टअप पर चला सकते हैं।

निष्पादन के तुरंत बाद, X ​​सर्वर को M1 को XF86Launch5 के रूप में M1, XF86Launch6 के रूप में M3, XF86Launch7 के रूप में M4 और XF86Launch8 के रूप में M5 के रूप में देखना चाहिए। एफएन के लिए घटनाओं को भी उत्सर्जित किया जाता है।

ये कुंजियाँ xbindkeys या KDE की सिस्टम सेटिंग में मनमाने कार्यों के लिए बाध्य हो सकती हैं।

चूंकि आपका कीबोर्ड अलग हो सकता है, इसलिए आपको मुख्य आईडी 64 लाइन में उत्पाद आईडी बदलने की आवश्यकता हो सकती है:

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

यह काम करता है, अच्छा जा रहा है। आपको एक या दो दिन में 500 प्रतिनिधि मिल जाएंगे, जब सिस्टम मुझे अनुमति देता है। मैंने pkg-config को जोड़ने की स्वतंत्रता ली है, जिसे आवश्यक शर्तें की सूची में हैस्केल यूएसबी पैकेज की पूर्व शर्त स्थापित करने की आवश्यकता थी। यह सॉफ्टवेयर मेरे मानक ब्लैकविडो अल्टिमेट पर कोई संशोधन के साथ काम करता है, 1532: 010d के उत्पाद आईडी के साथ lsusb के अनुसार। कुंजी स्पष्ट रूप से पहचानी जाती हैं और प्रयोग करने योग्य प्रतीत होती हैं, इसलिए यह प्रश्न की आवश्यकताओं को पूरी तरह से पूरा करती है।
जर्नीमैन गीक

इसके अलावा, केडीई dosen't एक महत्वपूर्ण बाध्यकारी विकल्प ऐसा लगता है, xbindkeys यद्यपि काम करने लगता है है
जर्नीमैन गीक

आईडी 10e के साथ यह मेरे मानक ब्लैकविडो (गैर-परम) के साथ काम करता है। मैं एक udev नियम जोड़ने की सलाह देता हूं, इसलिए यह बिना किसी समस्या के स्वचालित रूप से प्रारंभ हो जाता है, उदाहरण के लिए, इसमें एक फ़ाइल 99-सक्षम-रेज़र-कीबोर्ड .rules int /etc/udev/rules.d बनाते हैं SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="1532", ATTR{idProduct}=="010e", RUN+="/root/EnableRazer"(यहां आपको संशोधित करना पड़ सकता है) पथ और आईडी फिर से)
फ्लो

जाहिर तौर पर मैंने जो उपयोगिता लिखी, वह रेजर अनंसी के साथ भी काम करती है। यहाँ किसी ऐसे व्यक्ति का ब्लॉग पोस्ट दिया गया है, जिसने इसे बंद कर दिया है: norgelinux.blogspot.com/2012/02/razer-asi-on-arch-linux.html
tux_mark_5

1
मेरे पास Razer BlackWidow 2013 (अंतिम एक नहीं) है, जब मैं blackwidow_enable.py स्क्रिप्ट (बिना और रूट के) निष्पादित करता हूं, तो मुझे संदेश "Blackwidow नहीं मिला।" मिलता है। क्या आप कृपया मुझे इस डिबग में मदद कर सकते हैं? मैं UbuntuGnome 13.04 पर हूं। ऐसा लगता है कि Product_ID अलग है और उत्पाद ID बदलने के बाद, मुझे अब यह त्रुटि मिली:Could not select configuration endpoint.
Adonis K. Kakoulidis

22

रेजर आजकल सभी उपयोगकर्ताओं पर अपने क्लाउड-आधारित Synapse 2 विन्यासकर्ता को मजबूर करने के लिए मजबूर कर रहा है, साथ में संस्करण 2 में फर्मवेयर अपग्रेड 2. *। एक बार जब आप फर्मवेयर को अपग्रेड कर लेते हैं, तो आप वापस नहीं जा सकते हैं (यदि आप पुराने फर्मवेयर के साथ फ्लैश करने की कोशिश करते हैं तो कीबोर्ड पूरी तरह से ईंट हो जाता है)।

Tux_mark_5 के उत्तर में हास्केल कार्यक्रम से 'मैजिक बाइट्स' नवीनतम फर्मवेयर के साथ काम नहीं करेगा। इसके बजाय, ड्राइवर इन बाइट्स को आरंभीकरण अनुक्रम के दौरान भेजता है: '0200 0403'। ये मैक्रो कुंजियों को सक्षम करते हैं, लेकिन कीबोर्ड एक अजीब मोड में प्रवेश करता है जिसमें मानक एचआईडी प्रोटोकॉल के बजाय यह 16-बाइट पैकेट भेजता है (संभवतः एक साथ दबाए जाने वाले कुंजी की संख्या को बढ़ाने के लिए)। लिनक्स छिपाई प्रणाली इस से काफी सामना नहीं कर सकती है, और जबकि अधिकांश कुंजियाँ अपेक्षा के अनुरूप काम करती हैं, मैक्रो कुंजियाँ अपरिचित रहती हैं: छिपाई हुई चालक इनपुट परत पर कोई भी डेटा नहीं दबाती है जब उन्हें दबाया जाता है।

अपने कीबोर्ड को विरासत मोड में प्रवेश करने के लिए (जिसमें मैक्रो कुंजियाँ 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

यहाँ एक बहुत ही मोटा और गंदा कार्यक्रम है जिसे मैंने कार्य करने के लिए कम गूढ़ पायथन 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()

मेरा कीबोर्ड अपग्रेड हो गया और मैंने अभी तक इसकी कोशिश नहीं की है। जब मुझे फिर से एक उचित लिनक्स सिस्टम मिलेगा तो मैं इसे एक शॉट दूँगा। दुर्भाग्य से मैं इसके लिए एक और इनाम नहीं दे सकता - इस भाग के कारण कि बाउंटी सिस्टम कैसे काम करता है। मैं होगा शायद तुम्हारा का सही उत्तर पर स्विच अगर यह यद्यपि है।
जर्नीमैन गीक

जाहिरा तौर पर मॉड्यूल यूएसबी अपने सिस्टम पर नहीं है, ताकि यह काम नहीं करता: /
जर्नीमैन गीक

USB मॉड्यूल शायद pyusb पैकेज (या अजगर-यूएसबी या कुछ इसी तरह के डिस्ट्रो पर निर्भर करता है) में है।
सर्गेई

2
सर्गेई आपको बहुत बहुत धन्यवाद, यह Product_ID = 0x011b के साथ नए Razer BlackWidow 2013 में भी काम करता है। मैंने अभी तक कोई मैक्रो सेट करने की कोशिश नहीं की है, लेकिन मैं / dev / input / by-id / usb-Razer_Razer_BlackWidow_2013-event-kbd और xev में भी आने वाली घटनाओं को देखता हूं।
बाइनरी_रूनर

धन्यवाद, यह बहुत अच्छा है। मैं कुछ वर्षों से बिना किसी परेशानी के इसका उपयोग कर रहा हूं (अंत में टिप्पणी करने के लिए प्रतिष्ठा मिली :))। Pyusb पर एक टिप्पणी: चूंकि उबंटू अभी भी अजगर 3 के लिए pyusb जहाज नहीं करता है, मुझे इसे मैन्युअल रूप से स्रोत से उपयोग करके स्थापित करना था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 कर्नेल पैरामीटर का उपयोग नहीं किया जाता है। जब कच्चे स्कैन कोड उपलब्ध नहीं होते हैं, तो कर्नेल एक निश्चित अंतर्निहित तालिका में कीकोड से स्कैन कोड बनाने के लिए उपयोग करता है। इस प्रकार, सेटकीकोड (8) स्कैन कोड डंप मोड में शोकी के उत्पादन को प्रभावित कर सकता है।

मैं यह देखने वाला हूं कि क्या बूट विकल्प सेट होने के बाद शोकी मैक्रो कीज के साथ कुछ भी डंप करेगा।

EDIT: रिबूट के बाद, कोई सफलता नहीं मिली, लेकिन मैं स्वयं USB उपकरणों से कच्चे इनपुट पर कब्जा करना चाह रहा था। मैंने निम्नलिखित उल्लेख किया, दिलचस्प है (मेरे पास एक रेजर डायमंडबैक और साथ ही ब्लैकविडो भी है):

[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 का उपयोग दोनों हीबैकबैक चूहों पर, इवेंट-kbd डिवाइस पर, लेकिन ब्लैकविडो माउस डिवाइसों पर नहीं, पर कच्चे इनपुट काम करता है।

मैं अनुमान लगा रहा हूं कि वे किसी भी आउटपुट को तब तक उत्पन्न नहीं करते जब तक कि किसी भी तरह से ड्राइवरों को सक्रिय न किया जाए। मैं हालांकि लिनक्स यूएसबी के बारे में ज्यादा नहीं जानता, इसलिए मुझे यह भी नहीं पता कि यह समझ में आता है या नहीं। शायद उन्हें पहले बाध्य होने की आवश्यकता है?

ठीक है, सभी तीन काली विधवा उपकरणों में उल्लेख कर रहे हैं /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]# 

मैं अनुमान लगा रहा हूं कि सिस्टम को उन्हें आरंभ करने के लिए कीबोर्ड के साथ संवाद करना होगा - ओएस एक्स के साथ, मेरे कीबोर्ड को 'स्पंदन' प्रकाश मोड में फेंक दिया गया है। कीबोर्ड मैक्रो कुंजियों के काम करने से पहले संभवतः कुछ प्रारंभिककरण की आवश्यकता होती है
जर्मान

मैं सोच रहा था कि माउस और इवेंट-माउस डिवाइसों को वह जानकारी कैसे भेजें। ईवेंट-माउस एक कीबोर्ड ईवेंट हैंडलर के लिए बाध्य होने के बाद से जिम्मेदार लगता है। मेरा मतलब है, सैद्धांतिक रूप से, सभी को डिवाइस को इनिशियलाइज़ करना होगा और उचित स्कैन्कोड को सेट करना होगा-> सेटकीकोड के साथ कीकोड मैप और सामान्य कीस्ट्रोक्स के रूप में ईवेंट को पिक करना।
1

शायद मैं सिर्फ ग्रहण खोल सकता हूं और डिवाइस से / में / बाहर कच्चे अनुमति देने के लिए एक कार्यक्रम लिख सकता हूं। तब परीक्षण और त्रुटि प्रबल हो सकती है।
1

jespersaur.com/drupal/book/export/html/21 प्रक्रिया के जाने तक यह रुचि होनी चाहिए। यह मेरे कौशल से परे है।
जर्नीमैन गीक

7

मेरा समाधान रेजर ब्लैकविडो 2013 मैकेनिकल गेमिंग कीबोर्ड (मॉडल संख्या: RZ03-0039) के लिए है और इसका परीक्षण ओपनएसयूएसयूएस 12.3 पर किया गया था।

मैंने इस लिंक पर Google Translate का उपयोग किया ।

मूल रूप से यह इस प्रश्न के लिए @ सर्गेई के उत्तर के संशोधित संस्करण का उपयोग करता है , लेकिन सरल संशोधनों के साथ:

  1. मेरे PRODUCT_ID = 0x011b

  2. मेरे खुले 12.3 पर, अजगर-यूएसबी पायथन 3 के लिए उपलब्ध नहीं है, इसलिए मैंने इस स्क्रिप्ट को bwcmdविधि को हटाकर पायथन 2 के साथ काम करने के लिए परिवर्तित किया और @ tux_mark_5 के उत्तर से लिंक के USB_BUFFER = ...रूप में परिभाषित किया ।


यहाँ सुविधा के लिए मेरी सामग्री है /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, मैं उपयोग कर रहा हूँ python-usb-1.0.0-21.1.noarch.rpm। IIRC यह 0penSUSE 12.3 के स्टैडर्ड रिपॉजिटरी का हिस्सा है। के अनुसार rpm -qi, स्रोत sourceforge.net/projects/pyusb पर है और पैकेज स्रोत अवलोकन पर है: //build.opensuse.org/devel: languages: python
Chen Levy

मैं उबंटू पर हूं, और उस पर 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

शायद यह दस्तावेज़ आपकी मदद करेगा:

लिनक्स कीबोर्ड और कंसोल HOWTO , उपयोगी कार्यक्रम


यह एक शुरुआत है, और एक चढ़ाव के लायक है। दिलचस्प बात यह है मैक्रो कुंजी है नहीं सब पर showkeys में दिखाने
जर्नीमैन गीक

हो सकता है कि यह मैक्रो कुंजी केवल दूसरी कुंजी के साथ संयोजन में स्केनोड का उत्सर्जन करती है। मैक्रो -1, आदि के लिए एक स्कैकोड की तरह?
एस्कॉबोल

1
वे एक बार खिड़कियों में कॉन्फ़िगर किए गए स्वतंत्र रूप से काम करने लगते हैं। मुझे निचले स्तर के दृष्टिकोण पर विचार करने की आवश्यकता हो सकती है। मेरा अनुमान है क्योंकि वहाँ razercfg के साथ एक ही कंपनी द्वारा किए गए चूहों के लिए समर्थन है गैर मानक scancodes का उपयोग कर। हे। अगर यह आसान था, मुझे लगता है कि मुझे यह मिल गया होगा;)
जर्नीमैन गीक

वह दस्तावेज़ 2002 से अपडेट नहीं किया गया है। क्या यह अभी भी चालू है?
पीटर मॉर्टेंसन

1

लिनक्स के लिए रेजर कुंजी मैपर देखें ।

यह सभी Razer डिवाइस के मैक्रोज़ के साथ काम करता है, कुछ कोड संशोधन दिए गए हैं। यदि आपके पास अभी भी कोई समाधान नहीं है और आपका डिवाइस सूचीबद्ध नहीं है, तो मुझे आपके डिवाइस को कॉन्फ़िगर करने और इसे मेरी समर्थित सूची में जोड़ने में मदद करने में खुशी होगी।


स्वीकृत उत्तर की तुलना में यह कैसे बेहतर है?
टोटो

1
सरल मुझे लगता है। पूर्व निर्मित। वहाँ सब करने के लिए कॉन्फ़िगर फ़ाइलों को भरना है।
केमिली गुए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.