Документация по запуску сканера штрих-кода ChiperLab 1000 USB-VCOM в linux
Дано: Терминал на линуксе + сканер штрих кода, подключен к серверу с оффтопиком и 1С 7.7
Данное устройство представляет собой 2 девайса: переходник USB->COM и собственно сканер.
Задача 1: Подключение на уровне ядра
Вывод по lsusb:
Bus 003 Device 002: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x Composite Device
В ядре:
Device Drivers --->
[*] USB support --->
<M> USB Serial Converter support --->
<M> USB CP210x family of UART Bridge Controllers
Пересобрать ядро.
Если все прошло нормально, то dmesg выдаст:
usb 3-1: new full speed USB device using uhci_hcd and address 12
usb 3-1: configuration #1 chosen from 1 choice
cp2101 3-1:1.0: cp2101 converter detected
usb 3-1: reset full speed USB device using uhci_hcd and address 12
usb 3-1: cp2101 converter now attached to ttyUSB0
Теперь у нас есть устройство /dev/ttyUSB0 и ссылка на него /dev/serial/by-id/usb-Silicon_Labs_CIPHERLAB_308_USB-to-RS232_Interface_Converter_02140002276B-if00-port0
Задача 2: Передать данные из com порта в окружение пользователя и rdesktop.
Установка пакетов:
emerge -av xvkbd logserial
Также будет нужен работающий udev.
Создаем нужные файлы:
- трубу fifo:
mkfifo /etc/barcode
2) Ссылку на .Xauthority - xvkbd требует для общения с иксами. Хотя наверное правильнее было бы просто запускать его от прав локального пользователя.
ln -s /home/local/.Xauthority /root/.Xauthority
3) Скрипт:
/etc/barcode.sh
#!/bin/bash
killall -9 logserial xvkbd 2>/dev/null >/dev/null
DISPLAY=:0.0 start-stop-daemon --start --background --stdout /var/log/barcode-1.log --exec /usr/bin/xvkbd -- -xsendevent -file /etc/barcode
start-stop-daemon --start --background --exec /usr/bin/logserial -- -t /dev/serial/by-id/usb-Silicon_Labs_CIPHERLAB_308_USB-to-RS232_Interface_Converter_02140002276B-if00-port0 -f /etc/barcode
4) И правило udev
/etc/udev/rules.d/90-cipher.rules
SUBSYSTEMS=="usb-serial", ENV{ID_PORT}="$attr{port_number}"
IMPORT="path_id"
IMPORT="usb_id --export %p"
ENV{ID_SERIAL}=="", GOTO="persistent_serial_end"
ACTION=="add", SUBSYSTEMS=="usb-serial", ENV{ID_MODEL_ID}=="ea60",ENV{ID_VENDOR_ID}=="10c4",RUN+="/etc/./barcode.sh "
LABEL="persistent_serial_end"
(возможно правило может быть и короче - не тестил)
Результат:
При подключении сканера к USB порту udev запускает скрипт barcode.sh Оттуда стартуют xvkbd, который читает из трубы и передает в иксы, и logserial - который читает из COM порта и в трубу пишет. Результат - в иксы сыпется то что прочитал сканер. Можно уточнить вывод для xvkbd указав ему через “-window” окно rdesktop.
Удачного пик-“4041485047773"пик"30656750 96DNM33L312”-анья.
Прошу сообщество оценить/обругать, помочь выявить подводные камни. После этого думаю можно будет внести в вики.