Композитная оконная подсистема и менеджер окон

Настройка оконной подсистемы, менеджера окон и управление маршрутизацией событий ввода

В данном разделе приводятся сведения по настройке оконной подсистемы. В узком смысле она подразделяется на два компонента:

Конфигурирование оконной подсистемы сводится к запуску соответствующих менеджеров и редактированию конфигурационного файла screen.conf. В этом файле для менеджера окон screen-winmgr настраиваются параметры трансляции событий ввода между композитными оконами и средой Photon.

Для devg-screen.so настраиваются параметры поворота изображения, режим композиции и др.

Настройка менеджера композиции
Настройка оконного менеджера
Устройства ввода
Калибровка touchscreen-устройств
Объединение устройств ввода
Запрет дисплеев для устройств ввода
Примеры настройки различных конфигураций
Настройка курсоров

Настройка менеджера композиции

Инициализация менеджера композиции

Активирование менеджера композиции 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


Note: Обе переменные должны быть доступны к моменту запуска 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>.


Caution: Драйверу ввода обязательно следует передать опции -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


Caution: Параметр display для touchscreen-устройств обязателен.

Каждое устройство следует ассоциировать с группой ввода group. Устройства могут как разделять одну группу ввода, так и быть независимыми.

Калибровка touchscreen-устройств

Калибровка 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


Note: В многодисплейной конфигурации параметр -i позволяет определить к какому дисплею подключен touchscreen. При калибровке это важно учитывать.


Note: Если запущен 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


Caution: Если screen.conf был изменен, следует перезапустить screen-winmgr, чтобы изменения вступили в силу.

Калибровка 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, но при наличии нескольких однотипных устройств на шине это может быть проблематичным.


Caution: Фактическая нумерация устройств может не совпадать с нумерацией их подключения. Убедитесь, что номер устройства указан верно.

Пример запуска 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


Caution: Если screen.conf был изменен, следует перезапустить screen-winmgr, чтобы изменения вступили в силу.

Если Вы калибруете 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

Настройка курсоров


Note: В среде 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




Предыдущий раздел: Руководство пользователя