Почему в 1С на Linux перестают нажиматься кнопки при открытии диалоговых окон?

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

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

Природа проблемы: модальность и фокус оконного менеджера

Для начала проанализируем ситуацию с технической стороны. В среде Windows механизм модальности окон отработан десятилетиями. Когда в 1С вызывается метод ОткрытьМодально(), операционная система четко понимает, какое окно является «родительским», а какое «дочерним», и блокирует ввод только там, где это необходимо. В Linux, особенно в связке с графическими оболочками типа Cinnamon (используется в Linux Mint), процесс управления фокусом реализован иначе.

Рассмотрим основные причины возникновения блокировки:

  1. Конфликт оконного менеджера: Оболочка (например, Muffin или Mutter) может воспринимать модальное окно как сигнал к блокировке всего потока событий X-сервера для данного приложения.
  2. Особенности библиотек GTK: Платформа 1С версии 8.3.18 активно использует библиотеки GTK3. Некорректное взаимодействие между платформой и версией библиотеки в системе приводит к тому, что невидимые слои, создаваемые для перехвата событий, не удаляются вовремя.
  3. Механизм предотвращения передачи фокуса: В современных дистрибутивах Linux встроена защита от внезапного захвата фокуса новыми окнами. Это может мешать 1С корректно передавать управление обратно основному окну.

Шаг 1: Настройка графической оболочки Linux

Выясним причину в настройках самой операционной системы. Если вы используете Linux Mint (Cinnamon), выполните следующие действия вместе с нами:

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

Шаг 2: Использование переменных окружения при запуске

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

Рассмотрим наиболее эффективные переменные:

XLIB_SKIP_ARGB_VISUALS=1 — эта переменная отключает использование прозрачности для окон X11. Именно некорректная прозрачность часто создает «невидимый барьер» над кнопками «Ещё».

GDK_BACKEND=x11 — принудительно заставляет приложения использовать бэкенд X11 вместо Wayland (актуально для новых версий дистрибутивов).

Пример команды для запуска тонкого клиента с этими параметрами:


export XLIB_SKIP_ARGB_VISUALS=1
/opt/1cv8/common/1cestart

Если после этого кнопки начали нажиматься, следует зафиксировать эти переменные в файле /etc/environment или в профиле пользователя .bashrc.

Шаг 3: Переход от модальности к асинхронности

Посмотрим на проблему глазами разработчика 1С. В современных конфигурациях, таких как ERP 2.4 или Бухгалтерия предприятия 3.0, разработчики стараются уходить от модальных окон. В свойствах конфигурации обычно установлен режим использования модальности «Не использовать».

Однако старые обработки или специфические модули (как упомянутый в теме «Обмен с УПП») могут по-прежнему использовать старые методы. Если у вас есть доступ к конфигуратору, разберем по шагам, что можно исправить в коде:

Вместо функции Вопрос(), которая останавливает выполнение кода и ждет ответа пользователя, блокируя всё вокруг, следует использовать процедуру ПоказатьВопрос().

Пример замены кода:


// Старый модальный подход (проблемный для Linux)
Ответ = Вопрос("Выполнить обмен?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
    ВыполнитьОбмен();
КонецЕсли;

// Новый асинхронный подход
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьОбмен", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, "Выполнить обмен?", РежимДиалогаВопрос.ДаНет);

При использовании асинхронных методов 1С не создает жесткой блокировки на уровне операционной системы, и интерфейс остается отзывчивым.

Шаг 4: Обновление платформы и библиотек

Проблема, описанная для версии 8.3.18, является довольно известной. В этой ветке было много исправлений, связанных именно с работой под Linux. Мы рекомендуем рассмотреть возможность обновления платформы до более стабильных веток, таких как 8.3.21 или 8.3.22. В них была проведена значительная оптимизация работы с фокусом окон и исправлены ошибки отрисовки в среде GTK3.

Также важно убедиться, что в системе установлена библиотека libwebkit2gtk корректной версии. 1С использует её для отрисовки многих элементов управления. Если версия библиотеки конфликтует с требованиями платформы, это может приводить к «зависанию» событий мыши в формах.

Шаг 5: Проверка влияния аппаратного ускорения

Выясним, не виноват ли драйвер видеокарты. В Linux взаимодействие 1С с аппаратным ускорением графики иногда дает сбои. Чтобы проверить это, попробуйте временно отключить композитный менеджер (эффекты рабочего стола) или запустить 1С под другим пользователем с «чистыми» настройками рабочего стола. Если в упрощенном графическом режиме проблема исчезает, значит, корень зла кроется в настройках отрисовки оконного менеджера Muffin.

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

← На главную