В конце октября 2024 года состоялся релиз открытого проекта пользовательского окружения Sway 1.10. Этот композитный менеджер построен с использованием протокола Wayland и полностью совместим с мозаичным оконным менеджером i3 и панелью i3bar. Исходный код проекта написан на языке C и опубликован на GitHub под лицензией MIT.
Проект Sway нацелен на использование в Linux и FreeBSD. Этот инструментарий позволяет размещать окна на экране не пространственно, а логически. Их можно располагать, образуя сетку, оптимально использующую экранное пространство и позволяющую быстро манипулировать окнами только при помощи клавиатуры. Совместимость с i3 обеспечена на уровне команд, файлов конфигурации и IPC, что позволяет использовать Sway в качестве прозрачной замены i3, использующей Wayland вместо X11.
По данным OpenNET, для обустройства полноценного пользовательского окружения в Sway предлагаются сопутствующие компоненты: 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 активно используется и в других проектах. Кроме поддержки языков C/C++, предоставляются обвязки для языков Scheme, Common Lisp, Go, Haskell, OCaml, Zig, Python и Rust.
Основные изменения и дополнения в Sway 1.10:
• задействованы новые возможности библиотеки 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).
Источник: habr.com