На острие прогресса: sway + Wayland в OpenBSD

Опубликовано 10.10.2024 в OpenBSD

Говорят, о вкусе устриц имеет смысл спорить лишь с теми, кто их ел. Я бы даже уточнил: с теми, кто с них дристал. Рассуждать о вкусе устриц ты вправе только если сначала добирался до аэропорта, проходил там унизительный досмотр, потом мучительные часы корчился втиснувшись в кресло самолета, чтобы прибыть туда, где визгливые плюющиеся азиаты, немытые заразные негры или еще какие пропитые рыбаки наковыряют тебе из загаженного, воняющего гнилью моря этих самых устриц... А, забыл: сразу по прилету ты будешь дристать. Но не от устриц еще - от обычного, стандартного "поноса путешественника", настигающего практически всех, кто столкнулся даже не с болезнетворной, а с самой обычной микрофлорой (вроде кишечной палочки), просто другой, не той, что в твоих родных местах... А потом ты таки попробуешь устриц и возопишь: "И вот ради этих мерзотных соплей я потратил столько времени, денег и здоровья??? Все ради того, чтобы мне в рот вот этой дряни напихали???". Шучу, конечно. Никогда ты так не скажешь - именно потому, что потратил столько времени, денег и здоровья, ты будешь изо всех сил рационализировать свои поступки. И рассказывать потом, что истинный вкус устриц можно познать только если... да что ты, черт возьми, вообще можешь знать об устрицах?!! А потом ты снова будешь дристать. Теперь уже от устриц, зараженных экзотическими паразитами.

Так вот, переходим от затянувшейся преамбулы к, собственно, амбуле: на написание сего поста меня сподвигли мною же сказанные в чатике сопалатников слова (люблю, знаете ли, прислушаться к мнению умных людей). Обсуждалось, является ли Wayland будущим всего линукс-мира и превратятся ли (и когда) *BSD-пользователи в луддитов, сидящих на своей вымирающей X Window System из ранних 80-х.

Мое мнение - превратятся, и избежать этого можно только тоже перебравшись на Wayland, прогнувшись под мейнстрим. И нет, дело тут не в преимуществах и недостатках обеих систем, не в том, кто безопаснее, у кого в более правильную сторону развернута клиент-серверная модель и кто большим набором функций обладает. Дело в человеческих ресурсах: многие линукс-дистрибутивы с популярными DE (GNOME, KDE...) уже используюсь сеанс Wayland как вариант по умолчанию, оставляя возможность запуска в X11 как легаси-опцию. Поддержка работоспособности чего угодно в сеансе X11, соответственно, идет второй очередью, по остаточному принципу - это логично, рационально, силы нужно прилагать в первую очередь к обеспечению работоспособности мейнстрима.

Рано или поздно поддержку X11 вообще удалят из популярных DE, а потом, ровно по тем же соображениям рациональности, и из популярных графических тулкитов - QT, GTK... Хватит ли у BSD-сообщества сил, чтобы поддерживать совместимость всего вот этого вот с X11 собственными силами? Разумеется, нет. Может быть, меценаты или корпорации проспонсируют такую активность? Тоже, разумеется, нет, потому что... а зачем? В чем выгода для них?

В общем, нравится - не нравится, а рано или поздно на Wayland переезжать придется. И OpenBSD-комьюнити это, как мне кажется, понимает - работы по портированию Wayland и окружений, завязанных на него, ведутся довольно активно. Ну и чтобы не рассуждать о вкусе данного блюда чисто гипотетически, а прочувствовать его всем, так сказать, ректумом - я и решил оценить на себе текущую пригодность всего вот этого вот для повседневного использования.

Итак, дано: OpenBSD-current, где используется X11 (точнее, его местный форк Xenocara) и менеджер окон i3. Попытаемся смигрировать на Wayland + sway (Wayland-композитор, совместимый с i3, как заявляется, во всём: от юзер ыкспириенса и до формата конфиг-файла, о последнем, впрочем, ниже).

Установка всего необходимого проста, как гвоздь: # pkg_add sway dmenu. Чесслово, вот этого уже достаточно для получения работоспособной системы, остальное оно вытянет как зависимости (и их не так уж много), но для пущей радости я бы рекомендовал также поставить пакеты swayidle (позволит лочить экран по простою), swaylock (собственно, локер экрана) - кстати, к двум последним в образце конфига sway, поставляемого прямо вместе с ним, уже есть примеры настройки. Еще имеет смысл поставить swayimg - гляделку картинок, grim - инструмент для скриншотов под wayland (у а как иначе хвастаться своей крутизной на unixporn?) и специально заточенный под wayland терминал foot (тоже опционально, но уж переезжать - так переезжать!).

Далее: в OpenBSD нет легковесного менеджера дисплеев (вроде lightDM в этих ваших линуксах), способного запускать сеанс на wayland - суровые параноики запускают его поставляемым вместе с пакетом sway скриптом startsway.sh (кстати, небесполезно заглянуть в этот скрипт - там устанавливаются некоторые переменные окружения, в том числе там закомментирована установка переменной окружения MOZ_ENABLE_WAYLAND=1 потому как "пока не работает"). Собственно, наличие красивой графической пускалки сеанса на ноутбуке - это чистая вкусовщина, потому как при нормальном использовании ноутбука холодная загрузка с нуля явление нечастое (так-то ноут у меня обычно в суспенде или гибернейте), так что смирюсь. Но остановить демон xenodm, запускающий иксы, все-таки необходимо: # rcctl disable xenodm.

Далее: документация рекомендует тем, кто уже пользуется i3 просто скопировать свой текущий конфиг в соответствующую папочку для sway. Так вот: я настоятельно НЕ рекомендую так делать! Лучше поступить вот как: скопировать дефолтный конфиг, идущий вместе с пакетом sway, чтобы потом аккуратненько, осторожненько так кастомизировать его под свои нужды: $ mkdir -p ~/.config/sway && cp /etc/sway/config ~/.config/sway/config.

Зачем тут такие предосторожности: дело в том, что совместимость конфигов i3 и sway вовсе не так идеальна, как заявляют разработчики. Некоторые опции, нормально воспринимаемые i3, вызывают ошибку при старте sway - например, для отключения декораций окон в i3 можно применять new_window pixel 1, а вот sway такого не поймет, ему нужно default_border pixel 1. Сталкивался я и с другими подобными отличиями. Но самое печальное тут, что запуск $ sway -C (специальная опция, означающая "только проверь конфиг-файл на корректность") на текущий момент не работает, валится с ошибкой "Failed to create allocator". Так что дебажить конфиг приходится буквально так: вписали новую строчку, сохранили, жмем Mod+Shift+C (переконфигурация на лету работает, ура!) и если sway не ругнулся на кривой конфиг красной плашкой - продолжаем правку, иначе комментируем последнюю строчку и ищем другое решение.

Далее: что мы хотим сделать в первую очередь, оказавшись в рабочем сеансе sway? Разумеется, хвастливый скриншот и опубликовать его на каждом столбе! А вот чтобы опубликовать, хорошо бы настроить клавиатуру для работы с русским языком. Делается это так: всё в том же конфиге ~/.config/sway/config вписываем настройки по своему вкусу, например:

input "type:keyboard" {
    xkb_layout us,ru
    xkb_options grp:caps_toggle,compose:ralt
}

Кстати, тут можно применить разные настройки для разных клавиатур, если это вдруг кому-то нужно: вместо "type:keyboard" можно указать имя конкретного устройства ввода (список всех устройств ввода можно получить через $ swaymsg -t get_inputs. И вот тут кроется сразу жирный такой минус: среди устройств ввода я увидел свой тачпад, а вот хваленого "клитора" моего ThinkPad я там не увидел (в иксах он определяется), и решения не нашлось.

Еще чуть-чуть про переключение раскладки клавиатуры: в i3 я пользуюсь вот этим вот решением для запоминания раскладки для каждого окна и автопереключения при переходе между окнами соответственно: https://github.com/Zebradil/xkb-switch-i3. Аналогичное решение нашлось и для sway: https://github.com/artemsen/swaykbdd - вот это вот благополучно собирается на OpenBSD-current (потребуется meson и ninja) и безупречно работает.

Еще минус: вот я привык, например, видеть в статус-баре не только текущую раскладку, но и текущий статус Caps Lock (в sway, как и в иксах, у меня на этой клавише переключение раскладки, а Shift+CapsLock использует капс по прямому назначению). Мне интересно видеть статус Caps Lock именно в панели потому, что на ThinkPad X270 у клавиши CapsLock нет отдельного светодиодного индикатора,такие вот причуды Lenovo для некоторых моделей ThinkPad... Так вот, в sway статус этих самых "lock"-модификаторов нельзя получить из консоли НИКАК. Серьезно, даже баг заведен на это (4 года назад, Карл!!!): https://github.com/swaywm/sway/issues/4889 и никто не чешется его чинить (хотя гипотетически-то это возможно, тот же swaylock это делает, например - можно же просто скопипастить код...).

Да, если кому-то вдруг интересен скрипт для вывода в бар текущей раскладки клавиатуры в sway, можно применить что-то вроде этого (потребуется предварительная установка пакета jq для парсинга JSON):

COMMAND=$(swaymsg -t get_inputs | jq 'map(select(has("xkb_active_layout_name")))[0].xkb_active_layout_name') 
case $COMMAND in 
    '"English (US)"') LAYOUT=" en " ;; 
    '"Russian"') LAYOUT=" ru " ;; 
     *) LAYOUT=" ?? " ;; 
esac 
echo -n $LAYOUT 

Дальше: посмотрим-ка на устройства вывода (всё тем же механизмом: $ swaymsg -t get_outputs). Для моего HiDPI-дисплея 1920х1080 и немолодых уже глаз, актуально применить масштабирование (скейлинг), и особенно хотелось бы сделать его дробным (мне нравится масштабирование 1.2, например). Сделать это в sway проще простого, все в тот же конфиг вписываем (при необходимости, можно делать разные настройки для разных мониторов, разумеется):

output * scale 1.2

И вот тут кроется еще один жирный-жирный минус: при применении любого скейлинга >1 Firefox при запуске будет падать с руганью на "Failed to load cursor theme Default with scale 2". Помогает запуск firefox без поддержки вяленого: MOZ_ENABLE_WAYLAND=0 firefox (помните, в скрипте startsway.sh говорилось, что MOZ_ENABLE_WAYLAND=1 пока не работает? вот это, вероятно, оно). Но...

Перехожу к заключению: как бы ни был запущен Firefox, хоть с поддержкой Wayland, хоть без оной - он периодически и непредсказуемо падает. Что-то там не так с IPC, судя по выхлопу в консоль... Решений не нашлось, увы. Очистка профиля не помогла, гуглёж не помог. Менять браузер я, увы, не готов - у меня есть серьезные причины пользоваться именно Firefox.

На этом мой эксперимент с sway + Wayland под OpenBSD пока прекращаю. Попробую снова эдак через полгодика...

P.S. Устрицы - дрянь несусветная, не советую.