Клавиатура Usb используется отдельно в X

У меня есть USB-сканер штрих-кода, который эмулирует клавиатуру. Когда он подключен, X получает управление и обрабатывает его как обычную клавиатуру и отправляет события клавиатуры в текущее сфокусированное окно.

Это не то, что я хочу сделать. У меня есть программа, которая считывает штрих-коды из потока ввода ascii и обрабатывает их. Эта программа работает в фоновом режиме и не имеет интерфейса пользователя вообще.

Как настроить Linux, чтобы не использовать эту клавиатуру usb в X, но нарисуйте ее как устройство потока ascii. Таким образом, я смогу перенаправить его как устройство ввода для своей программы и обеспечить чтение штрих-кодов независимо от изменений фокуса ввода. И штрих-коды не должны быть переданы в текущее фокусное окно.

Кроме того, лучше не запускать программу обработки штрих-кода в качестве корня, поэтому клавиатурное устройство должно иметь разрешения на чтение для всех.

One Solution collect form web for “Клавиатура Usb используется отдельно в X”

1) Как настроить X, чтобы игнорировать клавиатуру

Используйте lsusb чтобы найти идентификатор вашего сканера штрих-кода (в формате 0123:4567 ). Создайте или измените файл xorg.conf (обычно в /etc/X11/ ). Добавьте раздел InputClass с идентификатором, который вы только что нашли:

 Section "InputClass" Identifier "barcode" MatchUSBID "0123:4567" Option "Ignore" "true" EndSection 

Перезапустите X, проверьте в Xorg.log что ваше устройство распознано в этом разделе и проигнорировано.

2) Преобразование от клавишных кодов к кодам ASCII (или другим) довольно привлекательно, чтобы использовать разные раскладки клавиатуры, мертвые ключи, настройки и т. Д. Теперь, когда вы отключили уровень преобразования X, вы можете получать события нажатия клавиш и keyrelease из соответствующего /dev/input/eventX . Число может измениться; для вашего считывателя штрих-кода будет символьная ссылка в /dev/input/by-id/ которая не изменяется. Поэтому используйте символическую ссылку.

Вы можете запустить evtest в этом файле, чтобы узнать, какие события он генерирует. Их сопоставление для вашего читателя штрих-кода будет простым, так что поиск таблицы с keyym на ASCII-код будет делать. Вы можете обрабатывать эти события в своей собственной программе, см. Источник evtest или, например, здесь . Вы также можете написать небольшую программу на C, которая просто считывает это устройство и создает ASCII на stdout, а затем интегрирует его в ваше приложение, используя канал и т. Д.

«Сопоставление его как устройства ASCII-потока» невозможно, такие устройства не существуют в ядре Linux.

3) Настройка разрешений

Вам нужно написать собственное правило udev для установки разрешений для вашего устройства ввода. SUBSYSTEM должен соответствовать input , ACTION должен соответствовать ADD , среда ENV должна содержать информацию для соответствия устройству (используйте udevadm для определения деталей), и вы можете установить OWNER , GROUP и MODE для вновь созданного устройства /dev/input/eventX . Вот несколько общее руководство , я не мог найти более конкретного. Google для лучших учебных пособий.

  • Не удалось загрузить драйвер USB-клавиатуры на машине Debian
  • USB для виртуальной машины XenServer 6.2
  • USB-концентраторы и Linux
  • Почему «cat ttyUSB0» не производит выход?
  • Модуль ядра для подключения клавиатуры ps / 2 к USB?
  • Работает ли этот синхронизирующий вызов должным образом?
  • Ошибка ввода / вывода с использованием jmtpfs, не сохраняющего файл при копировании на устройство
  • Убрано USB-устройство хранения данных все еще установлено
  • дезактивировать драйвер USB при запуске
  • Невозможно перечислить содержимое каталога с 0755 и принадлежит текущему пользователю
  • udevadm не отслеживает родительские устройства
  • Interesting Posts

    Как запустить e2image для резервного копирования удаленного CentOS-сервера?

    Копирование или перенаправление текста в качестве входа в UART, необходимо обеспечить более медленную пропускную способность

    Разрешить доступ в Интернет в общедоступную подсеть

    Как перечислить домены в virsh?

    i3wm: запуск приложений без атрибута класса на определенных рабочих пространствах

    lsf bkill все задания PEND без убийства рабочих мест RUN

    Каково разрешение файла / etc / shadow в CentOS?

    Проверьте процесс и убейте

    Как прочитать вывод `dmesg`, чтобы определить, сколько памяти используется процессом при вызове oom-killer?

    Ошибка: iptables: нет цепочки / цели / соответствия этим именем

    Bash Scripting: автоматизировать команду в консоли

    gksu replacment

    удалите строки, которые новее, чем заданная дата в файле

    Почему утилита переименования на Debian / Ubuntu отличается от той, которая используется в других дистрибутивах, например CentOS?

    Переименуйте последние 8 символов в имени файла

    Linux и Unix - лучшая ОС в мире.