Обзор Domicile Desktop 1.1.2: рабочее окружение Linux, в котором композитором служит Chromium

2026-11-09 404 комментарии
Domicile Desktop – экспериментальное рабочее окружение Linux: композитор Wayland в нем – модифицированный Chromium, а рабочий стол – веб-страница. Разбираем установку, оболочку Manganese и настройку через Settings, domicile.json и domicile.tsx с проверенными примерами.

Domicile Desktop – экспериментальное рабочее окружение для Linux, в котором роль композитора Wayland выполняет модифицированный браузерный движок Chromium. Весь рабочий стол – это одна веб-страница: окна обычных приложений и сайты размещаются на ней как HTML-элементы, а их расположение и внешний вид задаются средствами CSS и JavaScript.

Рабочий стол Manganese в Domicile 1.1.2: терминал foot с выводом apt policy domicile, domicile which-shell и free -h, рядом окно встроенного браузера с comss.ruDomicile 1.1.2 с оболочкой Manganese на нашем тестовом ПК: терминал и окно встроенного браузера рядом. Изображение: Comss.ru

Вместе с Domicile поставляется готовая оболочка Manganese – тайлинговый рабочий стол в духе Sway с панелью, лаунчером, приложением настроек и экраном блокировки. В обзоре разбираем, чем Domicile отличается от привычных окружений, как его установить, как настроить Manganese через приложение Settings и файл конфигурации и что можно сделать в модуле на React – от своей клавиши для терминала до собственной оболочки рабочего стола. Все примеры конфигурации мы запускали на тестовом ПК с Domicile 1.1.2.

Чем Domicile отличается от других рабочих окружений

В GNOME, KDE Plasma и других окружениях окна рисует композитор, а браузер – одно из приложений со своим движком внутри окна. В Domicile это одно целое: композитор Wayland написан на Rust и работает вместе с измененной сборкой Chromium. Окна обычных программ попадают прямо в систему отрисовки Chromium, без промежуточных снимков и копий, и становятся на странице элементами <app>, а сайты – элементами <webview>. Тайлинг, плавающие окна, скругленные углы и анимация задаются обычным CSS.

Страницу, которая рисует рабочий стол, в Domicile называют оболочкой (shell). Оболочка отвечает за панель, раскладку окон и внешний вид, а сам Domicile предоставляет ей экран блокировки, трей, уведомления, демонстрацию экрана, историю буфера обмена и настройку мониторов. Оболочку можно заменить на ходу командой domicile load-shell: открытые окна при этом не закрываются, сбрасывается только состояние самой страницы оболочки. Оболочки и их части, например панель или лаунчер, можно публиковать как пакеты npm.

Браузер встроен в рабочий стол: каждый сайт открывается отдельным окном рядом с приложениями и раскладывается так же. Расширения Chrome работают во всех окнах браузера, и для них каждый сайт на рабочем столе выглядит как вкладка.

Manganese – оболочка, которая работает сразу после установки. Она использует сочетания клавиш оконного менеджера Sway на клавише Meta (Windows), дает 10 рабочих столов, вкладки, стопки и разделение окон, плавающие окна и скрытый блокнот (scratchpad). В нее входят лаунчер, приложение Settings, история буфера обмена на 32 записи, снимки и запись экрана, уведомления, экран блокировки и браузер. Каждая часть Manganese – отдельный пакет, поэтому можно добавить на панель свой элемент или заменить лаунчер, оставив остальное как есть.

Проект распространяется под лицензией MIT, измененные файлы Chromium – под лицензиями Chromium. В репозитории пакетов проекта сейчас версии 1.0.0, 1.1.1 и 1.1.2, а на GitHub непрерывно выходят более новые сборки. Документация в репозитории описывает самые новые сборки, поэтому часть возможностей из нее в версии 1.1.2 еще нет – такие места мы отмечаем ниже. Разработчик прямо пишет, что большую часть кода, тестов и документации написал ИИ-ассистент Claude, а архитектуру и технические решения определяет сопровождающий проекта. Изменения проверяются тестами и ежедневным использованием, а не построчным просмотром человеком.

Требования и ограничения

Domicile работает только на 64-битных процессорах x86 (x86_64), сборок для ARM нет. Запускаются только приложения с поддержкой Wayland: Xwayland в Domicile нет, поэтому программы, которые умеют работать только с X11, не откроются. Приложения на GTK, Qt, SDL и Electron Domicile сам запускает в режиме Wayland. Разработчик регулярно проверяет SuperTuxKart, mpv, Blender, GIMP 3, LibreOffice и терминал foot.

ДистрибутивПакет
Debian 13, Ubuntu 24.04 и новее.deb, репозиторий current
Debian 12, Ubuntu 22.04.deb, репозиторий legacy
Fedora, RHEL 10.rpm
openSUSE Tumbleweed.rpm
Arch Linuxрепозиторий проекта или domicile-bin из AUR
NixOS, Nix в любом дистрибутивеflake

Сборки для видеокарт NVIDIA с проприетарным драйвером проверяются автоматически при каждой сборке движка. На видеокарте AMD разработчик работает каждый день, с Intel окружение проверяется вручную. Без видеокарты Domicile тоже запускается и рисует силами процессора, поэтому его можно попробовать в виртуальной машине.

У встроенного браузера нет сохранения паролей, автозаполнения и перевода страниц, входа в аккаунт Google и синхронизации Chrome, страниц chrome://, предварительного просмотра печати и режима «картинка в картинке». Пароли и ключи доступа предлагается хранить в расширении менеджера паролей, разработчик проверял расширение Bitwarden. Поддерживаются только расширения Manifest V3: uBlock Origin Lite работает, а классический uBlock Origin – нет.

Для элементов панели нужны системные службы: для уровня заряда батареи – UPower, для звука – PipeWire или PulseAudio и утилита pactl, для сети – NetworkManager, iwd или wpa_supplicant. Пакеты Domicile рекомендуют их к установке.

Установка

Domicile ставится из репозитория проекта, и дальше пакетный менеджер обновляет его вместе с системой. В Debian 13 и Ubuntu 24.04 и новее нужно добавить ключ и репозиторий, затем установить пакет:

sudo curl -fsSL -o /etc/apt/keyrings/domicile.asc https://packages.domicile-desktop.com/domicile.asc
echo "deb [signed-by=/etc/apt/keyrings/domicile.asc] https://packages.domicile-desktop.com/apt current main" |
  sudo tee /etc/apt/sources.list.d/domicile.list
sudo apt update && sudo apt install domicile
Примечание. Доступ к серверу пакетов Domicile (packages.domicile-desktop.com) может быть ограничен в России на уровне интернет-провайдера. На нашем тестовом ПК ключ и список пакетов загрузились, а загрузка самого пакета обрывалась.

В Debian 12 и Ubuntu 22.04 в строке репозитория вместо current указывается legacy. В Fedora и RHEL 10 команды такие:

sudo tee /etc/yum.repos.d/domicile.repo <<'REPO'
[domicile]
name=Domicile
baseurl=https://packages.domicile-desktop.com/rpm/fedora
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.domicile-desktop.com/domicile.asc
REPO
sudo dnf install domicile

В openSUSE Tumbleweed:

sudo rpm --import https://packages.domicile-desktop.com/domicile.asc
sudo zypper addrepo --gpgcheck https://packages.domicile-desktop.com/rpm/opensuse domicile
sudo zypper install domicile

В Arch Linux проще всего установить пакет domicile-bin из AUR. Команды для репозитория проекта в Arch и модули для NixOS приведены в инструкции по установке. Пакеты самых новых сборок публикуются на странице выпусков проекта на GitHub.

После установки во всех дистрибутивах, кроме NixOS, нужно выбрать оболочку Manganese в файле конфигурации. Его можно создать двумя командами:

mkdir -p ~/.config/domicile
echo '{ "shell": "@domicile-desktop/manganese" }' > ~/.config/domicile/domicile.json

Затем нужно выйти из системы и на экране входа выбрать сеанс Domicile. Чтобы сначала посмотреть на Manganese, не выходя из своего сеанса Wayland, достаточно запустить в терминале команду ниже – рабочий стол откроется в отдельном окне, а после закрытия окна вы вернетесь в привычное окружение:

domicile @domicile-desktop/manganese

Первые шаги

Рабочим столом Manganese управляют клавишей Meta. Лаунчер открывается сочетанием Meta+Space или Meta+D, а также кнопкой в левом углу панели. В нем ищутся приложения, файлы из домашней папки, сайты и запросы для поисковой системы, а справа показывается предпросмотр выбранной строки. Интерфейс Manganese и Settings – только на английском, и названия приложений в лаунчере тоже английские, даже если в системе есть русский перевод.

Лаунчер Manganese: список приложений с английскими названиями и предпросмотр выбранной строки Additional DriversЛаунчер: слева приложения, справа предпросмотр выбранной строки. Изображение: Comss.ru

Если ввести !, лаунчер покажет метки для поиска на сайтах: !gh ищет на GitHub, !im – в Google Картинках, !maps – в Google Картах, !wiki – в Википедии, !yt – на YouTube, а !p открывает приватное окно браузера. Без метки запрос уходит в поиск Google.

Лаунчер Manganese после ввода восклицательного знака: метки !gh, !im, !maps, !p, !wiki и !ytМетки для поиска на сайтах. Изображение: Comss.ru

Клавиши для терминала по умолчанию нет: терминал открывается из лаунчера, а свое сочетание можно назначить в модуле конфигурации (пример ниже). Новые окна выстраиваются плиткой: каждое открывается вкладкой рядом с активным, фокус следует за указателем мыши. Окно можно перетащить за заголовок или с зажатой клавишей Meta, а границу между окнами – потянуть мышью.

Сайты открываются из того же лаунчера: достаточно ввести адрес или запрос и нажать Enter. У каждого окна браузера своя адресная строка с кнопками навигации, разрешениями сайта, масштабом и загрузками.

На панели слева расположены кнопка лаунчера, трей и номера рабочих столов с окнами, в центре – часы, справа – переключатель раскладки (если раскладок несколько), переключатель темы, кнопка запрета гашения экрана, яркость и ночной свет, громкость, Bluetooth, сеть, батарея и уведомления. Элементы для оборудования, которого нет, не показываются.

Основные сочетания клавиш

КлавишиДействие
Meta+Space, Meta+DЛаунчер
Meta+H/J/K/L, Meta+стрелкиПеревести фокус на соседнее окно
Meta+Shift+H/J/K/L, Meta+Shift+стрелкиПереместить окно, за краем – на соседний монитор
Meta+Shift+QЗакрыть окно
Meta+F / Meta+Shift+FВо весь экран / на все мониторы
Meta+Shift+TabСделать окно плавающим или вернуть в плитку
Meta+Minus / Meta+Shift+MinusПоказать скрытый блокнот / убрать в него окно
Meta+1 … Meta+0Рабочие столы 1–10
Meta+Shift+1 … Meta+Shift+0Отправить окно на рабочий стол
Meta+W / Meta+S / Meta+EВкладки / стопка / окна группы рядом
Meta+Shift+VИстория буфера обмена
Meta+Shift+SpaceОткрыть скопированный адрес или найти скопированный текст
Meta+Shift+ReturnЗаблокировать экран
PrintСнимок экрана

В документации описан еще обзор рабочих столов по Meta+O, но он появился в более новых сборках: в версии 1.1.2 этого сочетания нет. На тачпаде работают жесты: тремя пальцами переключается фокус, четырьмя – рабочие столы и скрытый блокнот.

По клавише Print открывается окно Take a screenshot: в нем можно снять весь экран, монитор или отдельное окно либо выделить область мышью, а затем сохранить снимок кнопкой Save или скопировать кнопкой Copy. Снимки сохраняются в папку ~/Pictures/Screenshots, записи экрана – в ~/Videos/Screen recordings. История буфера обмена хранится только в памяти и очищается при выходе из системы.

Окно Take a screenshot в Manganese: выбор всего экрана, монитора или окна и выделенная область 1237 x 475 с кнопками Copy и SaveСнимок экрана: можно выбрать монитор, окно или выделить область. Изображение: Comss.ru

Настройка через Settings и файл domicile.json

У Manganese два способа настройки: приложение Settings, которое открывается из лаунчера, и файл ~/.config/domicile/domicile.json. Изменения в Settings применяются сразу и сохраняются в тот же файл, а файл рабочий стол перечитывает при каждом сохранении, не закрывая окна. Если в файле ошибка, рабочий стол продолжает работать с последними правильными настройками, а Settings показывает, в какой строке ошибка.

Страница SettingsЧто там настраивается
AppearanceТема, акцентный цвет, контраст, анимация, значки
KeyboardРаскладки клавиатуры
DisplaysПрофили мониторов
Power & lockГашение экрана и блокировка
PrivacyЗапрет приложениям на камеру, микрофон, геолокацию и другое
LauncherЧто исключить из поиска файлов
StartupПрограммы для автозапуска
ShellЧасы, ночной свет и яркость
ExtensionsРасширения браузера
Site permissions, Site dataРазрешения сайтов и данные, которые они хранят
CodeФайл конфигурации в текстовом редакторе

Базовая настройка: тема, раскладки, блокировка, часы

Этот файл подойдет для начала. Он включает темную тему с синим акцентным цветом, добавляет английскую и русскую раскладки, гасит экран через 10 минут без действий и блокирует через 15 минут, убирает секунды из часов и включает ночной свет с 21:30 до 7:00.

{
  "shell": "@domicile-desktop/manganese",
  "theme": { "mode": "dark", "accent_color": "#3584e4" },
  "input": {
    "keyboard": {
      "keymaps": [
        { "name": "us", "xkb_layout": "us" },
        { "name": "ru", "xkb_layout": "ru" }
      ]
    }
  },
  "idle": { "blank_after_seconds": 600, "lock_after_seconds": 900 },
  "shell_options": {
    "clock": { "format": "24h", "seconds": false },
    "nightLight": { "schedule": "custom", "from": "21:30", "to": "07:00", "warmth": 60 }
  }
}

Каждая раскладка в списке keymaps описывается целиком: поля xkb_layout, xkb_variant и xkb_options внутри записи не наследуются от соседних. Рабочий стол стартует на первой раскладке. После сохранения файла на панели появляется индикатор US/RU, по щелчку на нем раскладку можно сменить, а в Settings на странице Keyboard видны обе раскладки. Если нужна одна раскладка с опциями xkb, например Caps Lock в роли Escape, достаточно строки "keyboard": { "xkb_layout": "us", "xkb_options": ["caps:escape"] }.

Settings, страница Keyboard: раскладки us и ru с полями Name, Layout, Variant, Model, Rules и OptionsДве раскладки из файла на странице Keyboard в Settings. Изображение: Comss.ru

В документации файл начинается со строки "$schema": "https://domicile-desktop.com/config.schema.json" – она нужна редактору кода для подсказок. В версии 1.1.2 ее лучше не добавлять: рабочий стол файл принимает, а Settings открывается с ошибкой «Unrecognized key: "$schema"».

Автозапуск, приватность, расширения и темные сайты

Второй пример дополняет первый: новые разделы добавляются в тот же файл, а в раздел theme добавляется параметр force_dark. Здесь при входе запускается апплет NetworkManager, приложениям передается просьба не использовать камеру и микрофон, в браузер ставится расширение uBlock Origin Lite, сайт Comss.ru рисуется в темных тонах, а скрытые файлы и папки node_modules не попадают в поиск лаунчера.

{
  "startup": { "commands": [["nm-applet", "--indicator"]] },
  "lockdown": { "disable_camera": true, "disable_microphone": true },
  "extensions": { "web_store": ["ddkjiahejlhfcafbddmgiahcphecmpfh"] },
  "theme": { "mode": "dark", "accent_color": "#3584e4", "force_dark": ["www.comss.ru"] },
  "files": { "omit": ["**/.*", "node_modules"] }
}

Команды автозапуска записываются списком: сначала программа, затем ее аргументы. Они выполняются один раз при входе, а не при каждом сохранении файла. Апплет NetworkManager без параметра --indicator запускается, но значка в трее не показывает. Запреты из раздела lockdown передаются приложениям через портал, и их соблюдают только те программы, которые его поддерживают. Расширение указывается идентификатором из Chrome Web Store: uBlock Origin Lite поставился сам примерно за 15 секунд, его значок появился в трее слева на панели, а окно расширения – на русском. Если убрать идентификатор из списка, расширение удаляется.

Параметр force_dark пригодится для сайтов без своей темной темы, например Gmail (mail.google.com): пока на рабочем столе темная тема, браузер рисует их темными средствами Chromium. Указывается имя сайта, оно охватывает и поддомены.

Сайт comss.ru в браузере Domicile, нарисованный темным с помощью параметра force_darkComss.ru в темных тонах – так браузер рисует сайты из списка force_dark. Изображение: Comss.ru

Документация описывает и настройки тачпада и мыши в разделе input – естественную прокрутку, касание вместо щелчка, профиль ускорения. Но это возможность новых сборок: версия 1.1.2 отклоняет файл с ошибкой unknown field `touchpad`. По той же причине в 1.1.2 нет параметра cursor_hide_when_typing. Тему курсора, его размер и шрифты версия 1.1.2 принимает в разделе theme – это параметры cursor_theme, cursor_size, font_name и monospace_font_name.

Масштаб и мониторы

Новый монитор рабочий стол сам размещает справа от остальных. Чтобы задать положение, масштаб или поворот, создается профиль – описание набора мониторов. Применяется первый профиль, все мониторы которого подключены. В виртуальной машине экран называется Virtual-1, и такой профиль включает масштаб 125% на ходу:

{
  "output": {
    "profiles": [
      { "name": "vm", "displays": [{ "display": "Virtual-1", "scale": 1.25 }] }
    ]
  }
}

На обычном компьютере имена экранов выглядят как drm-1, а внешний монитор можно указать по производителю, модели и серийному номеру. Имена показывает команда wayland-info в строках wl_output. Кроме масштаба, для каждого монитора в профиле задаются положение (position), поворот (transform, например rotate-270) и выключение ("enabled": false).

Продвинутая настройка: модуль domicile.tsx

Сочетания клавиш, состав панели, правила для плавающих окон, обои и закладки лаунчера настраиваются уже не в JSON, а в модуле ~/.config/domicile/domicile.tsx на TypeScript с React. Модуль заменяет domicile.json, и оба файла сразу в папке лежать не должны: при входе Domicile откажется запускаться с ошибкой more than one … remove all but one. Отдельный проект, npm и сборка не нужны – React и пакеты @domicile-desktop/* берутся из установленного Domicile.

Экспорт Shell запускает оболочку с вашими параметрами, а каждый другой экспорт становится разделом конфигурации, как в JSON: theme, input, startup, shell_options и остальные. При первом входе с модулем оболочка собирается около 7 секунд, затем после каждого сохранения файла Domicile пересобирает ее примерно за 5 секунд, не закрывая окна. Settings при этом показывает настройки только для чтения, а сам модуль можно править на странице Code.

Settings, страница Code: модуль domicile.tsx в редакторе с импортами, разделами theme, lockdown, startup, extensions, files и inputМодуль domicile.tsx на странице Code в Settings. Изображение: Comss.ru

Свои клавиши, плавающие окна, обои и закладки

В этом примере к стандартным сочетаниям добавлены терминал на Meta+Return, переключение раскладки на Meta+Alt+Space и панель уведомлений на Meta+N. Калькулятор GNOME и окно ввода пароля pinentry всегда открываются плавающими, обоями служит фотография с Wikimedia Commons, а в лаунчере появилась закладка Comss.ru. Вместо foot подставьте свой терминал.

import { commonsPhoto, runManganese } from "@domicile-desktop/manganese";
import {
  DEFAULT_KEYBINDINGS,
  exec,
  keymap,
  notifications,
} from "@domicile-desktop/manganese-window-management/keyboard/commands";

export const theme = { mode: "dark" };

export const input = {
  keyboard: {
    keymaps: [
      { name: "us", xkb_layout: "us" },
      { name: "ru", xkb_layout: "ru" },
    ],
  },
};

export const shell_options = { clock: { format: "24h", seconds: false } };

export const Shell = runManganese({
  keybindings: {
    keybindings: {
      ...DEFAULT_KEYBINDINGS,
      "Meta+Return": exec("foot"),
      "Meta+Alt+space": keymap("next"),
      "Meta+n": notifications(),
    },
  },
  floating: [{ app: "pinentry" }, { app: "^org.gnome.Calculator$" }],
  wallpapers: {
    dark: [commonsPhoto("Moscow Kremlin from Kamenny bridge.jpg")],
  },
  applications: {
    bookmarks: [{ name: "Comss.ru", url: "https://www.comss.ru/list.php?c=whatsnew" }],
  },
});

Функция exec принимает программу и ее аргументы, для строки оболочки используется exec("sh", "-c", "…"). При переключении раскладки внизу экрана появляется подсказка с ее названием, а индикатор на панели меняется. Правило в floating сравнивает идентификатор приложения и заголовок окна с регулярными выражениями – калькулятор открывается плавающим по центру экрана. Функция commonsPhoto дает ссылку на фотографию с Wikimedia Commons по имени файла. В список обоев можно добавить и свой файл, папку с картинками или адрес изображения в интернете, а встроенные фотографии подключаются через DEFAULT_WALLPAPERS.

Калькулятор GNOME открыт плавающим окном по центру поверх терминала foot по правилу floatingКалькулятор по правилу floating открывается плавающим окном. Изображение: Comss.ru

Лаунчер Manganese: закладка Comss.ru из модуля domicile.tsx с предпросмотром сайтаЗакладка Comss.ru в лаунчере, справа – предпросмотр сайта. Изображение: Comss.ru

Свой элемент панели

Элементы панели – обычные компоненты React, поэтому свой элемент пишется в несколько строк. Этот пример добавляет рядом с основными часами время в Москве. Компонент и импорт стиля добавляются в тот же domicile.tsx, а параметр bar – в вызов runManganese:

import { DEFAULT_BAR, runManganese } from "@domicile-desktop/manganese";
import { useEffect, useState } from "react";
import "./moscow.css";

const Moscow = () => {
  const [now, setNow] = useState(new Date());
  useEffect(() => {
    const timer = setInterval(() => setNow(new Date()), 1000);
    return () => clearInterval(timer);
  }, []);
  const time = now.toLocaleTimeString("ru-RU", {
    hour: "2-digit",
    minute: "2-digit",
    timeZone: "Europe/Moscow",
  });
  return <span className="moscow">Москва {time}</span>;
};

export const Shell = runManganese({
  bar: { ...DEFAULT_BAR, center: [...DEFAULT_BAR.center, <Moscow key="moscow" />] },
});

Стиль лежит рядом, в файле ~/.config/domicile/moscow.css:

.moscow {
  font-size: 13px;
  font-weight: 500;
  margin-inline-start: 12px;
  opacity: 0.7;
  white-space: nowrap;
}

Панель состоит из трех колонок – left, center и right. Чтобы сохранить стандартные элементы и добавить свой, берется DEFAULT_BAR, а чтобы собрать панель полностью заново, все элементы перечисляются вручную: каждый стандартный элемент Manganese – отдельный пакет, например @domicile-desktop/manganese-bar-module-clock.

Manganese: на панели рядом с часами время «Москва 12:59» и индикатор RU, внизу подсказка Keymap ru Russian после переключения раскладкиЧасы Москвы рядом с основными, индикатор RU на панели и подсказка после переключения раскладки. Изображение: Comss.ru

Скругленные углы у окон

Файл CSS, подключенный в domicile.tsx, действует на всю страницу оболочки. Например, если добавить в модуль строку import "./look.css";, а в файл look.css записать правило ниже, у содержимого всех окон Manganese появятся скругленные углы:

app {
  border-radius: 14px;
}

Раскладка окон и ввод мышью при этом работают как обычно. Заголовки и вкладки Manganese рисует сам, поэтому правило скругляет только содержимое окна, и в верхнем левом углу под строкой вкладок проглядывает узкая полоска обоев.

Своя оболочка с нуля

Оболочку можно написать и полностью самостоятельно, в одном файле. Пример из документации раскладывает все окна в ряд со скругленными углами, обводит активное окно синей рамкой и добавляет внизу строку запуска программ, а Meta+Return открывает терминал:

/// <reference types="@domicile-desktop/react/elements" />

import { useDomicile } from "@domicile-desktop/react/domicile-provider";
import { mount } from "@domicile-desktop/react/mount";
import { useFocusedWindow, useWindows } from "@domicile-desktop/react/windows";
import { useEffect } from "react";

const Desktop = () => {
  const focused = useFocusedWindow();
  const windows = useWindows().filter((window) => window.parent === undefined);
  return (
    <main style={{ display: "flex", gap: 8, height: "100vh", padding: 8 }}>
      {windows.map((window) => (
        <app
          app-id={window.appId}
          key={window.appId}
          style={{
            borderRadius: 8,
            flex: 1,
            outline: window.appId === focused ? "2px solid royalblue" : "none",
          }}
        />
      ))}
      <Launcher />
    </main>
  );
};

const Launcher = () => {
  const { keyboard, processes } = useDomicile();
  useEffect(() => {
    keyboard.grab("Meta+Return");
    const unlisten = keyboard.on("shortcut", ({ chord }) => {
      if (chord === "Meta+Return") {
        processes.launch(["foot"]);
      }
    });
    return () => {
      unlisten();
      keyboard.ungrab("Meta+Return");
    };
  }, [keyboard, processes]);
  return (
    <form
      onSubmit={(event) => {
        event.preventDefault();
        const command = String(new FormData(event.currentTarget).get("command"));
        const argv = command.split(" ").filter(Boolean);
        if (argv.length > 0) {
          processes.launch(argv);
        }
        event.currentTarget.reset();
      }}
      style={{ bottom: 16, left: "50%", position: "fixed", translate: "-50%" }}
    >
      <input name="command" placeholder="Run an app, like firefox" />
    </form>
  );
};

export const Shell = mount(Desktop);

Файл shell.tsx можно положить в любую папку. В уже запущенном Domicile оболочка загружается из терминала командой domicile load-shell ./shell.tsx: Domicile сам собирает файл, открытые окна выстраиваются в ряд, а приложения запускаются из строки внизу. Фона в этом примере нет, поэтому за окнами белая страница. Вернуться к Manganese можно командой domicile load-shell ~/.config/domicile/domicile.tsx – все окна остаются на месте.

Своя оболочка из примера Domicile: терминалы, калькулятор и окно эмодзи в ряд, у активного окна синяя рамка, внизу строка запускаОболочка из примера: окна в ряд и строка запуска внизу. Изображение: Comss.ru

Поскольку окно приложения – это HTML-элемент, к нему применим любой CSS. Разработчик в описании проекта показывает такой пример – если подключить его в той же оболочке через import "./rot.css";, все окна повернутся на 17 градусов, станут полупрозрачными и получат скругленные углы:

app {
  transform: rotate(17deg);
  border-radius: 12px;
  opacity: 0.9;
}

Повернутые окна остаются рабочими: щелчки попадают по кнопкам калькулятора, а в терминале можно печатать.

Окна терминала, калькулятора и эмодзи повернуты на 17 градусов правилом CSS transform: rotate(17deg)Окна, повернутые на 17 градусов одним правилом CSS. Изображение: Comss.ru

Полезные команды

Команда domicile open --app <адрес> открывает сайт в отдельном окне без адресной строки. domicile install-app <адрес> устанавливает сайт как приложение и добавляет его в лаунчер, но только если у сайта есть манифест веб-приложения: так устанавливается, например, excalidraw.com, а для сайтов без манифеста команда сообщает, что установить их нельзя. Удаляет такое приложение domicile uninstall-app <адрес>.

Comss.ru, открытый командой domicile open --app в отдельном окне без адресной строкиComss.ru в окне веб-приложения, без адресной строки. Изображение: Comss.ru

domicile theme toggle переключает светлую и темную тему до выхода из системы, в файл конфигурации выбор не записывается. domicile screenshot делает снимок экрана, domicile screen-record записывает экран. Любую команду оболочки можно выполнить из терминала, например domicile send-shell workspace 2 переключает на второй рабочий стол. domicile which-shell показывает, какая оболочка запущена, а domicile check-config проверяет файл domicile.json.

Manganese в светлой теме после domicile theme toggle: окно браузера и терминал footСветлая тема после команды domicile theme toggle. Изображение: Comss.ru

Если что-то пошло не так

Если сеанс Domicile не запускается, нужно переключиться на консоль сочетанием Ctrl+Alt+F2, войти в систему и запустить domicile вручную: он напишет, какой файл конфигурации взял и почему остановился. Файл domicile.json стоит проверить командой ниже. Если он правильный, команда ничего не выводит, а при ошибке называет строку и столбец, например invalid config syntax: expected `,` or `}` at line 3 column 3. Модуль domicile.tsx эта команда не проверяет.

domicile check-config ~/.config/domicile/domicile.json

Терминал foot: domicile check-config на файле с ошибкой выводит invalid config syntax и код 1, на правильном файле – код 0Проверка файла с ошибкой и правильного файла командой domicile check-config. Изображение: Comss.ru

В Ubuntu 24.04 и новее для движка браузера должен быть загружен профиль AppArmor из пакета – если его нет, пакет нужно переустановить. Если экран не разблокируется паролем, значит, отсутствует служба проверки пароля domicile в /etc/pam.d. В этом случае нужно переключиться на консоль сочетанием Ctrl+Alt+F3, исправить файл и вернуться: открытые окна не пропадут.

Если рабочий стол подтормаживает под нагрузкой, нужно проверить, установлен ли rtkit, и добавить пользователя в группу domicile, после чего выйти и войти снова:

sudo usermod -aG domicile "$USER"

Если на панели нет батареи, звука или сети, не хватает служб UPower, PipeWire или PulseAudio с утилитой pactl, NetworkManager или iwd.

Наши наблюдения

Мы установили Domicile на тестовый ПК – виртуальную машину VMware с Ubuntu 24.04.4, четырьмя ядрами процессора и 8 ГБ памяти, без 3D-ускорения. Из репозитория была установлена версия 1.1.2 с движком Chromium 159: вместе с ней установлен 101 пакет зависимостей, загрузка составила 286 МБ, а на диске Domicile занял около 865 МБ. Сеанс Domicile запускается с экрана входа GDM.

Видеоускорения в виртуальной машине нет, поэтому Domicile рисует силами процессора. Окна, лаунчер и переключение рабочих столов при этом работают без заметных задержек. При прокрутке сайта процесс отрисовки занимает около половины одного ядра, а вся система – около 17% от четырех ядер, в простое нагрузки почти нет. Сразу после входа занято 1,2 ГБ памяти, из них около 700 МБ приходится на 19 процессов Domicile и его движка. С открытыми терминалом, браузером и Settings занято 1,4 ГБ. Действие ночного света на снимках экрана виртуальной машины не видно, а таймеры гашения и блокировки экрана мы не проверяли.

Интерфейс Manganese и Settings работает только на английском: часы показывают день недели и дату в формате «Monday 2026-11-09 12:48», окно снимка экрана называется Take a screenshot. Лаунчер берет из ярлыков приложений только английские названия: App Center вместо «Центра приложений», Calculator вместо «Калькулятора». Заголовки окон и вкладок браузера при этом русские, а GTK-приложения работают на русском. Кириллица после переключения на русскую раскладку вводится и в терминале foot, и в адресной строке браузера. Но сочетания с Ctrl в русской раскладке работают не везде: в foot вместо Ctrl+U пришла служебная последовательность символов, а Ctrl+L в браузере не выделил адресную строку.

Экран блокировки по Meta+Shift+Return принимает пароль пользователя. Ошибка в domicile.json не ломает работающий рабочий стол: прежние настройки остаются, уведомления об ошибке версия 1.1.2 не показывает, но Settings сообщает, в какой строке ошибка. Команда domicile --version в этой версии не работает и завершается ошибкой разбора параметров. В журнале постоянно появлялись ошибки обращения к RealtimeKit, потому что пользователь не входил в группу domicile, – на скорость работы в виртуальной машине это заметно не влияло.

Экран блокировки Manganese с полем PassphraseЭкран блокировки Manganese. Изображение: Comss.ru

Читаете нас в Google? Добавьте Comss.ru в источникиДобавьте Comss.ru в источники Google
Новые статьи будут чаще в «Главных новостях» Google. Без подписок и уведомлений, отключается в один клик. Нужен вход в аккаунт Google.Наши статьи будут чаще в «Главных новостях». Нужен вход в Google.
Добавить в Google
© .
Комментарии и отзывы

Нашли ошибку?

Новое на сайте