После 8 месяцев разработки опубликован релиз композитного менеджера Sway 1.10, построенного с использованием протокола Wayland и совместимого с мозаичным оконным менеджером i3 и панелью i3bar. Код проекта написан на языке Си и распространяется под лицензией MIT. Проект нацелен на использование в Linux и FreeBSD.
Sway позволяет размещать окна на экране не пространственно, а логически. Окна располагаются, образуя сетку, оптимально использующую экранное пространство и позволяющую быстро манипулировать окнами только при помощи клавиатуры. Совместимость с i3 обеспечена на уровне команд, файлов конфигурации и IPC, что позволяет использовать Sway в качестве прозрачной замены i3, использующей Wayland вместо X11.
Для обустройства полноценного пользовательского окружения предлагаются сопутствующие компоненты: swayidle (фоновый процесс с реализацией ждущего режима), swaylock (хранитель экрана), mako (менеджер уведомлений), grim (создание скриншотов), slurp (выделение области на экране), wf-recorder (захват видео), waybar (панель приложений), virtboard (экранная клавиатура), wl-clipboard (работа с буфером обмена), wallutils (управление обоями рабочего стола).
Sway развивается как модульный проект, построенный поверх библиотеки wlroots, в которую вынесены все базовые примитивы для организации работы композитного менеджера. Wlroots включает бэкенды для
абстрагирования доступа к экрану, устройствам ввода, отрисовки без прямого обращения к OpenGL, взаимодействию с KMS/DRM, libinput, Wayland и X11 (предоставляется прослойка для запуска X11-приложений на базе Xwayland). Помимо Sway библиотека wlroots активно используется и в других проектах. Кроме поддержки языков Си/С++, предоставляются обвязки для языков Scheme, Common Lisp, Go, Haskell, OCaml, Zig, Python и Rust.
В новом выпуске:
- Задействованы новые возможности библиотеки wlroots 0.18, такие как поддержка Wayland-протоколов linux-drm-syncobj-v1,
alpha-modifier-v1, ext-foreign-toplevel-list-v1 и ext-transient-seat-v1, возможность использования цветовых профилей ICC для графического API Vulkan, поддержка операции сброса GPU и новый API отрисовки, не сохраняющий промежуточное состояние (stateless) и позволяющий получать информацию о пиксельных буферах из GPU. - Код отрисовки переписан с использованием добавленного в wlroots API на базе графа сцены (scene graph). Отмечается, что переработка позволила добиться повышения производительности.
- Обеспечено восстановление состояния после сброса GPU.
- Добавлена команда для использования ICC-профилей для устройств вывода.
- Улучшен алгоритм настройки устройств вывода.
- Предоставлена возможность использования расширения протокола
“tearing-control-v1” для отключения в полноэкранных приложениях вертикальной синхронизации (VSync) с кадровым гасящим импульсом, применяемой для защиты от появления разрывов при выводе (tearing). В мультимедийных приложениях появление артефактов из-за разрывов является нежелательным эффектом, но в игровых программах с артефактами можно смириться, если борьба с ними приводит к дополнительным задержкам. - Добавлена поддержка расширения проткола “ext-transient-seat-v1” для создания временных независимых сеансов (seat), рассчитанных на использование вместе с виртуальными устройствами ввода. Например, в приложениях для подключения к удалённому рабочему столу, таких как VNC-клиент wayvn, можно создать для каждого пользователя отдельный сеанс с виртуальными клавиатурой и мышью.
- Добавлена поддержка расширения проткола “ext-foreign-toplevel-list-v1” для получения информации о поверхностях, размещённых на самом верхнем уровне (toplevel). Протокол позволяет организовать закрепление окон поверх другого содержимого, например, для реализации панелей и переключателей окон.
- Добавлена поддержка пятой версии протокола “xdg-shell”, в которой предоставлены возможности для изменения позиции всплывающих окон и реализации кнопок свёртывания и раскрытия окна при декорировании окон на стороне клиента (CSD).
- Пакет dmenu_run, позволяющий использовать dmenu в роли интерфейса запуска приложений, убран из числа зависимостей в конфигурации по умолчанию.
- В файл конфигурации по умолчанию добавлено использование pactl для настройки горячих клавиш для изменения громкости и яркости, а также вызова утилиты grim для создания скриншота.
- Отключена по умолчанию поддержка устаревшего Wayland-протокола wl_drm, на смену которому пришёл протокол linux-dmabuf-v1.
- Удалена сборочная опция для включения поддержки Xwayland (включение Xwayland теперь зависит от сборочных настроек wlroots).