Введение
Программное обеспечение, управляющее различными частями экрана дисплея независимо друг от друга.
В вычислительной технике оконная система (или система окон) — это программный комплекс, управляющий различными частями экрана дисплея независимо друг от друга. Это тип графического пользовательского интерфейса (GUI), реализующий парадигму WIMP (окна, значки, меню, указатель) для пользовательского интерфейса. Каждому запущенному приложению выделяется обычно изменяемая в размере и обычно прямоугольная область экрана для отображения его графического интерфейса; эти окна могут перекрываться, в отличие от интерфейса с мозаичным расположением, где перекрытия не допускаются. Обычно вокруг каждого окна отображается рамка. Программирование как оформления окон, так и доступных виджетов внутри окна – графических элементов для непосредственного взаимодействия с пользователем, таких как ползунки, кнопки и т.п. – упрощается благодаря использованию наборов инструментов виджетов.
Технические детали
Основной компонент любой оконной системы обычно называют сервером отображения, хотя используются и альтернативные названия, такие как оконный сервер или композитор. Любое приложение, которое запускается и отображает свой графический интерфейс в окне, является клиентом сервера отображения. Сервер отображения и его клиенты взаимодействуют друг с другом посредством интерфейса прикладного программирования (API) или протокола связи, который обычно называют протоколом сервера отображения, при этом сервер отображения выступает посредником между клиентами и пользователем. Он получает все входные данные от ядра, которое, в свою очередь, получает их от всех подключенных устройств ввода, таких как клавиатура, устройства указания или сенсорный экран, и передает их соответствующему клиенту. Сервер отображения также отвечает за вывод данных клиентов на компьютерный монитор. Вывод звука обычно не управляется сервером отображения, но регулировка громкости звука обычно осуществляется через графические апплеты, и именно сервер отображения определяет, какие приложения находятся поверх других. Оконная система позволяет пользователю компьютера работать с несколькими программами одновременно. Каждая программа отображает свой графический интерфейс в собственном окне, которое обычно представляет собой прямоугольную область экрана. С точки зрения программиста, оконная система реализует графические примитивы, например, рендеринг шрифтов или рисование линии на экране. Она предоставляет абстракцию от графического оборудования для использования элементами графического интерфейса более высокого уровня, такими как менеджер окон. Протокол сервера отображения может поддерживать работу в сети или быть даже сетевой прозрачным, что упрощает реализацию тонких клиентов.
Сервер отображения
Сервер дисплея или оконный сервер — это программа, основной задачей которой является координация ввода и вывода данных для своих клиентов, операционной системы, аппаратного обеспечения и между самими клиентами. Сервер дисплея взаимодействует со своими клиентами посредством протокола сервера дисплея — протокола связи, который может быть сетевым прозрачным или просто поддерживать сетевое взаимодействие. Сервер дисплея является ключевым компонентом любого графического пользовательского интерфейса, в частности оконной системы. Отношения «сервер-клиент» в случае автономного сервера дисплея кажутся несколько парадоксальными, поскольку обычно под «сервером» подразумевается большая удалённая машина, в то время как автономный «сервер дисплея» представляет собой небольшую локальную систему, при этом большинство клиентов выполняются на более мощном центральном компьютере. Это объясняется тем, что сервер дисплея предоставляет сервисы для отображения и устройств ввода.
Х11
Одним из примеров сервера отображения является X.Org Server, который работает поверх ядра (обычно ядра, подобного Unix, такого как Linux или BSD). Он получает данные пользовательского ввода (например, от evdev в Linux) и передает их одному из своих клиентов. Сервер отображения также получает данные от своих клиентов, обрабатывает их, выполняет композицию и, в Linux, передает данные одному из трех компонентов ядра – DRM, gem или драйверу KMS. Этот компонент записывает данные в буфер кадра, а содержимое буфера кадра передается на подключенный экран и отображается. X зависит от GLX. Одной из реализаций концепции сервера отображения является X Window System, в частности, её фактически используемая версия – X.Org Server, а также клиентские библиотеки Xlib и XCB. X.Org Server является сервером отображения, но в своей текущей реализации он полагается на вторую программу – компоновщик окон (композитный менеджер окон) – для выполнения композиции. Примерами являются Mutter или KWin. Заметными примерами серверов отображения, реализующих протокол сервера отображения X11, являются X.Org Server, XFree86, XQuartz и Cygwin/X, а клиентские библиотеки, реализующие протокол сервера отображения X11, – Xlib и XCB.
Уэйленд
Дисплейные серверы, реализующие протокол Wayland, называются композиторами Wayland. Как и любой сервер отображения, композитор Wayland отвечает за обработку ввода и вывода для своих клиентов, и, в отличие от X11, также за композитинг. Примеры включают Weston, Mutter, KWin или Enlightenment. Композиторы Wayland взаимодействуют с клиентами Wayland посредством протокола Wayland. Этот протокол определяет, что клиенты могут напрямую записывать данные в буфер кадра с использованием API рендеринга EGL. Сервер отображения по-прежнему определяет, какое окно находится поверх остальных и, следовательно, видимо пользователю, а также отвечает за передачу данных об устройствах ввода от evdev своим клиентам. Wayland используется в той или иной степени в некоторых дистрибутивах Linux, таких как Fedora. Он также хорошо подходит для мобильных вычислений и был принят, например, проектами, ориентированными на смартфоны и планшеты, такими как Tizen, Sailfish OS и AsteroidOS. Реализация Wayland доступна по лицензии MIT в виде библиотек libwayland client и libwayland server. В настоящее время ведется работа по добавлению поддержки Wayland в ChromeOS.
Мир
Сервер отображения Mir поставляется со своим собственным протоколом сервера Mir, который отличается от используемых X11 и Wayland. Mir также поддерживает протокол X11. Он был разработан компанией Canonical и задумывался как сервер отображения по умолчанию для Ubuntu. Начиная с 2017 года, для настольных версий Ubuntu он был заменен сервером отображения Wayland. Реализации сервера Mir, libmir-сервера и клиентских библиотек libmir доступны под лицензией GPLv3.
Композитор кварца
Для семейства операционных систем Apple macOS Quartz Compositor выполняет функции сервера отображения и менеджера окон в системе оконного интерфейса.
Управление окнами на рабочем столе
Для Microsoft Windows, начиная с Windows Vista, Desktop Window Manager обеспечивает использование аппаратного ускорения для отрисовки графического пользовательского интерфейса. Изначально он был разработан для реализации элементов нового пользовательского опыта "Windows Aero", который позволял использовать такие эффекты, как прозрачность, переключение окон с 3D-эффектами и другие. Он также входит в состав Windows Server 2008, но для его работы требуется установить компонент "Desktop Experience" и совместимые графические драйверы. Начиная с Windows 8, DWM нельзя отключить, и в случае отсутствия подходящей видеокарты он работает в программном режиме.