131 lines
12 KiB
Markdown
131 lines
12 KiB
Markdown
# HydraOS: минимальная графическая сессия хоста
|
||
|
||
Решение первого этапа, 13 октября 2026 года. Пользователь подтвердил Gentoo,
|
||
устанавливаемый ISO, ASUS TUF Dash F15 FX517ZC и автономную разработку.
|
||
|
||
## Назначение
|
||
|
||
HydraOS должна стать устанавливаемым Linux-дистрибутивом для одновременной
|
||
работы нескольких виртуальных машин. Пользователь видит рабочий стол выбранной
|
||
VM на весь экран и переключает машины горячими клавишами. Хост обеспечивает
|
||
оборудование, сеть и управление VM; его графический интерфейс обычно незаметен.
|
||
|
||
Подтверждённые требования: минимальная оболочка хоста по умолчанию, отсутствие
|
||
впечатления вложенных окон, переключение клавишами, совместимость управления
|
||
VM с другими окружениями хоста. Гостевые окружения выбираются независимо.
|
||
Gentoo выбрана основой будущего дистрибутива. Первый этап проверяет
|
||
графическую сессию до изготовления установочного ISO.
|
||
|
||
## Решение первого этапа
|
||
|
||
Предлагается labwc как композитор стандартной сессии и отдельный SPICE-просмотрщик
|
||
для каждой VM. Панель, меню рабочего стола, оформление окон и обычные сочетания
|
||
оконного менеджера в этой сессии не нужны. На физическом экране всегда находится
|
||
один полноэкранный просмотрщик. Его обычный интерфейс должен быть скрыт; выбор
|
||
USB и восстановление доступа к хосту остаются доступны по явному действию.
|
||
|
||
Первый прототип рассчитан на один физический экран. Режим без рамок включает
|
||
отсутствие всплывающей панели просмотрщика при подведении указателя к краю.
|
||
До основной реализации отдельно проверяются два условия: сохранение
|
||
зарезервированных клавиш хоста при захвате ввода SPICE и возможность явно
|
||
открыть управление USB при скрытом интерфейсе просмотрщика. Если выбранный
|
||
режим remote-viewer этого не допускает, способ управления пересматривается;
|
||
доступность этих функций пока не считается подтверждённой.
|
||
|
||
Несколько VM и их просмотрщики продолжают работать при переключении. Меняется
|
||
видимый просмотрщик, а не питание или состояние гостя. Переключение не должно
|
||
требовать повторной загрузки ОС или подключения к SPICE.
|
||
|
||
Существующий прототип `/home/workspaces/niri-vm-lab` служит источником проверенных
|
||
решений для виртуального оборудования и сети. Его работающие VM и диски не
|
||
используются как тестовые объекты новой графической сессии.
|
||
|
||
## Границы компонентов и совместимость
|
||
|
||
- Управление VM: параметры QEMU, отдельные диски, запуск, состояние, штатное
|
||
выключение, приватные сокеты QMP и SPICE. Этот компонент не вызывает labwc
|
||
или Niri и не требует работающей графической сессии.
|
||
- Запуск просмотрщика: подключение к выбранной VM. В обычном окружении хоста
|
||
просмотрщик может работать окном; графический backend определяется средой.
|
||
- Сессия HydraOS: настройка labwc, полноэкранный показ, фокус, горячие клавиши
|
||
переключения и восстановление после закрытия просмотрщика.
|
||
- Упаковка дистрибутива: ядро, драйверы, пакеты, запуск сессии, установка и
|
||
обновления. Это следующий самостоятельный этап после проверки оболочки.
|
||
|
||
В KDE, GNOME и других окружениях хоста должны оставаться доступны общие команды
|
||
управления и оконные просмотрщики. Специальная политика захвата клавиатуры и
|
||
переключения полноэкранных VM гарантируется только после проверки конкретной
|
||
сессии. Установка другой оболочки не должна менять формат профилей или дисков.
|
||
Одновременная работа нескольких полноценных сессий хоста и передача физического
|
||
экрана между ними в первый этап не входят.
|
||
|
||
## Ввод и поведение при сбоях
|
||
|
||
В стандартной сессии Meta, Alt+Tab и переключение раскладки передаются гостю.
|
||
Для хоста резервируются Ctrl+Alt+Shift+Left/Right для смены VM и отдельное
|
||
аварийное сочетание Ctrl+Alt+Shift+Escape для освобождения ввода и доступа к
|
||
локальному управлению. Клавиши яркости управляют физическим экраном хоста.
|
||
Общий буфер обмена и общие папки не включаются автоматически.
|
||
|
||
Завершение или сбой просмотрщика либо композитора не выключает VM. Повторный
|
||
запуск сессии подключается к работающим машинам. Ошибка подключения показывается
|
||
коротким сообщением с возможностью повторить подключение или открыть аварийный
|
||
терминал; она не приводит к автоматическому сбросу VM.
|
||
|
||
Управляющие команды не передаются через гостевую клавиатуру. Горячие клавиши
|
||
хоста должны срабатывать и при захваченном вводе просмотрщика. Отключение всех
|
||
привязок labwc через ToggleKeybinds не подходит без проверки аварийного выхода
|
||
и переключения VM.
|
||
|
||
## Проверка перед упаковкой в ISO
|
||
|
||
Используются отдельные временные VM и диски. Сначала проверяется вложенная
|
||
тестовая сессия, затем самостоятельная сессия на TTY: первая не доказывает
|
||
корректность захвата клавиш или работу физического экрана.
|
||
|
||
Критерии приёмки:
|
||
|
||
1. Два гостя переключаются клавишами без рамок, панели и интерфейса просмотрщика.
|
||
2. Фоновая задача в скрытой VM продолжает работу; QEMU не перезапускается.
|
||
3. Meta, Alt+Tab, раскладка и указатель работают в госте, а переключение VM,
|
||
яркость и аварийный выход остаются доступны хосту.
|
||
Проверяется также смена VM при удерживаемых модификаторах и кнопке мыши:
|
||
в покинутом госте не остаются зажатыми клавиши, а в новом не возникают
|
||
случайные действия из-за переданных отпусканий или состояния ввода.
|
||
4. После закрытия просмотрщика или сессии VM остаются доступны по сети;
|
||
повторное подключение восстанавливает изображение.
|
||
5. В обычной сессии хоста работает оконный просмотрщик и общее управление VM.
|
||
6. Измеряются задержка переключения и обновление скрытых поверхностей. Замена
|
||
композитора не считается доказательством исправления ограничений VirGL/SPICE
|
||
или достижения 144 FPS. Если существующие просмотрщики не обеспечивают
|
||
требуемое поведение, выбор способа вывода пересматривается до сборки ISO.
|
||
|
||
На этом этапе не создаются собственный композитор, графическая панель управления,
|
||
установщик или механизм обновления дистрибутива. Сначала проверяется пригодность
|
||
минимальной сессии для ежедневного использования.
|
||
|
||
## Основания выбора
|
||
|
||
- [labwc](https://labwc.github.io/) и его
|
||
[действия](https://labwc.github.io/labwc-actions.5.html): готовые механизмы окон,
|
||
полноэкранного режима, рабочих пространств и клавиатурного управления.
|
||
- [Cage](https://github.com/cage-kiosk/cage): вариант для одного собственного
|
||
приложения HydraOS; самостоятельное управление несколькими просмотрщиками
|
||
потребует дополнительной реализации.
|
||
- [Weston kiosk-shell](https://wayland.pages.freedesktop.org/weston/toc/kiosk-shell.html):
|
||
полноэкранные приложения и распределение по экранам; переключение VM придётся
|
||
дополнительно проектировать.
|
||
- [Smithay](https://github.com/Smithay/smithay): основа собственного композитора
|
||
на Rust, с существенно большим объёмом ответственности за графику и ввод.
|
||
|
||
## Уточнения реализации
|
||
|
||
- Python 3.11+ и стандартная библиотека для переносимого CLI `hydra`.
|
||
- labwc >= 0.20.0: обязательные host bindings используют overrideInhibition.
|
||
- Профили TOML, состояние и приватные Unix-сокеты QMP/SPICE разделены.
|
||
- Meta/Alt+Tab и default mouse bindings хоста не подключаются.
|
||
- Полный проект ведётся автономно; локальные патчи зависимостей разрешены.
|
||
- Сборка Gentoo идёт в отдельном builder; физические диски не являются целями тестов.
|
||
- Для первой версии выбран Gentoo systemd stage3: logind, cgroups и независимые
|
||
службы VM; выбор init является реализационной деталью, не требованием пользователя.
|