Интеграция торгового оборудования в операционных системах семейства Linux нередко сопровождается непредвиденным поведением платформы «1С:Предприятие». В частности, при попытке подключить эквайринговый терминал Pax (работающий под управлением ПО от Inpas/DualConnector) специалисты сталкиваются с ситуацией, когда терминал успешно проходит тесты через служебные утилиты, но в момент добавления драйвера или открытия настроек в 1С клиентское приложение аварийно завершает работу без вывода понятных сообщений об ошибках. Разберем по шагам, почему это происходит и как правильно настроить систему для стабильной работы.
Проанализируем первую и наиболее распространенную причину ошибки установки компоненты в 1С. В дистрибутивах Inpas присутствуют раздельные каталоги для Windows и Linux. Внешняя обработка или архив драйвера для Windows содержат динамические библиотеки формата .dll, тогда как в Linux-клиенте 1С требуются разделяемые библиотеки с расширением .so.
Разберем типичные ошибки при подготовке комплекта драйвера:
.rar, 1С не сможет распаковать его манифест. В таком случае распакуем архив штатными средствами ОС и переупакуем его в стандартный .zip..so строго соответствовали фактическим именам файлов (например, не допускается разночтение между manifest.xml и MANIFEST.XML).Если нужная обработка загружена, но при открытии формы настройки или подключении оборудования процесс 1cv8 / 1cv8c аварийно закрывается (происходит Segmentation fault), выясним причину сбоя на уровне системных библиотек. В современных дистрибутивах, таких как Debian 12, используются свежие версии системных пакетов (OpenSSL 3.0, glibc 2.36+), тогда как скомпилированные вендором модули Inpas часто собраны под более старые версии библиотек (например, OpenSSL 1.1).
Для поиска отсутствующих или несовместимых зависимостей выполним следующие действия в терминале Linux:
.so из архива драйвера или каталога временных файлов 1С в отдельную директорию.
ldd -r ./libDualConnector.so
libssl.so.1.1, libcrypto.so.1.1 или определенные версии libstdc++)./usr/lib/x86_64-linux-gnu/.Также проверим разрядность: если установлен 64-битный клиент платформы 1С (x86_64), внешняя компонента обязательно должна быть 64-битной. Использование 32-битной библиотеки (i386) в 64-битном клиенте приводит к мгновенному падению программы.
Утилита управления DC Control на Java позволяет проверить связь с хостом банка и выполнить тестовые операции, однако после ее закрытия обмен с терминалом прекращается. Драйвер Inpas ожидает наличие постоянно запущенного системного демона (фоновой службы DualConnector), который осуществляет непосредственное взаимодействие с терминалом по виртуальному COM-порту или локальной сети и слушает обращения от кассового ПО по локальному порту.
Если служба не запущена, попытка внешней компоненты обратиться к несуществующему сокету в ряде версий драйвера вызывает необработанное исключение и крах клиентского сеанса 1С. Рассмотрим порядок проверки службы и окружения:
systemd и находится в активном состоянии (статус active (running)).dialout и tty:
sudo usermod -aG dialout,tty $USER
После добавления в группы необходимо перезайти в систему.
/opt/1cv8/x86_64/8.3.XX.XXXX/1cv8c). В момент краха в окно терминала будет выведен конкретный сигнал операционной системы (дамп ошибки, ошибка сегментации или сбой WebKit).По умолчанию внешние компоненты загружаются прямо в адресное пространство процесса платформы. Любая ошибка обращения к памяти внутри кода .so приводит к мгновенному падению всей программы. Если конфигурация позволяет вносить изменения или используется подключаемая внешняя обработка, переведем подключение компоненты в изолированный режим.
Посмотрим на пример программного кода подключения компоненты с обработкой возможных исключений:
&НаКлиенте
Процедура ПодключитьДрайверЭквайринга()
ИмяФайлаКомпоненты = "DualConnector";
Местоположение = "ОбщийМакет.ДрайверInpasLinux";
// Подключаем внешнюю компоненту в изолированном процессе ОС
Попытка
РезультатПодключения = ПодключитьВнешнююКомпоненту(
Местоположение,
ИмяФайлаКомпоненты,
ТипПодключенияВнешнейКомпоненты.Изолированно
);
Если РезультатПодключения Тогда
ОбъектДрайвера = Новый ("AddIn." + ИмяФайлаКомпоненты + ".DualConnector");
Иначе
Сообщить("Не удалось загрузить внешнюю компоненту эквайринга.");
КонецЕсли;
Исключение
ИнформацияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Сообщить("Сбой при инициализации драйвера: " + ИнформацияОбОшибке);
КонецПопытки;
КонецПроцедуры
Параметр ТипПодключенияВнешнейКомпоненты.Изолированно запускает исполнение кода драйвера в отдельном системном процессе 1c_inproc_host. В этом случае даже при фатальном сбое внутри библиотеки .so основной клиент 1С продолжит работу, перехватит исключение в блоке Попытка ... Исключение и выдаст информативное сообщение об ошибке, что позволит продолжить диагностику без перезапуска всей программы.