লিনাক্সে কাজ করার জন্য রেজার ব্ল্যাক উইডো থেকে ম্যাক্রো কীগুলি পাওয়া


49

আমি একটি রেজার ব্ল্যাক উইডো আলটিমেট বাছাই করেছি যাতে উইন্ডোজে ইনস্টল থাকা কোনও সরঞ্জাম ব্যবহার করে সেট করা ম্যাক্রোগুলির জন্য অতিরিক্ত কী রয়েছে । আমি ধরে নিচ্ছি যে এগুলি কিছু অভিনব প্যান্ট জুজু কী নয় এবং অন্য কোনও কীগুলির মতো স্ক্যানকোডগুলি নির্গত করা উচিত।

প্রথমত, লিনাক্সে এই স্ক্যানকোডগুলি পরীক্ষা করার কোনও স্ট্যান্ডার্ড উপায় আছে কি? দ্বিতীয়ত, আমি কীগুলি কমান্ড লাইন এবং এক্স-ভিত্তিক লিনাক্স সেটআপগুলিতে করতে কীভাবে সেট করব? আমার বর্তমান লিনাক্স ইনস্টলটি জুবুন্টু ১০.১০, তবে আমি কয়েকটি জিনিস স্থির করে একবার কুবুন্টুতে চলে যাব। আদর্শভাবে উত্তরটি জেনেরিক এবং সিস্টেম-ব্যাপী হওয়া উচিত।

আমি এখন পর্যন্ত যে জিনিসগুলি চেষ্টা করেছি:

আমার যে জিনিসগুলি চেষ্টা করা দরকার

  • স্নোপি প্রো + বিপরীত প্রকৌশল (ওহ প্রিয়)

  • ওয়্যারশার্ক - প্রারম্ভিক ফিউজিংয়ের চারপাশে কোনও স্ক্যানকোড নির্গত হয় না বলে মনে হয় যখন কিবোর্ডটি পর্যবেক্ষণ করা হয়েছে এবং কীগুলি টিপছে। অতিরিক্ত কীগুলি একটি পৃথক ডিভাইস হতে পারে বা কোনও কোনও ভাবে আরম্ভ করা দরকার indicate

  • লিনাক্স থেকে lsusb আউটপুট সহ, তিনটি দৃশ্যে: রেফারেন্সটি অতিক্রম করতে হবে: স্ট্যান্ডেলোন, কোনও ড্রাইভার ইনস্টল না করেই একটি উইন্ডোজ ভিএম এর মাধ্যমে পেরিয়ে গেছে এবং এটির মতোই।

  • LSUSB কেবলমাত্র একটি স্ট্যান্ডেলোন লিনাক্স ইনস্টলের একটি ডিভাইস সনাক্ত করে

  • ইঁদুররা একই রেজার সাইন্যাপস ড্রাইভার ব্যবহার করছে কিনা তা পরীক্ষা করে নেওয়া কার্যকর হতে পারে, কারণ এর অর্থ হ'ল রেজারকফগের কিছু ভিন্নতা কাজ করতে পারে (সনাক্ত করা যায়নি, কেবল ইঁদুরের জন্য কাজ করে বলে মনে হচ্ছে)

আমি যে বিষয়গুলিতে কাজ করেছি:

  • ড্রাইভার সহ উইন্ডোজ সিস্টেমে কীবোর্ডটি একটি কীবোর্ড এবং নির্দেশক ডিভাইস হিসাবে দেখা যায় । পয়েন্টিং ডিভাইসটি ব্যবহার করে - আপনার বগ স্ট্যান্ডার্ড মাউস ড্রাইভারগুলির পাশাপাশি - একটি রাজার সিনাপ্স নামে পরিচিত কোনও ড্রাইভার।

  • মাউস ড্রাইভারটি লিনাক্সের নীচে evdevএবং lsusbপাশাপাশি দেখা গেছে

  • ওএস এক্স এর অধীনে একক ডিভাইস দৃশ্যত, যদিও এর lsusbতুলনায় আমার এখনও চেষ্টা করা হয়নি

  • কীবোর্ডটি ড্রাইভারের সাথে আরম্ভের পরে ওএস এক্সে ব্যাকলাইট মোডে পালস করে। এটি সম্ভবত নির্দেশ করে যে সক্রিয়করণের সময় কীবোর্ডে কিছু সূচনা ক্রমিক পাঠানো হয়েছিল।

  • এগুলি প্রকৃতপক্ষে অভিনব প্যান্টগুলি জুজু কী।

এই প্রশ্নটি কিছুটা বাড়ানো:

আমার একটি উইন্ডোজ সিস্টেমে অ্যাক্সেস রয়েছে তাই যদি প্রশ্নের উত্তর দেওয়ার জন্য আমার যদি কোনও সরঞ্জাম ব্যবহার করার প্রয়োজন হয় তবে তা ঠিক আছে। আমি এটি কনফিগার ইউটিলিটি সহ এবং এর বাইরে সিস্টেমেও চেষ্টা করতে পারি। প্রত্যাশিত শেষ ফলাফলটি এখনও লিনাক্সে এই কীগুলি ব্যবহারযোগ্য করে তুলবে।

আমি বুঝতে পারি এটি একটি হার্ডওয়ারের একটি নির্দিষ্ট পরিবার। লিনাক্স সিস্টেমে আমার কাছে প্রয়োজনীয় নির্দেশাবলীর বোধগম্য এমন কোনও কিছু পরীক্ষা করতে আমি রাজি হবো - এটি লিনাক্স দক্ষতা রয়েছে এমন লোকদের কাছে এই প্রশ্নটি খোলা উচিত, তবে এই কীবোর্ডটিতে অ্যাক্সেস নেই।

আমার সর্বনিম্ন শেষ ফলাফলটি প্রয়োজন:

আমার এই কীগুলি সনাক্ত করতে হবে এবং বর্তমান গ্রাফিকাল মূলধারার উবুন্টু রূপগুলির যে কোনও ফ্যাশনে ব্যবহারযোগ্য এবং আমার কীবোর্ডের সাথে স্বাভাবিকভাবেই কাজ করতে হবে। ভার্চুয়াল কুকি এবং পাগল প্রপস যদি এটি কোনও সাধারণভাবে প্যাকেজযুক্ত এবং গড় ব্যবহারকারীর দ্বারা ব্যবহারযোগ্য।

আমি কম্পাইল কোডটি আমার সিস্টেম কাজ করবে, অথবা একটি উৎস যে আমি (যদি এটি চেয়ে বেশি জটিল নির্দেশাবলী সহ কম্পাইল করতে পারেন প্রয়োজন হবে ./configure, make, make install) যদি অতিরিক্ত সফ্টওয়্যার না সময় বর্তমান LTS বা মানক ডেস্কটপ মুক্তির জন্য উবুন্টু ভান্ডার উপর উত্তর. প্রতিলিপি তৈরি করতে এবং সফলভাবে নিজের সিস্টেমে কীগুলি সফলভাবে ব্যবহার করার জন্য আমার পর্যাপ্ত তথ্যের প্রয়োজন হবে।


কোন সমাধান সঙ্গে আপডেট করুন, আমি একই অর্জন করতে চাই!
জোনাথন ডে

আমি ইদানীং এটিতে কাজ করার সত্যিই সময় পাইনি, তবে আমি উত্তর না পাওয়া পর্যন্ত এই প্রশ্নটি যা কিছু করেছি তা দিয়ে আপডেট করব।
যাত্রামন গীক

হতে পারে বড় ফন্টে 500 প্রতিনিধি উল্লেখ সম্পাদনা? অন্যথায় এই ঘোষণার খুব বেশি অর্থ হয় না (সিস্টেমের সাথে নিবন্ধিত 50 টি রেপ্টি অনুদান দেওয়া)
ড্যানিয়েল বেক

এটি কি এখনও আপনার পক্ষে কাজ করে? (আমি
সের্গেইয়ের

আমি এটি পরীক্ষা করে দেখিনি, আমি ভয় পাচ্ছি, সার্জি এর সমাধানটি চেষ্টা করে যাচ্ছিল কিনা তা বোঝার অর্থ আমি পেয়েছি, তবে বেশিরভাগ গত কয়েক মাস ধরে উইন্ডোজ চালিয়ে যাচ্ছি স্কুলের কাজের জন্য। যদি তা হয়, আমি সেই বিষয়ে একটি মন্তব্য পোস্ট করব
জার্নম্যান গিক

উত্তর:


44

এম 1-এম 5 প্রকৃতপক্ষে নিয়মিত কীগুলি - স্ক্যানকোড তৈরি করার আগে এগুলি চাপ দেওয়ার আগে কেবল তাদের সুনির্দিষ্টভাবে সক্ষম করা দরকার। tux_mark_5 একটি ছোট হাস্কেল প্রোগ্রাম বিকাশ করেছে যা এই কীগুলি সক্ষম করতে রেজার কীবোর্ডগুলিতে সঠিক SET_REPORT বার্তা প্রেরণ করে এবং প্রাক্তন তোতা পাইথনের কাছে একই কোডটি পোর্ট করে।

আর্ক লিনাক্স সিস্টেমে পাইথন বন্দরটি প্যাকেজ করা হয়েছে এবং এটি https://aur.archlinux.org/packages.php?ID=60518 থেকে পাওয়া যায় ।

ডেবিয়ান বা উবুন্টু সিস্টেমে কোডের পাইথন বন্দর স্থাপন করা তুলনামূলকভাবে সহজ। আপনাকে পাইসবি এবং লিবাসব ইনস্টল করতে হবে (রুট হিসাবে):

    aptitude install python-usb

তারপরে http://finch.am/projects/blackwidow/blackwidow_enable.py থেকে ফাইলটি ধরুন এবং এটিকে (মূল হিসাবেও) চালিত করুন:

    chmod +x blackwidow_enable.py
    ./blackwidow_enable.py

কীবোর্ডটি প্লাগ লাগানো না হওয়া বা মেশিনটি রিবুট না করা পর্যন্ত এটি কীগুলি সক্ষম করবে। আপনি যে জাতীয় স্টার্টআপ স্ক্রিপ্টটিকে সবচেয়ে বেশি পছন্দ করেন তা থেকে এই স্থায়ী কলটির জন্য make এটি কীভাবে ডেবিয়ায় সেট আপ করতে হয় তার নির্দেশাবলীর জন্য দেবিয়ান ডকুমেন্টেশনটি দেখুন

টাক্সমার্ক_5 এর হাস্কেল কোডটি ব্যবহার করার জন্য আপনাকে হাস্কেল ইনস্টল করতে হবে এবং কোডটি নিজেই সংকলন করতে হবে। এই নির্দেশাবলী একটি ডেবিয়ান-মতো সিস্টেমের জন্য (উবুন্টু সহ)।

  1. GHC, libusb-1.0-0-dev এবং ক্যাবল (মূল হিসাবে) ইনস্টল করুন:

    aptitude install ghc libusb-1.0-0-dev cabal-install git pkg-config
    
  2. প্যাকেজগুলির তালিকা আনুন:

    cabal update
    
  3. হাস্কেলের জন্য ইউএসবি বাইন্ডিং ইনস্টল করুন (মূলের প্রয়োজন নেই):

    cabal install usb
    
  4. ইউটিলিটি ডাউনলোড করুন:

    git clone git://github.com/tuxmark5/EnableRazer.git
    
  5. ইউটিলিটি তৈরি করুন:

    cabal configure
    cabal build
    
  6. ইউটিলিটি চালান (রুট হিসাবেও):

    ./dist/build/EnableRazer/EnableRazer
    

এর পরে আপনি সক্ষম রাজার বাইনারিটি আপনার যে কোনও জায়গায় অনুলিপি করতে পারেন এবং শুরুতে চালনা করতে পারেন।

এক্সিকিউশনের পরপরই এক্স সার্ভারটি এম 1 কে এক্সএফ 86 টিউল হিসাবে, এম 2 কে এক্সএফ 86 লঞ্চ 5 হিসাবে, এম 3 কে এক্সএফ 86 লঞ্চ 7 হিসাবে এবং এম 5 কে এক্সএফ 86 লঞ্চ 8 হিসাবে দেখাবে। এফএন এর ইভেন্টগুলিও নির্গত হয়।

এই কীগুলি এক্সবিন্ডকি বা কে-ডি-র সিস্টেম সেটিংসের মধ্যে স্বেচ্ছাসেবী কর্মে আবদ্ধ হতে পারে।

যেহেতু আপনার কীবোর্ড আলাদা হতে পারে, আপনার মেইন.হিস লাইন the৪ এ পণ্য আইডি পরিবর্তন করতে হতে পারে:

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

এটি কাজ করে, ভাল যাচ্ছে। সিস্টেম আমাকে অনুমতি দিলে আপনি এক বা দুই দিনে 500 জন প্রতিনিধি পাবেন। আমি pkg-config যোগ করার স্বাধীনতা নিয়েছি, যা পূর্বশর্তগুলির তালিকায় haskell usb প্যাকেজটির পূর্বশর্ত ইনস্টল করার প্রয়োজন ছিল। Lsusb অনুসারে 1532: 010d এর আইডি সহ আমার স্ট্যান্ডার্ড ব্ল্যাক উইডো চূড়ান্তভাবে কোনও পরিবর্তন ছাড়াই সফটওয়্যারটি কাজ করে। কীগুলি খোলাসা করে সনাক্ত করা যায় এবং ব্যবহারযোগ্য বলে মনে হয়, তাই এটি প্রশ্নের প্রয়োজনীয়তা পুরোপুরি পূরণ করেছে।
যাত্রামন গীক

তদতিরিক্ত, কেডি-র কাছে কোনও বাঁধাই বিকল্প নেই বলে মনে হচ্ছে, xbindkeys মনে হয় এটি কাজ করছে
গিক

আইডি 10 ই দিয়ে এটি আমার স্ট্যান্ডার্ড ব্ল্যাকউডো (অ-চূড়ান্ত) সাথে কাজ করে। আমি একটি ওদেব নিয়ম যুক্ত করার পরামর্শ দিচ্ছি, সুতরাং এটি সমস্যা ছাড়াই স্বয়ংক্রিয়ভাবে শুরু হবে, উদাহরণস্বরূপ একটি ফাইল 99-সক্ষম-রেজার-কীবোর্ড.আরুলস SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="1532", ATTR{idProduct}=="010e", RUN+="/root/EnableRazer"ইন /etc/udev/rules.d তৈরি করুন (এখানে আপনাকে এটি সংশোধন করতে হতে পারে পথ এবং আইডি আবার)
ফ্লোলো

স্পষ্টতই আমি যে ইউটিলিটি লিখেছি তা রাজার আনসানির সাথেও কাজ করে। এখানে কারও ব্লগ পোস্ট রয়েছে যিনি এটি বন্ধ করেছেন: norgelinux.blogspot.com/2012/02/razer-anasi-on-arch-linux.html
tux_mark_5

1
আমার কাছে রেজার ব্ল্যাক উইডো ২০১৩ (চূড়ান্ত নয়) রয়েছে, যখন আমি ব্ল্যাকউইডো_এনেবল.পি স্ক্রিপ্টটি চালায় (রুট সহ এবং ছাড়াই), আমি বার্তাটি পাই "ব্ল্যাক উইডো পাওয়া যায় নি"। আপনি কি আমাকে এই ডিবাগ করতে সাহায্য করতে পারেন? আমি উবুন্টুগনোমে 13.04 এ আছি। দেখে মনে হচ্ছে প্রোডাক্ট_আইডি আলাদা এবং প্রোডাক্ট আইডি পরিবর্তন করার পরে আমি এখন এই ত্রুটিটি Could not select configuration endpoint.
পেয়েছি

22

রাজার মনে হয় যে তারা আজকাল সমস্ত ব্যবহারকারীর উপর ক্লাউড-ভিত্তিক সিনাপস 2 কনফিগারকে জোর করে জোর করে ভার্শন ২. এ সংযুক্ত ফার্মওয়্যার আপগ্রেড করছে * একবার আপনি ফার্মওয়্যার আপগ্রেড করার পরে আপনি আর ফিরে যেতে পারবেন না (আপনি যদি পুরানো ফার্মওয়্যারের সাথে ফ্ল্যাশ করার চেষ্টা করেন তবে কীবোর্ডটি সম্পূর্ণ বেটে গেছে)।

Tux_mark_5 এর উত্তরে হাস্কেল প্রোগ্রামের 'ম্যাজিক বাইটস' সর্বশেষতম ফার্মওয়্যারের সাথে কাজ করবে না। পরিবর্তে, ড্রাইভার আরম্ভের ক্রমের সময় এই বাইটগুলি প্রেরণ করে: '0200 0403'। এগুলি ম্যাক্রো কী সক্ষম করে, তবে কীবোর্ডটি একটি অদ্ভুত মোডে প্রবেশ করে যেখানে স্ট্যান্ডার্ড এইচআইডি প্রোটোকলের পরিবর্তে এটি 16-বাইট প্যাকেটগুলি প্রেরণ করে (সম্ভবত একসাথে চাপতে পারে এমন কীগুলির সংখ্যা বাড়ানোর জন্য)। লিনাক্স এইচআইডি সিস্টেম এটির সাথে পুরোপুরি সামলাতে পারে না, এবং বেশিরভাগ কীগুলি প্রত্যাশা অনুযায়ী কাজ করার সময়, ম্যাক্রো কীগুলি অচেনা থাকে: এইচআইডি ড্রাইভার যখন চাপ থাকে তখন ইনপুট স্তরটিতে কোনও ডেটা ফিড করে না।

লিগ্যাসি মোডে আপনার কীবোর্ডটি প্রবেশ করতে (যাতে ম্যাক্রো কীগুলি XF86 লঞ্চ * কীকোডগুলি প্রেরণ করে এবং এফএন কী কী-কোড 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 তে লিখেছিলাম একটি খুব রুক্ষ এবং মলিন প্রোগ্রাম। ব্ল্যাকউইডো.বিডাব্লুএমসিডি () এবং রেজার লোগো এলইডি কমান্ডগুলিকে বোনাস হিসাবে তৈরি করার জন্য রেজার নিয়ন্ত্রণ প্যাকেটগুলি তৈরি করার কোডটি নোট করুন :)

#!/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()

আমার কীবোর্ড আপগ্রেড হয়েছে এবং আমি এখনও এটি চেষ্টা করি নি। আমি যখন আবার একটি সঠিক লিনাক্স সিস্টেম পাই তখন আমি এটিকে শট দেব। দুর্ভাগ্যক্রমে আমি এর জন্য আরেকটি অনুগ্রহ দিতে পারছি না - অংশ হিসাবে অনুগ্রহ করে সিস্টেমটি কীভাবে কাজ করে। আমি সম্ভবত আপনার সঠিক উত্তর স্যুইচ করব যদি এটি হয় না।
যাত্রামন গীক

দৃশ্যত মডিউল ইউএসবি আমার সিস্টেমে অনুপস্থিত তাই এটি কাজ করে না: /
জার্নম্যান গিক

ইউএসবি মডিউলটি সম্ভবত পাইসব প্যাকেজে রয়েছে (বা পাইথন-ইউএসবি বা অনুরূপ কিছু, যা ডিস্ট্রোর উপর নির্ভর করে)।
সের্গেই

2
সের্গে আপনাকে অনেক ধন্যবাদ, এটি আরও নতুন রেজার ব্ল্যাক উইডো 2013 এর সাথে PRODUCT_ID = 0x011b এর সাথে কাজ করে। আমি এখনও কোনও ম্যাক্রো সেট করার চেষ্টা করি নি তবে আমি ইভেন্টগুলি / ডিভ / ইনপুট / বাই-আইডি / ইউএসবি-রেজার_রাজার_ব্ল্যাকউইডো_2013-ইভেন্ট-কেবিডি এবং xev এও দেখছি :) :)
বাইনারি_আরুনার

আপনাকে ধন্যবাদ, এটি দুর্দান্ত। আমি এটি কোনও ঝামেলা ছাড়াই এখন কয়েক বছর ধরে ব্যবহার করছি (অবশেষে মন্তব্য করার খ্যাতি পেয়েছি :))। পাইসব সম্পর্কে একটি মন্তব্য: যেহেতু উবুন্টু আজও পাইথন 3 এর জন্য পাইসব পাঠায় না, তাই আমাকে এটি উত্স থেকে নিজেই ইনস্টল করতে হয়েছিলsudo python3 setup.py install
লুয়েটার

8

সম্ভবত এটি ইস্যুটির উপর কিছুটা আলোকপাত করতে পারে (শোকি ম্যানপেজ থেকে):

২.6 কার্নেলের কাঁচা মোড বা স্ক্যানকোড মোড মোটেই খুব কাঁচা নয়। স্ক্যান কোডগুলি প্রথমে কী কোডগুলিতে অনুবাদ করা হয়, এবং যখন স্ক্যানকোডগুলি পছন্দ হয়, মূল কোডগুলি আবার অনুবাদ করা হয়। বিভিন্ন রূপান্তর জড়িত, এবং চূড়ান্ত ফলাফল কীবোর্ড হার্ডওয়্যার যা প্রেরণ করেছে তার সাথে মিলের কোনও নিশ্চয়তা নেই। সুতরাং, আপনি যদি বিভিন্ন কী দ্বারা প্রেরিত স্ক্যান কোডগুলি জানতে চান তবে একটি 2.4 কার্নেল বুট করা ভাল। ২.6.৯ থেকে বুট অপশনটি atkbd.softraw = 0 রয়েছে যা ২.6 কার্নেলকে প্রকৃত স্ক্যান কোডগুলি ফিরিয়ে আনতে বলে।

কাঁচা স্ক্যান কোডগুলি কেবল এটিএম এবং পিএস / 2 কিবোর্ডে পাওয়া যায় এবং তারপরেও atkbd.softraw = 0 কার্নেল প্যারামিটার ব্যবহার না করা অবধি অক্ষম থাকে। যখন কাঁচা স্ক্যান কোডগুলি উপলভ্য থাকে না, তখন কার্নেল কীকোডগুলি থেকে স্ক্যান কোডগুলি তৈরি করতে একটি নির্দিষ্ট বিল্ট-ইন টেবিল ব্যবহার করে। সুতরাং, setkeycodes (8) স্ক্যান কোড ডাম্প মোডে শো-এর আউটপুটকে প্রভাবিত করতে পারে।

এই বুট অপশনটি সেট হওয়ার পরে শোকি ম্যাক্রো কীগুলির সাথে কিছু ফেলে ফেলবে কিনা তা আমি দেখতে চলেছি।

সম্পাদনা: রিবুট করার পরে, কোনও সাফল্য নেই, তবে আমি ইউএসবি ডিভাইসগুলি থেকে নিজেরাই কাঁচা ইনপুট ক্যাপচারের দিকে তাকাচ্ছিলাম। আমি নিম্নলিখিতটি উল্লেখ করেছি, আকর্ষণীয়ভাবে (আমার কাছে ব্ল্যাক উইডোর পাশাপাশি একটি রেজার ডায়মন্ডব্যাক রয়েছে):

[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]#

যাইহোক, কাঁচা ইনপুট ক্যাপচার করতে ডিডি ব্যবহার করে ইভেন্ট-কেবিডি ডিভাইসে দুটি ডায়মন্ডব্যাক ইঁদুর কাজ করে তবে ব্ল্যাক উইডো মাউস ডিভাইসে নয়।

আমি অনুমান করছি সম্ভবত তারা ইনস্টল করা ড্রাইভারদের দ্বারা কোনওরকম সক্রিয় না হওয়া অবধি কোনও আউটপুট তৈরি করে না। আমি তবে লিনাক্স ইউএসবি সম্পর্কে খুব বেশি জানি না, তাই এটি জানার পরেও আমার জানা নেই। সম্ভবত তাদের প্রথমে আবদ্ধ হতে হবে?

ঠিক আছে, তিনটি কালো বিধবা ডিভাইস নোট করা আছে /proc/bus/input/devices, তবে এগুলিতে lsusbবা তারা গণিত করা হয় না বলে মনে হয় /proc/bus/usb/devices। আমি নিশ্চিত না যে কীভাবে এই ডিভাইসগুলিকে আবদ্ধ করার চেষ্টা করতে বা তাদের সাথে কোনওভাবে ইন্টারফেস করার চেষ্টা করতে হবে।

event4ম্যাক্রো কীগুলির সাথে আসল কীবোর্ড, ইভেন্ট 6 এর সাথে সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে, তবে আমি তাদের থেকে কোনও ইনপুট ক্যাপচার করতে পারি না। আশা করি সবাই সাহায্য করেছে

   [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]# 

আমি অনুমান করছি যে সিস্টেমটি আরম্ভ করার জন্য কীবোর্ডের সাথে যোগাযোগ করতে হবে - ওএস এক্সের সাহায্যে আমার কীবোর্ডটি 'পালসিং' হালকা মোডে ফেলে দেওয়া হয়েছে। কীবোর্ড ম্যাক্রো কীগুলি কাজ করার আগে সম্ভবত কিছু সূচনা প্রয়োজন
জর্নিম্যান গীক

আমি যা ভাবছি তা হ'ল কীভাবে মাউস এবং ইভেন্ট-মাউস ডিভাইসে সেই তথ্যটি প্রেরণ করা যায়। ইভেন্ট-মাউসকে দায়বদ্ধ বলে মনে হচ্ছে, যেহেতু এটি একটি কীবোর্ড ইভেন্ট হ্যান্ডলারের সাথে আবদ্ধ। আমি বলতে চাই, তাত্ত্বিকভাবে, প্রত্যেককেই ডিভাইসটি আরম্ভ করতে হবে এবং যথাযথ স্ক্যানকোড-> কিকোড ম্যাপটি সেটকেইকোডের সাথে সেটআপ করতে হবে এবং ইভেন্টগুলি সাধারণ কীস্ট্রোক হিসাবে সেট করতে হবে।
srmaddox

সম্ভবত আমি ডিগ্রিটি ডিভাইস থেকে / আউট / এ আউট করার জন্য কেবল গ্রহনটি খুলতে এবং একটি প্রোগ্রাম লিখতে পারি। তাহলে বিচার ও ত্রুটি বিরাজ করতে পারে।
srmaddox

jespersaur.com/drupal/book/export/html/21 এই প্রক্রিয়া যতদূর যায় আগ্রহী হওয়া উচিত। এটি আমার দক্ষতার চেয়ে অনেক বেশি far
যাত্রামন গীক

7

আমার সমাধানটি রেজার ব্ল্যাক উইডো 2013 মেকানিকাল গেমিং কীবোর্ডের জন্য (মডেল নম্বর: আরজেড 03-0039) এবং ওপেনসুএস 12.3 এ পরীক্ষা করা হয়েছিল।

আমি এই লিঙ্কে গুগল অনুবাদ ব্যবহার করেছি ।

মূলত এটি এই প্রশ্নের জন্য @ সার্জেয়ের উত্তরের পরিবর্তিত সংস্করণ ব্যবহার করে তবে সাধারণ পরিবর্তন সহ:

  1. আমার PRODUCT_ID = 0x011b

  2. আমার ওপেনসুএস 12.3-তে পাইথন 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"

আপনি পাইসব এর একটি অনুলিপিটি কোথায় পেয়েছেন usb.util?
কায়েস

@KayEss, আমি ব্যবহার করছি python-usb-1.0.0-21.1.noarch.rpm। আইআইআরসি এটি 0 টেপসুএসই 12.3 এর স্ট্যান্ডার্ড সংগ্রহস্থলের একটি অংশ। মতে rpm -qi, উৎস এ sourceforge.net/projects/pyusb ও বাক্স উৎস obs এ আছে: //build.opensuse.org/devel: ভাষাসমূহ: পাইথন
চেন লেভি

আমি উবুন্টুতে আছি, এবং পাইথন 3 এর জন্য কোনও প্যাকেজযুক্ত সংস্করণ নেই। আমি তখন সুডো, পাইথন 3, পাইপ এবং ভার্চুয়ালেনভকে এক লাইনে পেতে কিছুটা সমস্যা হচ্ছিলাম তবে এখন এটি সাজানো হয়েছে এবং আমি ম্যাক্রো কীগুলির কোডগুলি দেখছি।
কায়েস

1
@ কেয়েস, উবুন্টু ১৪.০৪ এর জন্য, আমি নির্দেশগুলি ব্যবহার করেছি: github.com/walac/pyusb । বিশেষত: sudo apt-get install python libusb-1.0-0sudoএবংpip install pyusb --pre
চেন লেভি

2

হতে পারে এই দস্তাবেজটি আপনাকে সহায়তা করবে:

লিনাক্স কীবোর্ড এবং কনসোল HOWTO , দরকারী প্রোগ্রাম


এটি একটি সূচনা, এবং একটি upvote মূল্য। উত্সাহের ব্যাপার হল ম্যাক্রোর কী না না এ সব showkeys দেখা
মজুর গিক

হতে পারে এই ম্যাক্রো কীটি কেবল অন্য কী এর সাথে মিশ্রিত করে স্ক্যানকোডটি বের করে। ম্যাক্রো -১ ইত্যাদির জন্য স্ক্যানকোডের মতো?
ascobol

1
তারা একবার উইন্ডোতে কনফিগার করা স্বতন্ত্রভাবে কাজ করবে বলে মনে হচ্ছে। আমার নিম্ন স্তরের পদ্ধতির বিষয়টি বিবেচনা করা প্রয়োজন। আমার অনুমান যেহেতু একই সংস্থার রেজারফিগ এর অ-স্ট্যান্ডার্ড স্ক্যানকোড ব্যবহার করে ইঁদুর তৈরির জন্য সমর্থন রয়েছে। হেহ। যদি এটি সহজ হয়, আমি মনে করি আমি
এটিটি

সেই দস্তাবেজটি 2002 সালের পরে আপডেট করা হয়নি it এটি এখনও বিদ্যমান?
পিটার মর্টেনসেন

1

লিনাক্সের জন্য রেজার কী ম্যাপারটি দেখুন ।

কিছু কোড পরিবর্তন করার পরে এটি সমস্ত রেজার ডিভাইসের ম্যাক্রোগুলির সাথে কাজ করে। যদি আপনার এখনও সমাধান না হয় এবং আপনার ডিভাইসটি তালিকাভুক্ত না হয় তবে আমি আপনাকে আপনার ডিভাইসটি কনফিগার করতে এবং এটি আমার সমর্থিত তালিকায় যুক্ত করতে সহায়তা করে খুশি হব।


গৃহীত উত্তরের চেয়ে এটি কীভাবে ভাল?
টোটো

1
সহজ আমি অনুমান। প্রি-প্রণীত। কনফিগারেশন ফাইলগুলি পূরণ করা বাকি রয়েছে।
ক্যামিল গুয়ে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.