При разработке и администрировании баз 1С:Предприятие в операционных системах семейства Linux (таких как Linux Mint, Ubuntu, Debian и других) программисты нередко сталкиваются с неприятной графической ошибкой: при попытке выделить фрагмент программного кода в модуле Конфигуратора текст физически выделяется, копируется и вырезается в буфер обмена, однако визуально область выделения никак не подсвечивается (фон не инвертируется и не меняет цвет). Разберем причины такого поведения платформы и рассмотрим подробные способы устранения этой неполадки.
Проанализируем механику работы графической подсистемы. Редактор исходного кода классического Конфигуратора 1С для отрисовки графических элементов и инвертирования цвета выделенного блока текста использует растровые операции графического сервера X11 (в частности, операцию побитового исключающего «ИЛИ» — XOR).
При использовании свободных (open-source) видеодрайверов, особенно для видеокарт AMD/ATI Radeon (драйвер radeon / amdgpu со старыми механизмами 2D-акселерации, такими как EXA), графический сервер некорректно обрабатывает растровые операции инверсии. В результате выделенный блок текста остается того же цвета, что и общий фон редактора. Также на отображение могут влиять встроенные композитные менеджеры оконного окружения (MATE, Xfce, Cinnamon).
Рассмотрим самое надежное и проверенное решение. Для устранения графического сбоя необходимо перевести механизм аппаратного 2D-ускорения открытого драйвера на библиотеку Glamor, которая транслирует вызовы 2D через OpenGL и корректно выполняет операцию инвертирования цвета.
Разберем по шагам процесс настройки конфигурации X-сервера:
/etc/X11/xorg.conf (если файл отсутствует, создадим его вручную либо создадим конфигурационный файл в каталоге /etc/X11/xorg.conf.d/20-radeon.conf).Section "Device".Option "AccelMethod" "glamor".Посмотрим на пример итоговой конфигурационной секции устройства:
Section "Device"
Identifier "Radeon"
Driver "radeon"
Option "AccelMethod" "glamor"
EndSection
После сохранения изменений необходимо перезапустить дисплейный менеджер или перезагрузить компьютер. После этого выделение текста в Конфигураторе станет четким и контрастным.
Если переключение на Glamor по каким-либо причинам недоступно или видеокарта относится к устаревшему поколению, рассмотрим альтернативный вариант — полное отключение аппаратного 2D-ускорения X11. При этом вся 2D-отрисовка переносится на центральный процессор, что гарантирует стопроцентно корректную работу логических операций инвертирования.
Для этого в секцию Section "Device" файла /etc/X11/xorg.conf добавим следующую строку:
Section "Device"
Identifier "Card0"
Driver "radeon"
Option "NoAccel" "True"
EndSection
Если нет возможности редактировать глобальные настройки Xorg для всей системы, разберем запуск клиентского приложения 1С с переменной окружения, форсирующей программную отрисовку для конкретного процесса.
Выполним запуск Конфигуратора через терминал следующей командой:
LIBGL_ALWAYS_SOFTWARE=1 /opt/1C/v8.3/i386/1cv8
Для 64-битной версии платформы укажем соответствующий путь:
LIBGL_ALWAYS_SOFTWARE=1 /opt/1C/v8.3/x86_64/1cv8
Если этот вариант решает проблему, команду запуска с переменной LIBGL_ALWAYS_SOFTWARE=1 можно закрепить в ярлыке запуска (файле .desktop) Конфигуратора.
Проанализируем влияние эффектов рабочего стола. В некоторых графических оболочках включенный композитинг окон перехватывает прямые вызовы отрисовки оконного интерфейса. Попробуем отключить встроенные графические эффекты:
Если доступ к системным настройкам ограничен правами пользователя, настроим внутренние параметры Конфигуратора для комфортной работы с кодом:
Теперь при двойном клике на переменную, метод или процедуру Конфигуратор будет явно подсвечивать все вхождения выбранного идентификатора по всему тексту модуля.
Если локальная модификация видеодрайвера невозможна, рассмотрим современные альтернативы для разработки конфигураций: