Оконный менеджер Sway относится к семейству тайловых: он не даёт окнам хаотично перекрывать друг друга, а раскладывает их плиткой на весь экран и управляется почти целиком с клавиатуры. Это одновременно и композитор Wayland, то есть сама графическая сессия, а не надстройка над ней. Проект появился в 2016 году, стабильный релиз 1.0 вышел в апреле 2019, а версия 1.12 от мая 2026 принесла 138 изменений от 50 участников и опирается на библиотеку wlroots 0.20. Ниже речь о том, чем тайлинг отличается от привычных плавающих окон, как устроен конфигурационный файл Sway и почему работа с кодом в нём действительно ускоряется.

Чем тайлинг отличается от привычного окна поверх окна

В классических окружениях каждое новое окно открывается там, где сочтёт нужным приложение, и почти всегда накрывает предыдущее. Дальше начинается знакомая гимнастика: тянуть рамку, ловить заголовок, искать нужное окно среди стопки, щёлкать по панели задач. Половина этих движений не имеет отношения к самой работе.

Тайловый менеджер решает вопрос иначе. Окно при открытии автоматически занимает половину экрана или его часть, следующее делит остаток, и ничего никогда не перекрывается. Если открыты три окна, на экране видны все три. Геометрия выстраивается в виде дерева контейнеров: два окна лежат в горизонтальном контейнере, внутри можно создать вертикальный сплит и получить сетку любой сложности. Достаточно привычный приём из редакторов и браузеров, только здесь он работает для всей системы.

Поверх сплитов доступны два особых режима. Tabbed превращает контейнер в набор вкладок, как в браузере, а stacking складывает окна списком заголовков. Для десяти открытых логов или документации рядом с терминалом это удобнее любых сторонних менеджеров окон.

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

Установка и первый запуск из текстовой консоли

Sway собран во всех крупных дистрибутивах. На Arch Linux вместе с ним стоит поставить сразу привычную обвязку:

sudo pacman -S sway foot wmenu grim slurp wl-clipboard mako swaylock swayidle

В Debian и Fedora меняется только менеджер пакетов на apt или dnf. Дистрибутивы с фиксированным циклом несут не самую свежую версию: в Debian 12 лежит 1.7, в Arch rolling обновление до 1.12 приходит быстро. Для приложений, которые ещё не переехали на Wayland, нужен отдельный пакет XWayland, в Arch он называется xorg-xwayland, в Debian просто xwayland, в Fedora носит имя xorg-x11-server-Xwayland.

Первый запуск до неприличия прост. После входа в текстовую консоль достаточно набрать sway, и сессия поднимается меньше чем за секунду: стартовый фон, панель сверху, пустое рабочее пространство. Именно вход из консоли долгие годы считался рекомендуемым способом, а дисплей-менеджеры с графическим входом официально поддержали только в версии 1.12.

Отдельная история с видеокартами NVIDIA. До недавнего времени Sway на проприетарных драйверах NVIDIA отказывался стартовать вовсе, теперь вместо жёсткого отказа показывает информационное сообщение, а убрать его можно флагом --unsupported-gpu при запуске. Политика поддержки не изменилась, смягчились только последствия.

Выход защищён от случайного нажатия: по $mod+Shift+e открывается окно swaynag с предупреждением и кнопкой подтверждения, и только после явного щелчка сессия завершается.

Конфигурационный файл, который перечитывается без перезапуска сессии

Вся настройка Sway живёт в одном текстовом файле ~/.config/sway/config, общесистемный шаблон лежит в /etc/sway/config. Полный справочник открывается командой man 5 sway, и это редкий случай, когда man-страница читается как документация, а не как шифровка. Начать можно с копирования шаблона:

mkdir -p ~/.config/sway
cp /etc/sway/config ~/.config/sway/config

В начале файла принято объявлять переменные, чтобы дальше по конфигу не повторять значения:

set $mod Mod4
set $term foot
set $menu wmenu-run

$mod это главный модификатор всех привязок, по умолчанию назначена клавиша Super, то есть Windows-клавиша. Кто не хочет отрывать большой палец от клавиатуры, ставит Mod1 и работает через Alt. Терминалом по умолчанию выбран foot, лаунчером приложений wmenu, и оба сменили более старые варианты в свежих релизах: начиная с версии 1.11 дефолтное меню перестало зависеть от утилиты dmenu_path.

Главное отличие конфига Sway от классических систем настроек в том, как он применяется. После правки файла достаточно нажать $mod+Shift+c или выполнить в терминале команду swaymsg reload. Окна не закрываются, раскладка сохраняется, сессия продолжает жить. Можно доводить конфиг до идеала весь вечер, не теряя ни одного запущенного процесса.

Смотрим состояние системы через IPC-интерфейс:

swaymsg -t get_outputs
swaymsg -t get_workspaces
swaymsg -t get_tree

Первая перечисляет физические выводы с именами вроде HDMI-A-1 или DP-1, вторая показывает рабочие пространства, третья выводит дерево контейнеров с идентификаторами и размерами. Имена выводов пригодятся для настройки экранов:

output HDMI-A-1 resolution 1920x1080 position 1920,0
output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill

Если в конфиге допущена ошибка, при загрузке или перезагрузке конфигурации Sway показывает текст ошибки с номером строки, а сеанс продолжает работать на последней корректной версии настроек.

Привязки клавиш, сплиты и встроенный режим изменения размеров

Основу конфига составляют строки bindsym, каждая привязывает команду к сочетанию клавиш. Дефолтный набор выглядит так:

bindsym $mod+Return exec $term
bindsym $mod+Shift+q kill
bindsym $mod+d exec $menu
bindsym $mod+Shift+c reload

Команда kill закрывает сфокусированный контейнер, exec запускает внешнюю программу. Сплиты и раскладки управляются ещё четырьмя группами:

bindsym $mod+b splith
bindsym $mod+v splitv
bindsym $mod+e layout toggle split
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed

Здесь есть один неочевидный момент, на котором спотыкаются все новички. Допустим, открыты два окна бок о бок, а хочется третье снизу. Нажатие $mod+v перед созданием окна разделит только сфокусированное окно. Чтобы разбить пару целиком, сначала жмут $mod+a, команда focus parent поднимает фокус на родительский контейнер, и лишь потом задают сплит. Через неделю это доходит до автоматизма, но в первый день именно это объясняет большинство недоумений по поводу тайлинга.

Ручное изменение размера вынесено в отдельный режим, который включается по $mod+r:

mode "resize" {
    bindsym Left resize shrink width 10px
    bindsym Right resize grow width 10px
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"

Внутри режима стрелки меняют ширину и высоту с шагом 10 пикселей, выход по Escape или Enter.

Рабочие пространства нумеруются от $mod+1 до $mod+0, перенос окна на другое добавляет Shift к номеру. Отдельное удовольствие это scratchpad, выдвижной карман: по $mod+Shift+minus окно уходит с экрана в скрытый буфер, по $mod+minus мгновенно возвращается. Туда удобно убрать фоновый терминал с мониторингом или чат.

Форму плиток можно отполировать под вкус:

gaps inner 8
gaps outer 4
smart_gaps on
default_border pixel 2

Отступы включаются только при нескольких окнах на пространстве, если smart_gaps стоит в положении on, а рамки сжимаются до двух пикселей без заголовков. Даже здесь всё определяется текстовыми строками, никаких графических редакторов настроек не предусмотрено.

Обвязка из утилит для скриншотов, буфера обмена и блокировки экрана

Программы из мира X11 в Wayland-сессии не работают, поэтому экосистема собрала вокруг протокола собственный компактный набор:

  1. grim снимает экран целиком, slurp выделяет область мышью, вместе они дают привычный скриншот по фрагменту;
  2. пакет wl-clipboard добавляет команды wl-copy и wl-paste для системного буфера обмена прямо из терминала и пайпов;
  3. служба уведомлений mako показывает всплывающие сообщения в стиле, согласованном с тайлингом;
  4. связка swaylock и swayidle отвечает за блокировку экрана и действия по бездействию;
  5. панель waybar заменяет встроенную swaybar на гибкую альтернативу с модулями;
  6. утилита gammastep греет цветовую температуру экрана к вечеру.

Скриншот выделенной области укладывается в одну строку, где slurp возвращает grim координаты и размеры:

grim -g "$(slurp)" ~/screenshot.png

Отправить вывод команды в буфер обмена можно без мыши:

ip addr show | wl-copy

Дефолтный конфиг несёт готовый блок бездействия: через 300 секунд экран блокируется чёрной заставкой, ещё через 300 погасает, при пробуждении подсветка возвращается:

exec swayidle -w \
    timeout 300 'swaylock -f -c 000000' \
    timeout 600 'swaymsg "output * power off"' \
    resume 'swaymsg "output * power on"' \
    before-sleep 'swaylock -f -c 000000'

Раскладка клавиатуры задаётся секцией input, и русская раскладка встаёт без утилит из сторонних пакетов:

input type:keyboard {
    xkb_layout "us,ru"
    xkb_options "grp:alt_shift_toggle"
}

Клавиши громкости и яркости настраиваются с флагом --locked, благодаря которому срабатывание сохраняется даже на экране блокировки:

bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5%
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+

Настройка под разработчика, которая ускоряет работу с кодом

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

Помогает и встроенная функция возврата:

workspace_auto_back_and_forth yes

После неё повторное нажатие $mod+2 на пространстве 2 возвращает на предыдущее, и прыжки между двумя проектами идут одной клавишей.

Автоматическое распределение приложений по пространствам задают через критерии:

for_window [app_id="code"] move container to workspace 3
for_window [title=".*log.*"] mark logs
bindsym $mod+l [con_mark="logs"] focus

Первая строка отправляет редактор на своё пространство сразу при запуске, вторая вешает метку на окна с логами в заголовке, третья прыгает к ним по одной клавише в любой момент. Метки работают и без заголовков: пометить можно любой контейнер, а критерий con_mark находит его по имени.

Терминал foot здесь стоит не случайно. Он умеет режим сервера, когда один процесс держит готовое окно в памяти:

foot --server &

Новые окна при таком сервере открываются почти мгновенно, без запуска процесса заново, а терминалов за день создаются десятки.

На скорость работы с кодом влияет и то, что вкладки и стеки заменяют привычку держать по десятку окон. Десять открытых файлов документации ложатся в один контейнер tabbed, и перебор идёт клавишами фокуса, без поиска глазами. А режим layout toggle split по $mod+e мгновенно перестраивает сетку: горизонтальная компоновка стала тесной, одно нажатие, и терминалы легли столбцом.

Панель у Sway скромная: рабочие пространства и статус. Для нагрузки процессора, погоды и прочего ставят независимую панель waybar, конфиг при этом не меняется.

Ограничения, подводные камни и здравый смысл при переходе

Есть и обратная сторона. Приложения, не переехавшие на Wayland, работают через слой XWayland, и при масштабировании интерфейса их шрифты выглядят размыто. Часть софта с глобальными хоткеями и системными лотками капризничает, хотя список совместимого за последние годы заметно вырос.

Порог входа реален, и притворяться иначе нечестно. Самая частая ошибка новичка состоит в попытке перекроить дефолтный конфиг под чужие раскладки в первый же вечер. Разумнее неделями жить на стандартных привязках, меняя по одной строке за раз и перечитывая конфиг на лету. Конфигурация Sway прощает итерации, в отличие от систем, где каждый эксперимент с настройками требует перезапуска сессии.

По ресурсам разница с тяжёлыми десктопными окружениями ощутима: композитор вместе с панелью расходует заметно меньше памяти, а пустая сессия поднимается моментально. Движок wlroots перерисовывает только повреждённые области экрана, поэтому при движении курсора по статичной картинке процессор почти не нагружается, а на ноутбуке это лишние минуты от батареи.

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

Переход на тайлинг в итоге оказывается не про эстетику плиток, а про экономию микродвижений, которые копятся тысячами за рабочий день. Если типичный день сводится к терминалу, редактору и браузеру, Sway отдаёт контроль над экраном в один текстовый файл и делает работу плотнее. Если же жизнь проходит в тяжёлом графическом софте с нестандартными окнами, компромисс может оказаться дороже выгоды, и это тоже нормальный ответ.