Немного диагноза: от этого
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
- смонтированный каталог. Это должно получить Вас необходимая интерактивность (если бы предположение выше было правильным), и сохраните все ключи локальными.
Я узнал, что должен отправить 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.
Звуки, так или иначе подобные этой проблеме, таким образом, я попробовал бы это решение : если я понимаю правильно Вашу проблему, сканнер штрихкода должен появиться как ведомый указатель "Виртуальной базовой клавиатуры", когда Вы делаете
xinput --list
Затем, возможно, получение его идентификатора и принуждение этого плавать могли помочь :
xinput float <id>