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


11

/dev/input/event0( /dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd) এ আমার কাছে একটি ইউএসবি বারকোড স্ক্যানার রয়েছে এবং একটি বারকোড স্ক্যান করার ফলে কীগুলি চাপার ইভেন্টগুলি প্রেরণ হয়। আমি এই কীপ্রেসগুলি লাইবদেব ইনপুট রুবি লাইব্রেরি ব্যবহার করে ক্যাপচার করছি , যা দুর্দান্ত কাজ করে। সমস্যাটি হ'ল প্রতিটি বারকোড একটি ব্যবহারকারীর নাম হিসাবে প্রবেশ করানো হয় এবং পরবর্তীকালে রাস্পবেরি পাইতে একটি পাসওয়ার্ড প্রবেশ করে প্রচুর ব্যর্থ লগইন প্রচেষ্টা করে। (রাস্পবেরি পাই মাথাবিহীন এবং মাইক্রোওয়েভের অভ্যন্তরে থাকবে))

আমি কীভাবে লিনাক্সকে ইনপুট ডিভাইস হিসাবে বারকোড স্ক্যানার দেখা থেকে আটকাতে পারি এবং আমার প্রোগ্রামটি একমাত্র ইভেন্ট গ্রাহক হতে পারি? নাকি এর থেকে আলাদা, আরও ভাল সমাধান হতে পারে?


4
আমি একটি মাইক্রোওয়েভে ইলেকট্রনিক্স লাগানোর পরামর্শ দিই না। অবশ্যই একটি চলমান না।
Ignacio Vazquez-Abram

1
এটি অবশ্যই এই প্রশ্নের সবচেয়ে "ডাব্লুটিএফএফ" অংশ।
ব্র্যাচলে

1
সস্তা ফ্যারাডে খাঁচা? সম্ভবত এলাকায় প্রচুর আরএফ আছে।
চার্লস ব্রিজ

4
হাহাহা, মাইক্রোওয়েভে নেই। মাইক্রোওয়েভের নিয়ামক পিসিবি এর পিছনে সমস্ত কিছু বসে এবং আমি আমার রাস্পবেরি পাই রান্না করার ইচ্ছা করি না। আমি রান্নার নির্দেশাবলীর জন্য বারকোড স্ক্যানার পাশাপাশি ভয়েস নিয়ন্ত্রণ এবং একটি নতুন নকশাকৃত স্পর্শ প্যাড যুক্ত করছি।
ndbroadbent

উত্তর:


6

আমি জানতে পেরেছি যে ডিভাইসে আমার একটি EVIOCGRAB ioctl প্রেরণ করা দরকার , যা এটি এক্সক্লুসিভ ব্যবহারের জন্য দখল করে

এটি রুবিতে কীভাবে করবেন তা এখানে:

#!/usr/bin/env ruby
BARCODE_SCANNER = "/dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd"

require 'rubygems'
require 'libdevinput'
require 'ffi'
require 'ffi/tools/const_generator'

# We need access to the file
DevInput.class_eval { attr_reader :dev }

# Look up value of EVIOCGRAB constant
cg = FFI::ConstGenerator.new('input') do |gen|
  gen.include('linux/input.h')
  gen.const(:EVIOCGRAB, '%u', '(unsigned)')
end
EVIOCGRAB = cg['EVIOCGRAB'].to_i

scanner = DevInput.new(BARCODE_SCANNER)
# Send EVIOCGRAB to scanner, which grabs it for exclusive use by our process
scanner.dev.ioctl(EVIOCGRAB, 1)


puts "Waiting for events..."
scanner.each do |event|
  # Ignore everything except key press events
  next unless event.type == 1 && event.value == 1
  puts "Key: #{event.code_str}"
end

দ্রষ্টব্য : আপনাকে libdevinputরত্ন ffiএবং লিনাক্স শিরোনাম ইনস্টল করতে হবে । যদি আপনি 3.2.0এবং এর মধ্যে একটি লিনাক্স সংস্করণ ব্যবহার করে থাকেন তবে আপনি 3.6.11সেই FFI::ConstGeneratorঅংশটি এর সাথে প্রতিস্থাপন করতে পারেন EVIOCGRAB = 1074021776, এবং তারপরে আপনার প্রয়োজন নেই ffiবা লিনাক্স শিরোনাম।


2

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

xinput --list

তারপরে সম্ভবত এটির আইডি পাওয়া এবং এটি ভাসতে বাধ্য করা সাহায্য করতে পারে:

xinput float <id>

আমি মনে করি ওপি এগুলি কনসোলে দেখছে, এক্স নয় But তবে এক্সে এটি কাজ করা উচিত।
ডারোবার্ট

আহ ঠিক. এছাড়াও তিনি ইতিমধ্যে একটি সমাধান খুঁজে পেয়েছেন…
স্কিপি লে গ্র্যান্ড গৌরও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.