Общее конфигурирование графической подсистемы и встроенных средств композиции
Графическая подсистема включает следующие ключевые компоненты:
Их взаимодействие упрощенно представлено на схеме:
┌───────────────────────────────────────────┐ │ │ │ Приложение │ │ │ └─────┬───────────────┬───────────────┬─────┘ │ │ │ ┌─────▾─────┐ ┌─────▾─────┐ ┌─────▾─────┐ │ │ │ │ │ │ │ FreeGLUT, ◂───▸ GLVND │ │ libgf ◂──────────┐ │ GLU, GLEW │ │ │ │ libscreen │ │ │ │ │ │ │ │ │ └───────────┘ └─────▴─────┘ └─────▴─────┘ │ │ │ │ ┌─────▾───────────────▾─────┐ ┌──────▾──────┐ ┌────────────┐ │ │ │ │ │ │ │ io-composer ◂───▸ io-display ◂───▸ io-lxdev │ │ │ │ │ │ │ └───────────────────────────┘ └─────────────┘ └────────────┘
Настройка графической подсистемы включает в себя несколько этапов:
Рассмотрим эти этапы подробнее.
Обслуживание драйверного обеспечения контроллеров дисплеев является ответственностью менеджера ресурсов io-display. Выбор конкретного драйвера, и настройка io-display должны осуществляться исходя из фактического оборудования. Менеджер имеет единственный конфигурационный файл /etc/system/config/display.conf.
![]() | При настройке драйверного обеспечения рекомендуется отключить автоматический запуск Photon, поскольку некоторые эксперименты могут привести к зависанию устройства. Уже после определения финальной конфигурации эти изменения можно обратить. Если запуск Photon осуществляется из стандартного скрипта ph, то отключить его автоматическое исполнение можно через файл /etc/system/config/nophoton.
Также целесообразно настроить удаленный доступ к системе, так как невозможность перейти в графический режим в подавляющем большинстве случаев не приводит к неработоспособности всей системы. Так, например, в процессе неудачного запуска io-display добавляются записи в системный лог slogger. |
Стоит также отметить, что при настройке графической подсистемы рекомендуется по возможности отказаться от использования приложения phgrafx. Являясь частью оконного окружения Photon, это приложение обеспечивает лишь обратную совместимость с предшествующими версиями ЗОСРВ и не поддерживает возможность управления конфигурационными файлами драйверов, выбор и настройку 3D стеков, настройку аппаратной композиции и портированных из Linux драйверов. В общем случае применение phgrafx позволяет выполнять простейшие манипуляции, но в более сложных сценариях это является источником неочевидных проблем в конфигурации графической подсистемы.
![]() | Снятие слепков памяти процесса, использующего некоторые графические драйверы, может приводить к отказу в обслуживании графического контроллера и даже всей системы. При настройке графической подсистемы настоятельно рекомендуется отказаться от использования утилиты dumper. |
Выбор драйверного обеспечения осуществляется либо по PCI идентификатором устройства, либо по платформе. Подробности рассмотрены ниже в этом параграфе.
Формат конфигурационного файла и доступные для редактирования параметры детально описаны на соответствующей странице.
В минимальном исполнении следует настроить следующие поля конфигурационного файла:
device {photon {driver {drivername=skylakemodeopts=}}drivername=skylakevid=0x8086did=0x1912deviceindex=0x0display {xres=1920yres=1080refresh=60pixel_format=argb8888}}
Краткое описание параметров
/lib/dll
с добавлением префикса devg-*
к имени загружаемой библиотеки. Выбор драйвера контроллера дисплеев может потребовать проведения некоторых несложных изысканий: ![]() | Имеется еще один VESA-совместимый драйвер – devg-svga.so. Его следует всячески избегать, поскольку на новых устройствах он может приводить к зависанию системы. |
0
) 0
): /etc/system/config/crtc-settings
и при первом точном их совпадении использует найденный modeline в качестве параметров видео-режима. Если же запись не найдена, менеджер будет пытаться подобрать настройки и с некоторой вероятностью это приведет к некорректному изображению. ![]() | Ряд драйверов мобильных графических контроллеров (например, devg-imx6x.so) игнорируют файл /etc/system/config/crtc-settings при определении modeline. При этом они имеют дублирующие опции для задания таймингов редима в конфигурационном файле драйвера (см. раздел Адресная настройка драйверного обеспечения; для драйвера devg-imx6x.so таким конфигурационным файлом является /etc/system/config/imx6x.conf). |
![]() | Конфигурационный файл можно /etc/system/config/crtc-settings можно модифицировать. При этом могут быть полезны утилиты ddc, umc и modeline-converter. |
После редактирования конфигурационного файла io-display сам менеджер следует перезапустить. Если уже запущены какие-либо графические приложения, включая оконное окружение Photon, их следует терминировать перед io-display. Применение новых параметров произойдет при повторном запуске менеджера.
При этом стоит отметить, что драйвер не всегда в состоянии точно предугадать физический порт контроллера дисплея, который требуется использовать для вывода изображения на экран. Для этого в конфигурационных файлах драйверов (см. раздел Адресная настройка драйверного обеспечения) могут присутствовать конкретные опции. Например, у драйвера devg-skylake.so для этих целей имеются опции 1st, 2nd и 3rd, определяющие физические интерфейсы для вывода максимум трех независимых изображений. Перечень этих параметров и их значения полностью определяет конкретный драйвер и его конфигурационный файл.
Полезные ссылки по теме
При настройке мультидисплейных конфигураций требуется ряд дополнительных действий.
В первую очередь следует внести в /etc/system/config/display.conf изменения вида:
device {photon {driver {drivername=skylakemodeopts=}}drivername=skylakevid=0x8086did=0x1912deviceindex=0x0display {xres=1920yres=1080refresh=60pixel_format=argb8888photon {enabled=1xoffset=0yoffset=0input_group=1}}display {xres=1920yres=1080refresh=60pixel_format=argb8888photon {enabled=1xoffset=0yoffset=1080input_group=1}}}
В такой конфигурации должно присутствовать несколько секций display по числу дисплеев. При этом в рамках каждой секции display доступны параметры, которые оказывают непосредственное влияние на мультидисплейные окружения:
1
. Кроме этих настроек ряд драйверов (например, devg-skylake.so) через свои конфигурационные файлы позволяют настраивать режим функционирования мультидисплейной конфигурации:
Выбор портов контроллера дисплеев в этом случае выполняется аналогично вышесказанному (также см. раздел Адресная настройка драйверного обеспечения).
Выбор драйверного обеспечения сервиса композиции
Многие модули графической подсистемы идентифицируют конфигурации сервиса композиции, оконного окружения и модульных драйверов через переменную окружения GRAPHICS_ROOT. Она должна указывать на директорию, содержащую конфигурационные файлы и драйверный набор для конкретной платформы. Обычно целевая директория располагается по адресу /usr/lib/graphics/<platform>
.
Кроме того, для успешной загрузки драйверных библиотек переменная окружения LD_LIBRARY_PATH должна быть настроена с учетом GRAPHICS_ROOT. Пример настройки переменных окружения:
export GRAPHICS_ROOT=/usr/lib/graphics/iMX6Xexport LD_LIBRARY_PATH=$GRAPHICS_ROOT:$LD_LIBRARY_PATH
Данные системные переменные должны быть установлены для процесса io-display (при использовании совместно с devg-screen.so), а также для каждого клиента графической подсистемы, включая Photon. Для io-display сложно однозначно указать способ установки переменных, поскольку он может запускаться как из загрузочного образа (тогда переменные нужно устанавливать прямо в файле построения загрузочного образа), так и из загрузочных скриптов /etc/system/sysinit
или /etc/rc.d/rc.*
(переменные ы этом случае должны устанавливаться в этих же скриптах). Кроме того io-display может быть запущен вручную из консоли. Для клиентских же приложений удачным способом установки переменных является файл profile.
Выбор 3D стека
Данный вопрос включает следующие аспекты:
Поиск и подгрузку конкретной реализации 3D стека обеспечивает загрузчик GLVND. Идентификация библиотек производится также через переменную окружения GRAPHICS_ROOT, рассмотренной выше. В соответствии с содержимым конфигурационного файла $GRAPHICS_ROOT/graphics.conf загрузчик подгружает перечисленные в нем библиотеки и позволяет прикладному коду работать единообразно даже при переключении на другие стеки (для этого требуется перезапуск приложения с переназначенными переменными окружения).
В настоящий момент поддерживаются следующие стеки:
![]() | Все стеки представляют собой библиотеки акселерации OpenGL/OpenCL со вспомогающими компонентами. Они размещаются в директориях вида /usr/lib/graphics/<platform> , где <platform> соответствует целевой системе. |
Выбор стека следует производить согласно их описанию и перечню поддерживаемых устройств. Если GLVND не может найти стек, соответствующий установленным переменным окружения, то будет произведена попытка загрузить библиотеки проекта Mesa, которые на поддерживаемых платформах размещаются по адресу /usr/lib/graphics/mesa
.
Основные настройки сервиса доступны в конфигурационном файле $GRAPHICS_ROOT/screen.conf. Подробнее см. статью Композитная оконная подсистема и менеджер окон.
Многие драйверы (особенно драйверы контроллеров дисплеев) имеют собственные конфигурационные файлы, которые располагаются в директории /etc/system/config/
. Общее правило таково, что конфигурационный файл должен называться по имени драйвера, но без префикса. Например, драйверу devg-chips.so соответствует конфигурационный файл /etc/system/config/chips.conf. Однако, ряд драйверов поддерживает несколько принципиально разных семейств контроллеров, что требует наличия нескольких конфигурационных файлов. такая ситуация, например, у драйвера devg-skylake.so. Выяснить точное назначение и имена конфигурационных файлов можно только на странице с описанием драйвера.
В конфигурационном файле драйвера могут настраиваться режим работы контроллера (клонирование изображения, мультидисплейность, ...), активироваться расширенный отладочный вывод, включаться опциональные возможности, определяться физические интерфейсы и порты контроллера дисплея и др. У мобильных и встраиваемых контроллеров через конфигурацию может также происходить точная настройка таймингов видео-режима и LCD-панелей.
Конфигурационный файл драйвера определяется через параметр modeopts в /etc/system/config/display.conf:
device {photon {driver {drivername=skylakemodeopts=}}drivername=skylakemodeopts=/etc/system/config/skylake.conf...}
Если параметр modeopts не указан, то драйвер может попытаться открыть свой конфигурационный файл по стандартному пути или использовать значения собственных параметров по умолчанию.
Модули ввода для композитного окружения, а также соответствующее оконное окружение могут быть настроены в соответствии с параметрами, перечисленными в $GRAPHICS_ROOT/screen.conf. Настройка оконного менеджера детально описана в разделе Настройка оконной подсистемы.
![]() | В некоторых случаях причиной проблем является драйвер devi-hirun (подробнее см. на странице с его описанием). Если в выводе pidin ar присутствует данный драйвер, то можно попробовать его переименовать/удалить из системы. |
![]() | В режиме UEFI возвращение в текстовый режим сейчас не реализовано. Способ имеется, но он связан с написанием собственных скриптов пользовтаеля. Причиной проблемы является то, что собственно текстового режима с честным символьным генератором UEFT загрузчики не предоставляют, включая по умолчанию графический режим и выводя символы попиксельно. |
Предыдущий раздел: Руководство пользователя