Композитор Wayland на smithay: сессия, xdg-shell, ввод, рендеринг через OpenGL ES с отслеживанием повреждений. Протоколы xdg-decoration, viewporter и presentation-time. Окна в стиле Windows 11: заголовок с названием и кнопками, перетаскивание, изменение размера за края и углы, сворачивание и разворачивание. Панель задач с подписями окон, часами и переключателем рабочих областей. Меню «Пуск» со списком приложений и поиском в текущей раскладке. Переключение окон по Alt+Tab с подтверждением при отпускании Alt. Собственный растровщик текста на fontdb + fontdue с гамма-коррекцией покрытия: без хинтинга штрихи на мелком кегле выходят рваными. Приложения запускаются в отдельной сессии D-Bus, иначе однопользовательские программы находят уже запущенный экземпляр во внешней сессии и открывают окно не в Lark. 127 тестов, clippy без замечаний.
6.2 KiB
6.2 KiB
Дорожная карта Lark DE
Фаза 1: Фундамент (композитор)
- Инициализация Wayland сессии (сокет, xdg-output, проверка вложенным клиентом)
- Обработка ввода: клавиатура, мышь, прокрутка
- Протокол xdg-shell для приложений (создание, конфигурирование, коммиты)
- Базовый рендеринг окон (GLES через smithay, damage tracking)
- Управление окнами: каскадное размещение, фокус по клику, очистка при закрытии
- Панель задач с кнопками окон и переключением фокуса
- Сворачивание, разворачивание и закрытие окон (Super, Super+Shift, Super+Delete; кнопки заголовка и панели)
- Декорации окон в стиле Windows 11 (CSD): заголовок с подписью, кнопки, перетаскивание
- Изменение размера окон мышью за край рамки и за углы
- Переключение окон по
Alt+Tabсо списком и подтверждением - Переключение рабочих областей (Super+1..4, Super+Shift+цифра, Ctrl+Super+стрелки)
- Протоколы presentation-time, viewporter, xdg-decoration
- Интеграция XWayland
- Бэкенд DRM/KMS для запуска без окна winit
Не сделано в Фазе 1 и почему:
- XWayland. Требует отдельного запуска
Xwayland-сервера, прокси поверхностей X11 в сцену smithay и синхронизации окон двух протоколов. Это объём больше, чем весь сделанный композитор, и проверить его можно только на X11-клиенте, которого в тестовой системе нет. - DRM/KMS. Бэкенд нужен для запуска без окна winit — то есть на «голом» железе. В тестовой среде нет ни DRM-устройства, ни KMS-карты: код пришлось бы писать вслепую и нечем было бы проверить. Требуется реальная машина с видеокартой.
Фаза 2: Shell (панель и меню)
- Панель задач: кнопка «Пуск», кнопки окон, выбор по клику
- Отрисовка подписей: собственный растровщик текста на fontdb + fontdue (подписи окон, заголовков, часов, меню)
- Меню Пуск со списком приложений и поиском (поиск набирается с клавиатуры, учитывает раскладку)
- Запуск приложений в Lark, а не во внешней сессии (каждое приложение получает свою шину D-Bus)
- Часы в системном трее (время и дата, локальная зона)
- Переключатель рабочих областей на панели
- Системный трей: сеть, звук, батарея
- Уведомления
Не сделано в Фазе 2 и почему:
- Сеть, звук, батарея. Нужен доступ к NetworkManager/D-Bus, PulseAudio и
/sys/class/power_supply. В тестовой системе этих служб нет, а заглушки показали бы неверные значения, что хуже отсутствия индикатора. - Уведомления. Требует протокола
org.freedesktop.Notificationsи меню уведомлений; в текущем виде это отдельный экран с историей, то есть примерно половина Фазы 2.
Фаза 3: Сервисы
- Управление питанием (яркость, сон, батарея)
- Сетевой апплет
- Аудио-микшер
- Автозапуск и управление сессией
Фаза 4: Приложения
- Файловый менеджер
- Терминал
- Центр настроек
Приложения перечислены в меню «Пуск» и запускаются командами xdg-open,
lark-terminal, lark-settings. Сами приложения ещё не написаны.
Фаза 5: Полировка
- Анимации и переходы
- Темы оформления (светлая/тёмная)
- Обои рабочего стола
- Горячие клавиши
(см. таблицу в
BUILD.md) - Мультиязычность (ru, en)
Горячие клавиши отмечены выполненными в том смысле, что механизм и набор сочетаний есть и работают. Назначение их пользователем в настройках — отдельная задача.
Стратегия тестирования
- Проверка композитора на виртуальном дисплее:
scripts/dev-run.shподнимает Xvfb, запускает композитор с клиентом и сохраняет снимок экрана - Модульные тесты: разбор событий ввода, распознавание сочетаний клавиш,
раскладка панели задач, меню «Пуск», геометрия декораций и зон изменения
размера, растровщик текста, раскладка клавиатуры —
cargo test - Разработка и тестирование в виртуальной машине (QEMU/KVM с virtio-gpu или llvmpipe)
- CI на слабых конфигурациях (2 vCPU, 2 ГБ RAM)
- Профилирование через perf и tracing