Я могу мешать Linux слушать устройство ввода данных USB как клавиатуру, но все еще получить события с программой?

Немного диагноза: от этого

debug1: Sending command: scp -v -r -p /PATH/TO/DIR root@SERVER2:/PATH/TO/DIR
[...]
debug1: read_passphrase: can't open /dev/tty: No such device or address

Я подозревал бы (предполагают), что это прокладывает себе путь, копия от сервера к серверу с scp входит SERVER1 и выполняется scp команда для отправки файла в SERVER2; таким образом вызывающая сторона (от SERVER1) должен аутентифицировать себя. Теперь это перестало работать, так как это является неинтерактивным (существует нет /dev/tty) и нет никакого способа попросить пароль.

Это означает копировать ключ к SERVER1 (Я не могу сказать, возможно ли это в Вашей ситуации), мог бы, вероятно, устранить проблему (я думаю...) (Если нет никакого пароля..., который довольно плох),

Редактирование решение могло быть следующим, использовать sshfs для доступа к файлам, Вы хотите отправить, отправить их через scp от sshfs- смонтированный каталог. Это должно получить Вас необходимая интерактивность (если бы предположение выше было правильным), и сохраните все ключи локальными.

11
31.05.2013, 14:18
2 ответа

Я узнал, что должен отправить EVIOCGRAB ioctl на устройство, которое захватывает его для эксклюзивного использования.

Вот то, как сделать это в Ruby:

#!/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, и заголовки Linux. Если Вы используете версию Linux между 3.2.0 и 3.6.11, можно заменить FFI::ConstGenerator часть с EVIOCGRAB = 1074021776, и затем Вам не нужно ffi или заголовки Linux.

6
27.01.2020, 19:59

Звуки, так или иначе подобные этой проблеме, таким образом, я попробовал бы это решение : если я понимаю правильно Вашу проблему, сканнер штрихкода должен появиться как ведомый указатель "Виртуальной базовой клавиатуры", когда Вы делаете

xinput --list

Затем, возможно, получение его идентификатора и принуждение этого плавать могли помочь :

xinput float <id>
2
27.01.2020, 19:59
  • 1
    я думаю OP, видит их на консоли, не X. Но в X это должно работать. –  derobert 04.10.2013, 17:53
  • 2
    , право. Плюс он уже нашел решение … –  Skippy le Grand Gourou 04.10.2013, 18:03

Теги

Похожие вопросы