Как настроить сканер штрихкодов в 1С на Linux, если передается только первый символ?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

Приветствуем всех специалистов и администраторов, которые столкнулись с автоматизацией торговых точек на базе операционных систем семейства Linux. В этой статье мы подробно разберем одну из самых распространенных и неприятных проблем при подключении торгового оборудования — некорректную работу USB-сканера штрихкодов в режиме клавиатуры на нативном Linux-клиенте 1С:Предприятие.

Часто при тестировании или развертывании рабочих мест на CentOS, Ubuntu или RedHat системные администраторы замечают странное поведение сканера: в среде Windows устройство работает идеально, генерируя внешнее событие 1С, но в Linux-клиенте при сканировании в форме списка номенклатуры событие не срабатывает. При этом в поле быстрого поиска успевает прописаться только первый символ штрихкода. Давайте подробно разберем, почему возникает эта проблема, и рассмотрим проверенные способы её окончательного решения.

Выясняем причину проблемы: почему «Клавиатура» в Linux работает некорректно

Для того чтобы понять суть неисправности, проанализируем, как операционная система обрабатывает сигналы от сканера в режиме эмуляции клавиатуры. В ОС Windows драйвер 1С перехватывает клавиатурные события на глобальном уровне за счет системных хуков (hooks). Это позволяет драйверу мгновенно «склеивать» быстро идущие друг за другом нажатия клавиш от сканера в единый массив (штрихкод) и отправлять его непосредственно в платформу 1С, вызывая внешнее событие.

В Linux-системах (особенно в графических средах на базе серверов X11 или Wayland) аналогичный глобальный перехват ввода стандартными средствами сильно затруднен в целях безопасности. Когда в настройках подключаемого оборудования 1С выбран порт «Клавиатура», система воспринимает сканер как обычного пользователя, который невероятно быстро печатает на клавиатуре. Графический сервер Linux не всегда успевает передавать этот плотный поток символов в активное окно 1С единым буфером. В результате:

  1. Первый пришедший символ переводит фокус ввода платформы в режим быстрого поиска (открывается маленькое поисковое окно).
  2. Во время переключения фокуса и отрисовки этого окна последующие символы от сканера «теряются» операционной системой или обрабатываются не вовремя.
  3. Внешнее событие ОбработкаВнешнегоСобытия не генерируется, так как драйвер не смог распознать целостный штрихкод.

Чтобы решить эту проблему, нам нужно заставить систему и 1С обрабатывать данные напрямую, минуя подсистему эмуляции ввода графического сервера.

---

Решение №1: Переключение в режим «HID-устройство»

Наиболее быстрый и эффективный способ исправить проблему в рамках нативного драйвера «Сканеры штрихкода (NativeApi)» — переключить устройство в режим прямого чтения данных. Рассмотрим по шагам, как это сделать.

Параметр «HID-устройство» заставляет драйвер 1С обращаться напрямую к низкоуровневой подсистеме ввода операционной системы Linux (чтение сырых данных из файлов устройств в каталоге /dev/input/ или /dev/hidraw). Драйвер сам забирает пакеты данных от конкретного USB-устройства, полностью игнорируя фокус ввода и эмуляцию клавиатуры. Это позволяет стабильно получать весь штрихкод целиком и корректно генерировать внешнее событие.

Выполним первоначальную настройку в 1С:

  1. Перейдем в раздел Администрирование -> Подключаемое оборудование.
  2. Откроем карточку нашего сканера штрихкодов.
  3. Нажмем кнопку Настроить... для перехода в параметры драйвера (NativeApi).
  4. В поле выбора порта вместо значения «Клавиатура» укажем параметр «HID устройство».
  5. Сохраним настройки и перезапустим сеанс 1С:Предприятия.

После этого сканирование должно начать генерировать внешние события аналогично тому, как это происходит в Windows.

---

Важная деталь: Настройка прав доступа к устройствам ввода в Linux

Очень часто после переключения в режим «HID-устройство» администраторы сталкиваются с тем, что сканер вообще перестает реагировать в 1С. Это происходит из-за строгой политики безопасности Linux. Разберем этот момент подробнее.

По умолчанию файлы устройств в директории /dev/input/event* принадлежат суперпользователю root и группе безопасности input (или plugdev). Обычный пользователь, под которым запущен графический сеанс 1С, просто не имеет прав на чтение этих файлов. Следовательно, драйвер 1С не может получить доступ к устройству напрямую.

Чтобы исправить это, мы можем пойти двумя путями:

Вариант А: Добавление пользователя в группу безопасности

Самый простой путь — добавить пользователя 1С в соответствующую группу. Откроем терминал и выполним команду (для дистрибутивов CentOS / RedHat / Ubuntu):

sudo usermod -a -G input имя_пользователя

Здесь вместо имя_пользователя укажите имя учетной записи Linux, под которой работает кассир или оператор 1С. После выполнения команды обязательно нужно завершить сеанс пользователя (разлогиниться) или перезагрузить ПК, чтобы новые права вступили в силу.

Вариант Б: Создание правила udev

Если вы хотите настроить доступ точечно только для конкретной модели сканера штрихкодов, правильнее будет создать правило для службы udev. Для этого нам нужно узнать Vendor ID (VID) и Product ID (PID) сканера. Подключим сканер к USB и выполним команду:

lsusb

В выводе команды найдем строчку с нашим сканером, она будет выглядеть примерно так:
Bus 003 Device 004: ID 05e0:0610 Symbol Technologies, Inc.
Здесь 05e0 — это VID, а 0610 — это PID.

Теперь создадим файл правил:

sudo nano /etc/udev/rules.d/99-barcode-scanner.rules

Добавим в него следующую строку (заменив значения на свои):


SUBSYSTEMS=="usb", ATTRS{idVendor}=="05e0", ATTRS{idProduct}=="0610", MODE="0664", GROUP="input"

Сохраним файл и применим новые правила без перезагрузки системы:

sudo udevadm control --reload-rules && sudo udevadm trigger ---

Настройка префиксов и суффиксов в Linux

Для корректного разбора штрихкода драйвер 1С должен точно знать, в какой момент заканчивается передача данных от сканера. Для этого используются служебные символы завершения (суффиксы).

В операционной системе Windows традиционным суффиксом окончания строки является символ возврата каретки CR (ASCII 13). Однако в средах Linux и Android стандартным завершителем строки чаще выступает символ перевода строки LF (Line Feed — ASCII 10).

Если после перевода в HID-режим штрихкод считывается, но внешнее событие отрабатывает некорректно или с задержкой, выполним следующие шаги:

  1. Возьмите бумажное руководство пользователя от вашего сканера штрихкодов (или скачайте PDF-версию с сайта производителя).
  2. Найдите и последовательно считайте управляющие штрихкоды: «Сбросить настройки до заводских», «Настроить суффикс» и выберите передачу суффикса LF (или комбинации CR+LF).
  3. В настройках подключаемого оборудования в 1С укажите соответствующий суффикс (обычно это 10 для LF или 13 10 для CR+LF).

---

Решение №2: Перевод сканера в режим виртуального COM-порта (USB-COM)

Даже отлично настроенный HID-режим таит в себе одну потенциальную проблему — опасность «случайного ввода». Если кассир случайно свернет окно 1С, откроет текстовый редактор, чат или браузер и нажмет на курок сканера, весь штрихкод распечатается в активное поле стороннего приложения. Это может привести к порче данных или отправке конфиденциальной информации в рабочий чат.

Чтобы полностью исключить этот фактор риска, мы рекомендуем перевести сканер в режим эмуляции COM-порта (USB-COM). В этом режиме данные передаются строго в выделенный виртуальный порт и считываются исключительно программой 1С, независимо от того, где сейчас находится фокус ввода на экране.

Разберем по шагам, как это реализовать в Linux:

  1. Программирование сканера: Найдите в инструкции к вашему физическому сканеру настроечный штрихкод «USB-COM Emulation» (или «USB Virtual COM») и считайте его.
  2. Проверка в ОС: После этого Linux-совместимое ядро автоматически подгрузит драйвер (модуль cdc-acm). Сканер перестанет определяться как клавиатура и появится в системе как виртуальный последовательный порт. Проверить это можно командой: ls /dev/ttyACM* Или: ls /dev/ttyUSB* Обычно устройство монтируется как /dev/ttyACM0.
  3. Права доступа: Для того чтобы платформа 1С могла читать данные из COM-порта, текущего пользователя Linux необходимо добавить в системную группу, управляющую последовательными портами (в разных дистрибутивах это группа dialout или uucp). Выполним команду: sudo usermod -a -G dialout имя_пользователя Перезапустим сеанс пользователя или перезагрузим ПК.
  4. Настройка в 1С: Переходим в 1С в настройки подключаемого оборудования. В параметрах сканера меняем порт с «Клавиатура/HID» на созданный виртуальный порт (например, вручную прописываем путь /dev/ttyACM0).

Мы подробно проанализировали причины сбоев при интеграции торгового оборудования и разобрали два надежных сценария исправления ситуации. Использование режима «HID-устройство» решает проблему в пару кликов, а переход на «USB-COM» гарантирует максимальную стабильность и безопасность рабочего места кассира в Linux-среде.

← На главную