!!! Никогда не надо запускать SWAY (и любые другие WAYLAND-сессии) через sudo
wlroots (отдельно ставить не надо) – это библиотека для Wayland-композиторов (Sway, Wayfire etc.). Она управляет мониторами, окнами, вводом с клавиатуры и мыши, рендерингом через OpenGL. Sway не напрямую работает с GPU — он использует wlroots, а wlroots уже использует OpenGL (через Mesa) для отрисовки окон и эффектов.
# минимальный минимум для запуска sway:
sudo pacman -S mesa sway foot
# Для запуска X11-программ:
sudo pacman -S xorg-xwayland
Вместе со sway ставятся также и утилиты-помощники:
dbus-run-session -- sway
dbus-run-session sway
dbus-run-session sway > ~/.sway.log 2>&1
exec sway
Sway запустился. Единственное, что отображается на экране по умолчанию – это swaybar наверху. Swaybar – это встроенная панель, входящая в состав самого пакета sway. Настроить её можно в конфигурационном файле sway, в разделе bar.
# Win+Enter – Открыть окно терминала
swaymsg kill # Win+Shift+Q – закрыть окно
swaymsg exit # Win+Shift+E – выйти из sway (нужно будет подтвердить, кликнув мышкой)
swaymsg reload # Win+Shift+C – перезагрузка конфигурации без выхода из сессии
Первое, что бросается мне в глаза – это мелкий шрифт в терминале. Чтобы его поменять пишем в конфигурационный файл foot:
# ~/.config/foot/foot.ini
[main]
font=monospace:size=14 # увеличиваем шрифт с 8 до 14
dpi-aware=yes
# Можно скопировать шаблон конфига:
cp /etc/xdg/foot/foot.ini ~/.config/foot/foot.ini
Конфигурационный файл находится здесь: /etc/sway/config. Скопируем его в домашнюю директорию:
mkdir -p ~/.config/sway
cp /etc/sway/config ~/.config/sway/
Первое, что следует сделать для удобства – это добавить русскую раскладку и Compose-key:
# Раскладка клавиатуры: английская и русская,
# смена языка – на Alt+Shift:
input * {
xkb_layout us,ru
xkb_options grp:alt_shift_toggle
}
# То же, но добавим ещё Compose-key на правый Alt:
input * {
xkb_layout us,ru
xkb_options grp:alt_shift_toggle,compose:ralt
}
# grp:alt_shift_toggle — это переключение раскладки Alt+Shift
# compose:ralt — это назначение правого Alt как Compose-клавиши
# На моей новой клавиатуре нет правого Win. Но есть клавиша Menu.
# Мне нужно сделать так, чтобы при нажатии на клавишу Menu система воспринимала её как Win
# altwin:menu_win – это мы назначаем клавише Menu клавишу Win
# Добавим эту опцию в xkb_options:
input * {
xkb_layout us,ru
xkb_options grp:alt_shift_toggle,compose:ralt,altwin:menu_win
}
Вместе со sway у нас ещё загрузились в систему несколько обоев для рабочего стола – в папку /usr/share/backgrounds/sway/. А в config'е можно найти вот такую строку:
output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
Это означает, что файл Sway_Wallpaper_Blue_1920x1080.png должен отображаться в качестве фона рабочего стола. Но у нас рабочий стол чёрный. А всё потому, что эта команда в конфиге "под капотом" использует программу swaybg для того, чтобы установить обои. То есть swaybg у нас не установлен, но в дефолтном конфиге уже есть включённая настройка, которая использует swaybg для того, чтобы вывести на рабочий стол обои Sway_Wallpaper_Blue_1920x1080.png. Более того, если мы выйдем в TTY, то увидим что-то типа:
00:00:00.356 [sway/config.c:1083] failed to execute 'swaybg' (background configuration probably not applied): No such file or directory
А это значит, что дефолтные обои у нас уже настроены, но пока не установлен swaybg. Из-за этого обои и не отображаются. Поэтому просто устанавливаем swaybg и перезагружаем конфиг: Win+Shift+C. Всё. Обои подгрузились.
# Посмотретьтекущие настройки:
swaymsg -t get_outputs
# выведет допустимые разрешения и частоты
# или:
wayland-info ## пакет wayland-utils
# или:
wlr-randr ## wlr-randr
# Чтобы поменять разрешение и частоту навсегда, надо внести эту строку в ~/.config/sway/config:
swaymsg output HDMI-A-2 mode 1920x1080@144Hz
output HDMI-A-2 mode 1920x1080@144Hz
Чтобы можно было удобно запускать приложения:
sudo pacman -S wofi
# И создаём конфиг:
mkdir -p ~/.config/wofi
Запуск wofi:
wofi --show drun
# или:
wofi --show run
В конфиге запуск лаунчера уже назначен на сочетание клавиш Win+D. По умолчанию там указан лаунчер wmenu-run. Просто закомментируем его и назначим наш wofi.
# Your preferred application launcher
# set $menu wmenu-run
set $menu wofi --show drun
# Start your launcher
bindsym --to-code $mod+d exec $menu
AUR. Для работы необходим xwayland.
Чтобы можно было нормально выходить из системы.
При этом у меня по умолчанию не создался .desktop-файл в /usr/share/applications, поэтому wofi не запускает wlogout. Создадим сами wlogout.desktop в ~/.local/share/applications.
[Desktop Entry]
Type=Application
Name=wlogout
Exec=wlogout
Terminal=false
И обновим кэш:
update-desktop-database ~/.local/share/applications
Например, Featherpad.
Теперь неплохо бы установить браузер, чтобы можно было выходить в интернет. Firefox вроде бы как нативно поддерживает wayland.
sudo pacman -S firefox
Понадобится, если планируем подключать диски с файловой системой NTFS.
mpv – и вот тут уже пригодится VAAPI (intel-media-driver, libva-utils)
Чтобы проверить, установлен VAAPI, или нет, сначала поставим libva-utils:
sudo pacman -S libva-utils
# И запустим:
vainfo
Если VA-API работает — увидим что-то вроде «VA-API version: …», список поддерживаемых кодеков и драйвер. Если команда выдаёт ошибку ("cannot open driver", "va_openDriver failed" и т.п.), значит либо драйвер не установлен/не подходит, либо конфигурация не позволяет VA-API работать.
Если intel-media-driver не установлен, тогда ставим его:
sudo pacman -S intel-media-driver
# И опять проверяем:
vainfo
Установим mpv:
sudo pacman -S mpv
Чтобы проверить, использует ли mpv аппаратное декодирование, запустим видео файл:
mpv --hwdec=vaapi --vo=gpu --gpu-context=wayland some_video.mkv
# ...
# Using hardware decoding (vaapi).
# AO: [pipewire] 48000Hz stereo 2ch floatp
# VO: [gpu] 1024x576 vaapi[nv12]
# AV: 00:00:38 / 01:20:45 (1%) A-V: 0.000 Cache: 598s/150MB
Здесь мы видим строку: Using hardware decoding (vaapi). Значит, аппаратное декодирование работает.
Если мы хотим получить больше информации, например, узнать используется wayland или xwayland, то можно запустить команду вот так:
mpv --hwdec=vaapi --vo=gpu --gpu-context=wayland --msg-level=vo=v some_video.mkv
Чтобы все эти опции запускались, когда мы кликаем по файлу, нужно прописать их в конфиг:
# ~/.config/mpv/mpv.conf
hwdec=vaapi
vo=gpu
gpu-context=wayland
Теперь можно просто запускать файл командой:
mpv filename.mkv
ГПТ посоветовал такой конфиг для макс. качества изображения:
hwdec=vaapi
vo=gpu
gpu-context=wayland
profile=gpu-hq
scale=ewa_lanczossharp
cscale=ewa_lanczossharp
dscale=mitchell
video-sync=display-resample
interpolation
tscale=oversample
И тут придётся разобраться с ALSA, PipeWire... pavucontrol
Чтобы можно было регулировать громкость звука в системе, поставим pavucontrol:
sudo pacman -S pavucontrol
Ставим прогрмму imv или feh.
sudo pacman -S imv
# для того, чтобы смотреть характеристики изображения:
sudo pacman -S imagemagick
# Теперь можно открыть изображение:
imv images/screenshot.png
# Или посмотреть его характеристики:
identify images/screenshot.png
По умолчанию в waybar'е отображается только год, месяц, дата и текущее время. За этот вывод в конфиге отвечает вот этот блок:
#
# Status Bar:
#
# Read `man 5 sway-bar` for more information about this section.
bar {
position bottom
# When the status_command prints a new line to stdout, swaybar updates.
# The default just shows the current date and time.
status_command while date +'%Y-%m-%d %X'; do sleep 1; done
colors {
statusline #ffffff
background #323232
inactive_workspace #32323200 #32323200 #5c5c5c
}
}
Всю работу здесь выполняет эта строка:
status_command while date +'%Y-%m-%d %X'; do sleep 1; done
Создадим файл ~/.config/sway/status.sh:
#!/bin/bash
while true; do
# Получаем раскладку
layout=$(swaymsg -t get_inputs | jq -r '.[] | select(.type=="keyboard") | .xkb_active_layout_name' | head -n 1)
# Преобразуем в RU/EN
case "$layout" in
"Russian") layout="RU" ;;
"English (US)") layout="EN" ;;
esac
# Вывод строки в бар
echo "$layout | $(date +'%Y-%m-%d %H:%M:%S')"
sleep 1
done
Сделаем этот файл исполняемым:
chmod +x ~/.config/sway/status.sh
И теперь заменим status_command в конфиге на:
status_command ~/.config/sway/status.sh
А ещё мне не нравится чисто белый цвет текста в статус-баре. Мне больше нравится цвет: #BAC3BC.
bar {
...
colors {
statusline #bac3bc
...
}
}
Осталось перезагрузить конфиг sway (Mod+Shift+C) и в панели появится обозначение текущей раскладки.
## Запуск waybar:
exec_always "pgrep -x waybar || waybar"
# И надо обязательно закомментировать блок "bar", который отвечает за запуск swaybar, иначе при старте запустится дефолтный swaybar
# Устанавливаем их:
sudo pacman -S swaylock swayidle
# Запустить блокировщик с тёмным фоном:
swaylock -c 222222
#
swayidle -w \
timeout 300 'swaylock -c 222222' \
timeout 600 'swaymsg "output * dpms off"' \
resume 'swaymsg "output * dpms on"'
Можно просто добавить команду запуска swayidle в конфиг sway:
# ~/.config/sway/config
exec swayidle -w \
timeout 300 'swaylock -c 222222' \
timeout 600 'swaymsg "output * dpms off"' \
resume 'swaymsg "output * dpms on"'
# Получаю такое вот странное предупреждение, хотя всё работет:
swayidle -w timeout 10 'swaylock -c 222222'
# 2025-12-03 00:35:36 - [Line 277] Failed to parse get BlockInhibited property: Invalid argument
Строка означает: «не получилось корректно прочитать свойство BlockInhibited у logind, но идём дальше». Предупреждение полность безопасное. У swayidle есть логика общения с org.freedesktop.login1 через D-Bus. Причём включает она это автоматически, если login1 присутствует (как раз как у меня).
Проверка свойства BlockInhibited:
busctl introspect org.freedesktop.login1 /org/freedesktop/login1 | grep BlockInhibited
# .BlockInhibited property s "" emits-change
Посмотреть список ингибиторов:
systemd-inhibit --list
# Запускаем:
systemd-inhibit --what=idle sleep 10
# И проверяем ингибиторы:
systemd-inhibit --list
Для вывода уведомлений на экран установим mako:
sudo pacman -S mako
Проверить работу mako можно вот так:
notify-send "Заголовок" "А содержание самого сообщения."
В правом верхнем углу должно появиться сообщение. Чтобы его убрать нужно кликнуть по нему мышкой.
Закрыть сообщение:
# Закрыть текущее сообощение:
makoctl dismiss
# Закрыть все сообощения:
mako dismiss --all
Скриншоты экрана делаются с помощью grim:
sudo pacman -S grim
Сделаем скриншот экрана:
grim filename.png
Создадим уникальное имя для скриншота с датой и временем:
grim ~/Pictures/screenshot_$(date +%Y-%m-%d_%H-%M-%S-%3N).png
Частая практика в скриптах:
# Сначала присваиваем переменной путь к файлу:
FILE=~/Pictures/screenshot_$(date +%Y-%m-%d_%H-%M-%S-%3N).png
grim "$FILE"
А теперь всё это можно запихнуть в конфиг sway и назначить горячую клавишу:
# ~/.config/sway/config
bindsym --to-code $mod+Print exec sh -c 'file=~/Pictures/screenshot-$(date +%Y-%m-%d_%H-%M-%S-%3N).png; grim "$file" && notify-send "Скриншот" "Сохранён в $file"'
Теперь сочетание клавиш Win+PrintScreen будет создавать скриншот всего экрана и сохранять его в png-файл в папку ~/Pictures/.
slurp работает через протокол wlroots. Для работы ему нужно фокусное приложение или композитор, который позволяет ему рисовать рамку выделения.
sudo pacman -S slurp
Если запустить slurp без параметров, то по умолчанию применяется параметр -d (те есть выделить область):
slurp
# То же самое:
slurp -d
# Выделить один пиксель:
slurp -p
После того, как мы выбрали область, или кликнули по пикселю, то в терминал выводится либо координаты выбранной области, либо координата одного пикселя.
А теперь объединим grim и slurp – чтобы вывести скриншот определённой области на экране:
grim -g "$(slurp -d)" ~/Pictures/screenshot_$(date +%Y-%m-%d_%H-%M-%S-%3N).png
# Или с переменной:
FILE=~/Pictures/screenshot_$(date +%Y-%m-%d_%H-%M-%S-%3N).png
grim -g "$(slurp)" "$FILE"
А теперь всё это запихнём в конфиг Sway и назначим сочетание клавиш: Win+Shift+PrintScreen:
# ~/.config/sway/config
bindsym --to-code $mod+Shift+Print exec sh -c 'FILE=~/Pictures/screenshot_$(date +%Y-%m-%d_%H-%M-%S-%3N).png; grim -g "$(slurp)" "$FILE" && notify-send "Скриншот" "Сохранён в $file"'
Здесь нам поможет imagemagick:
sudo pacman -S imagemagick
Чтобы скопировать цвет в буфер обмена нам также понадобится wl-clipboard.
Создадим скрипт ~/scripts/pipette.sh, который будет определять цвет пикселя, по которому мы кликнули, копировать в буфер обмена его HEX и выводить в mako:
#!/usr/bin/env bash
# Делаем скрин выделенной области
COLOR=$(grim -g "$(slurp -p)" -t ppm - | magick - txt:- | grep -m1 -oP '#\w{6}')
# Если пользователь нажал Esc и цвет не выбран
[ -z "$COLOR" ] && exit 0
# Копируем цвет в буфер обмена
echo -n "$COLOR" | wl-copy
# Создаем маленькую цветную иконку 64x64 для уведомления
magick -size 64x64 xc:"$COLOR" /tmp/color.png
# Показываем уведомление
notify-send -i /tmp/color.png "Цвет скопирован" "$COLOR"
А теперь проверим рабочесть этого скрипта:
chmod +x ~/scripts/pipette.sh
~/scripts/pipette.sh
Если всё нормально, то добавим его в конфиг Sway. Привяжем к сочетанию клавиш Win+Shift+P:
bindsym --to-code $mod+Shift+p exec ~/scripts/pipette.sh
grim -g "$(slurp -p)" -t ppm - → PPM в stdout
-t ppm или --type ppm – это тип (format) изображения, который grim должен выдать -  означает "stdout", то есть не сохранять файл на диск, а вывести результат в стандартный поток вывода (терминал или пайп).magick - txt:- → превращает PPM в текст с цветами пикселей
- (первый дефис) – означает stdin, то есть читаем изображение из стандартного потока.txt: – это формат Text (текстовый), который ImageMagick умеет выдавать: каждый пиксель превращается в строку вида: 0,0: (255, 0, 0) #FF0000 srgb(255,0,0)- (второй дефис – после txt:) – выводить текст в stdout, а не в файл.grep -m1 -oP '#\w{6} → берёт первый HEX-цвет #RRGGBB.
Tesseract – это OCR-движок (Optical Character Recognition).
Устанавливаем его:
sudo pacman -S tesseract
И сразу же проверяем список доступных языков:
tesseract --list-langs
# List of available languages in "/usr/share/tessdata/" (2):
# afr
# osd
У меня доступны только африкаанс и osd — orientation & script detection (служебный, не для текста).
Установим английский и русский языки:
sudo pacman -S tesseract-data-eng tesseract-data-rus
# Также могут быть полезны:
# tesseract-data-deu – немецкий
# tesseract-data-fra – французский
Теперь можно протестировать распознавание языка:
tesseract ~/Pictures/kakashka.png ~/Pictures/output
# с явным указанием языка:
tesseract ~/Pictures/kakashka.png ~/Pictures/output3 -l eng
# можно смешивать языки:
tesseract ~/Pictures/kakashka.png ~/Pictures/output3 -l eng+rus
# вевести результат в терминал:
tesseract ~/Pictures/kakashka.png stdout -l eng
Создался файл ~/Pictures/output.txt. Обратите внимание, что tesseract автоматическ добавляет .txt к имени файлу.
А теперь выведем в терминал то, что захватили с экрана:
grim -g "$(slurp)" -t png - | tesseract stdin stdout -l eng
Создадим скрипт, который будет копировать всё, что мы захватили с экрана, в буфер обмена и выводить в mako сообщение:
#!/usr/bin/env bash
# Языки OCR (eng или eng+rus)
LANGS="eng+rus"
# Делаем скрин выделенной области и распознаём текст
TEXT=$(grim -g "$(slurp)" -t png - \
| tesseract stdin stdout -l "$LANGS" 2>/dev/null)
# Если пользователь нажал Esc или текст пуст
[ -z "$TEXT" ] && exit 0
# Копируем в буфер
echo -n "$TEXT" | wl-copy
# Укорачиваем текст для уведомления
PREVIEW=$(echo "$TEXT" | head -n 5)
# Уведомление
notify-send "OCR: текст скопирован" "$PREVIEW"
Делаем скрипт исполняемым и запускаем:
chmod +x ~/scripts/ocr.sh
~/scripts/ocr.sh
Если всё в порядке, добавим его в конфиг Sway:
# ~/.config/sway/config
bindsym --to-code $mod+t ~/scripts/ocr.sh