Настройка оконной подсистемы, менеджера окон и управление маршрутизацией событий ввода
В данном разделе приводятся сведения по настройке оконной подсистемы. В узком смысле она подразделяется на два компонента:
Конфигурирование оконной подсистемы сводится к запуску соответствующих менеджеров и редактированию конфигурационного файла screen.conf. В этом файле для менеджера окон screen-winmgr настраиваются параметры трансляции событий ввода между композитными оконами и средой Photon.
Для devg-screen.so настраиваются параметры поворота изображения, режим композиции и др.
Инициализация менеджера композиции
Активирование менеджера композиции devg-screen.so производится через конфигурационный файл display.conf. Для этого требуется задать опцию hook:
device { drivername=imx6x vid=0 did=0 modeopts=/etc/system/config/imx6x.conf hook=devg-screen.so ... }
Стоит отметить, что менеджер композиции требует наличия поддержки аппаратной акселерации и соответствующего драйверного обеспечения. Перечень архитектур, для которых имеется сборка менеджера можно обнаружить на странице описания devg-screen.so. Перечень же платформ и соответствующего драйверного обеспечения можно определить анализируя содержимое директории /usr/lib/graphics/
(каждый элемент в директории представляет одну из поддерживаемых платформ).
Менеджер композиции запускается вместе с io-display и при переходе в графический режим производит детектирование платформы через переменную окружения GRAPHICS_ROOT (детальное описание настройки этой переменной см. на странице devg-screen.so). Она должна указывать на директорию, характеризующую платформу, вида:
/usr/lib/graphics/<platform>
Бинарные компоненты графической подсистемы включают примеры рабочих конфигураций для всех поддерживаемых платформ. Кроме того, для успешной загрузки драйверных библиотек переменная окружения LD_LIBRARY_PATH должна быть настроена следующим образом:
export LD_LIBRARY_PATH=$GRAPHICS_ROOT:$LD_LIBRARY_PATH
![]() | Обе переменные должны быть доступны к моменту запуска io-display (следует определить откуда он запускается в конкретной системе: из загрузочного образа, rc.* скриптов или из иного скрипта), а также для любого прикладного графического приложения, требующего 2D/3D акселерации. Для прикладного кода обычно достаточно установить переменную в /etc/profile . |
При обнаружении критических проблем при запуске графической подсистемы менеджер композиции принудительно отключается, а сама подсистема запускается в режиме совместимости (без композиции) с предыдущими редакциями ЗОСРВ «Нейтрино». При этом в системный журнал выводится сообщение об ошибке.
Настройка логики работы
Все параметры менеджера композиции доступны в секции wfc display конфигурационного файла screen.conf. Сам файл детектируется через переменную окружения GRAPHICS_ROOT.
Полный перечень доступных параметров и их назначение приведено на странице screen.conf. Большинство из них требует наличия аппаратной акселерации, а также соответствующей поддержки со стороны графического ускорителя и его драйвера. В случае недоступности той или иной функциональности в системный журнал выводится соответствующее сообщение.
Оконная подсистема производит поиск конфигурационного в директории, на которую указывает переменная окружения GRAPHICS_ROOT. В этой директории должен содержаться конфигурационный файл $GRAPHICS_ROOT/screen.conf. Обычно целевая директория располагается по адресу /usr/lib/graphics/<platform>
.
Каждое устройство, которое планируется сделать доступным оконной подсистеме, необходимо описать в секции input конфигурационного файла screen.conf. В ней следует создать соответствующие подсекции keyboard, mouse и touch (подробнее см. описание самого конфигурационного файла) для каждого подключаемого устройства. Нумерация каждой подсекции должна начинаться с единицы. Для каждого устройства следует указать параметр device, указывающий на путь к устройству, которое создал драйвер ввода devi-hid (или иной драйвер), запущенный в режиме ресурс-менеджера. Обычно путь имеет вид /dev/devi/<inputname0-9>
.
![]() | Драйверу ввода обязательно следует передать опции -Pr. В противном случае, драйвер не создаст устройство, которое может открыть менеджер окон, и все события будут направляться в Photon.
По умолчанию из скрипта ph запускается devi-hid без этой опции. После запуска Photon его можно терминировать и перезапустить требуемым образом. |
Пример:
begin input begin keyboard 1 device = /dev/devi/keyboard0 group = 1 end keyboard begin mouse 1 device = /dev/devi/mouse0 group = 2 end mouse begin touch 1 device = /dev/devi/touch0 display = 1 group = 3 end touch end input
![]() | Параметр display для touchscreen-устройств обязателен. |
Каждое устройство следует ассоциировать с группой ввода group. Устройства могут как разделять одну группу ввода, так и быть независимыми.
Калибровка touchscreen-устройств должна производиться с помощью утилиты gf-calib. Для начала следует убедиться, что io-display запущен. Далее необходимо запустить devi-hid в режиме standalone ресурс-менеджера с необходимыми опциями:
/usr/photon/bin/devi-hid -Pr touch
При необходимости можно, ориентируясь на вывод утилиты usb, указать конкретное устройство на шине:
/usr/photon/bin/devi-hid -Pr touch -u 0
После этого следует запустить утилиту gf-calib и следовать указаниям, появляющимся на экране. Например, для запуска gf-calib без курсора с созданием калибровочного файла не по умолчанию, запустите gf-calib со следующими опциями:
gf-calib -D -f /tmp/non-default-calib-file
Для запуска gf-calib с созданием калибровочного файла по умолчанию для touchscreen-устройства на дисплее 1, запустите gf-calib со следующими опциями:
gf-calib -i 1
![]() | В многодисплейной конфигурации параметр -i позволяет определить к какому дисплею подключен touchscreen. При калибровке это важно учитывать. |
![]() | Если запущен Photon и io-graphics, то также следует указать номер слоя через опцию -l, поскольку слоя с номером 0 будет захвачен Photon-ом. |
Оконный менеджер позволяет объединять устройства ввода, заставляя их действовать как одно целое. это регулируется параметром group в screen.conf. Нумерация групп начинается с единицы. В один момент времени на дисплее отображается один курсор активной на данный момент группы ввода. Группы ввода также позволяют запрещать события ввода на конкретном дисплее.
Например, если требуется объединить в одну группу мышь и touchscreen, в конфигурационный файл нужно ввести следующее:
begin input begin mouse 1 device = /dev/devi/mouse0 group = 1 end mouse begin touch 1 device = /dev/devi/touch0 display = 2 group = 1 end touch end input
Группы ввода позволяют запрещать события ввода для конкретных дисплеев. По умолчанию ввод разрешен для всех дисплеев. Запрет ввода характеризуется отображением курсора и отсутствием трансляции события ввода окнам и в Photon.
Для того, чтобы запретить ввод в конфигурационном файле screen.conf следует определить подсекцию input-group. Нумерация начинается с единицы и должна указывать на существующую группу group устройств ввода. Здесь следует определить параметр deny-displays, в котором через запятую перечисляются все дисплеи, которым запрещено получать события от указанной группы ввода.
Например, запрет событий ввода от группы 3 для дисплея 5 достигается следующим образом:
begin input begin input-group 3 deny-displays = 5 end input-group end input
Пример настройки одиночного touchscreen-устройства
Настройка touchscreen-устройств должна начинаться с калибровки (процесс описан выше). Пример запуска devi-hid для одиночного touchscreen-устройства:
/usr/photon/bin/devi-hid -Pr touch
В файле screen.conf нужно указать адрес устройства и, если это touchscreen-устройство, номер дисплея:
begin input begin touch 1 device = /dev/devi/touch0 display = 1 group = 1 end touch end input
Калибровка touchscreen приводит к формированию файла калибровочных коэффициентов (см. gf-calib и calib). Пример выполнения калибровки для touchscreen-устройства с отключенным курсором:
gf-calib -D
После успешной калибровки следует перезапустить devi-hid. Для одиночного touchscreen-устройства нет необходимости указывать номер устройства и калибровочный файл, если только он не отличается от калибровочного файла по умолчанию. Пример:
slay -f devi-hid /usr/photon/bin/devi-hid -Pr touch
Пример настройки двух разноформатных touchscreen USB-устройств
Процесс калибровки в данном примере будет несколько отличаться от одиночного touchscreen-устройства. Для нескольких touchscreen-устройств должно быть запущено соответствующее количество экземпляров devi-hid в режиме standalone ресурс-менеджер (опции -Pr). Если этого не сделать, то события нажатия ото всех устройств будут адресовываться первому устройству.
Для запуска нескольких экземпляров devi-hid следует указать номер устройства ввода с помощью опции -u номер_устройства. Параметр номер_устройства можно получить с помощью утилиты hidview с опцией -a, последующего касания touch-устройства и анализа вывода утилиты. Альтернативно, можно узнать их номера по выводу утилиты usb, но при наличии нескольких однотипных устройств на шине это может быть проблематичным.
![]() | Фактическая нумерация устройств может не совпадать с нумерацией их подключения. Убедитесь, что номер устройства указан верно. |
Пример запуска devi-hid для двух touchscreen-устройств:
/usr/photon/bin/devi-hid -Pr touch -u 0 /usr/photon/bin/devi-hid -Pr touch -u 1
В файле screen.conf также должнf быть задана корректная ассоциация устройств и дисплеев для избежания отправки событий не тем дисплеям. Верный порядок выясняется опытным путем:
begin input begin touch 1 device = /dev/devi/touch1 display = 1 group = 1 end touch begin touch 2 device = /dev/devi/touch0 display = 2 group = 1 end touch end input
Если Вы калибруете tocuhscreen-устройства разного разрешения, укажите при начале калибровки имя выходного калибровочного файла для каждого устройства, а также номер этого устройства (можно получить с помощью утилит hidview и usb). Пример:
gf-calib -i 0 -f /etc/system/config/calib.first gf-calib -i 1 -f /etc/system/config/calib.sec
После успешной калибровки следует запустить devi-hid для каждого устройства ввода, указав в качестве параметра соответствующие калибровочные файлы. Пример:
slay -f devi-hid /usr/photon/bin/devi-hid -Pr touch -u 0 abs -f /etc/system/config/calib.first /usr/photon/bin/devi-hid -Pr touch -u 1 abs -f /etc/system/config/calib.sec
![]() | В среде Photon курсор можно отключить, добавив в файл display.conf следующий параметр для интересующего дисплея:
cursor=none |
Для каждой группы ввода можно установить свой набор курсоров. Если этого не сделать, для всех групп ввода будет использоваться стандратный набор курсоров, определенный в /usr/share/screen/cursors.kfc.
Для настройки набора курсоров, в конфигурационном файле screen.conf следует определить подсекцию cursors. Набор курсоров, используемый по умолчанию, опредляется значением параметра config_path. При значении standard используется стандартный файл /usr/share/screen/cursors.kfc. Для отключения курсоров следует установить значение none. Кроме того, в параметре config_path можно указать путь к альтернативному файлу формата cursors.kfc.
Для определения набора курсоров для конкретной группы ввода следует воспользоваться параметром group<1-9> и передать путь к файлу формата cursors.kfc.
В следующем фрагменте конфигурационного файла выбирается стандартный набор курсоров по умолчанию, а также переопределяется набор курсоров для группы ввода 1:
begin input begin cursors config_path = standard group1 = /usr/share/screen/group.kfc end cursors end input
Предыдущий раздел: Руководство пользователя