Адаптация Wayland

Прогресс, как известно, товарищ шиложопый и на месте стоять просто неспособен. Это, к счастью, касается и многострадального графического стека в GNU+Linux. На предпочитаемых мною ARM-based устройствах (напомню, что это Raspberry Pi 4B+ в качестве рабочей станции и MNT Reform2 в качестве лэптопа) старый, но всё менее добрый с годами Xorg показывает просто ужасающую производительность, в отличие от новомодного Wayland - тиринг в видео, внезапные глитчи при отрисовке окон... Проще пристрелить и выкинуть, чем разбираться, что же пошло не так.

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

Разумеется, не всё гладко - многие привычные в Иксах утилиты вроде setxkbmap здесь не работают. Но выход, как водится, нашёлся.

Устройства ввода и Wayland

Раскладки клавиатуры

(если мне не изменяет память, данный конфиг уже приводился мной, но повторение — мать учения и сестра заикания)

Как уже упоминалось, setxkbmap здесь не сработает, зато, как выяснилось, sway умеет парсить .xkb-файлы. Этим и воспользуемся.

Пример конфига, добавляющего дополнительных функций бесполезной (в случае с Reform) клавише Hyper и переключение раскладок us/ru сочетанием Ctrl+Alt:

🐧tolstoevsky@💻reform ~: cat keyboard.xkb 
xkb_keymap {
    xkb_keycodes { include "evdev+aliases(qwerty)" };

    xkb_types {
        include "complete"
        virtual_modifiers Hyper;
        type "HYPER" {
            modifiers = Hyper;
            map[Hyper] = Level2;
            level_name[Level1] = "Base";
            level_name[Level2] = "Hyper";
        };
    };

    xkb_compat { include "complete" };

    xkb_symbols {
	include "pc+us+ru:2+inet(evdev)"
        include "compose(menu)"
        include "group(ctrl_alt_toggle)"

        key <RWIN> { [ Hyper_L ] };
        modifier_map Mod5 { <HYPR> };

        key <LEFT> {
            type = "HYPER",
            symbols[Group1] = [ Left, Home ]
        };

        key <RGHT> {
            type = "HYPER",
            symbols[Group1] = [ Right, End ]
        };

        key <RTRN> {
            type = "HYPER",
            symbols[Group1] = [ Return, Insert ]
        };
    };

    // xkb_geometry  { include "pc(pc105)" };
};

Далее подключаем этот файл в ~/.config/sway/config:

input * {
	xkb_file ~/keyboard.xkb
}

Индикация

Теперь неплохо бы видеть, какая раскладка установлена. Можно использовать светодиоды на клавиатуре, но они во-первых, не везде есть, во-вторых, не всегда удобны - на экране-то нагляднее.

Я использую стандартный swaybar, получающий данные из скрипта.

~/.config/sway/config:

bar {
    position top
    status_command while ~/.local/bin/status;do sleep 1;done
}

~/.local/bin/status:

#!/bin/bash
datee=$(date +"%a, %Y-%m-%d")
timee=$(date +"%H:%M")
getvolume=$(pactl list sinks | grep '^[[:space:]]Volume:' |     head -n $(( 0 + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,')
netstate=$(nmcli device | grep "^wlp1s0" | awk '{print $3 " " $4}')
temp=$(sensors | grep -m1 temp1 | awk '{print $2}')
layout=$(swaymsg -t get_inputs | jq '.[1].xkb_active_layout_name')
painput=$(patoggle status | jq '.text')
echo "📆 $datee 🕖 $timee | 🔊 $getvolume | $painput  | 📡 $netstate | $temp | ⌨️ $layout"

В данном случае раскладка вынимается из ответа swaymsg, и парсится jq, далее выводясь в панели в человекочитаемом виде: "English (US)" или "Russian". Ещё одна интересная, но специфичная вещь - упомянутый тут скрипт patoggle (переменная painput) — он показывает, какой аудиовыход используется в настоящий момент и переключет его, будучи вызванным без параметров. Штука специфична для Reform и для нелюбителей автоматического переключения при втыкании наушников.

Трекбол

На десктопе я вместо мыши использую трекбол Logitech Marble, который при всём своём удобстве вызывает вопрос "а как скроллить-то?". Решается приколачиванием к мелкой дополнительной кнопке (по умолчанию это кнопка "назад") новой функции:

~/.config/sway/config

input "1133:50184:Logitech_USB_Trackball" {
    scroll_method on_button_down
}

Адаптация софта

Поначалу я недоумевал, почему переход "вяленый" не дал особого эффекта там, где, казалось бы, и должна была случиться основная магия - в проигрывании порн^W видео из интернетов и локального хранилища. Оказалось, что приложения просто изо всех сил старались обнаружить старые добрые Иксы и система услужливо подставляла им тормознутую прослойку Xwayland. Штош, будем отучать.

Qutebrowser

(да и для другого Qt'шного софта подходит)

Просто вызываю его скриптом, в котором объявляю следующие переменные:

export QT_QPA_PLATFORM=wayland
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"	

Electron, Chrome-based

Если у вас имеются в использовании приложения на Electron (не надо плеваться, инструмент не виноват, что его часто используют обезьяны, это всего лишь движок браузера, потому, например, браузер Vieb тут очень даже в кассу), то пригодится добавить к их вызову следующие параметры:

--enable-features=UseOzonePlatform --ozone-platform=wayland

MPV

Старичок тоже поначалу зачем-то пытался воспроизводить с использованием непонятно чего, и люто тормозил в результате. Поможем ему определиться в этой жизни.Так как вызываю я его в 99% случаев из командной строки, то просто добавил в .bashrc:

alias mpv='mpv --gpu-context=wayland'

Замена привычных утилит

Уведомления

Под Иксами использовал демон уведомлений dunst. Здесь имеется аналогичная легковесная программа - mako.

Добавим в автозапуск (примеры по-прежнему для sway):

exec mako 

И назначим сочетание клавиш, убирающее уведомления (ненавижу, когда они пропадают сами — а если я не прочитал? А? Отвернулся чаю налить, и пропустил всё на свете, а?? То-то же!):

bindsym $mod+n  exec makoctl dismiss -a

Скриншоты

Как же без них хвастаться выхлопом neofetch. Scrot остался под Иксами, здесь же у нас есть мрачный grim:

bindsym $mod+Shift+s exec grim ~/Pictures/$(date +'screenshot-%Y-%m-%d-%H-%M-%S').png
bindsym $mod+Shift+x exec grim -g "$(slurp)" ~/Pictures/$(date +'screenshot-%Y-%m-%d-%H-%M-%S').png 

Картинки

Feh, опять же, плохо себя чувствует здесь. Его заменил imv. Не думаю, что тут что-то нужно описывать — просто программа, которая просто показывает картинки.

---

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

---

Гостевая книга

---

tags:

tech

Лытдыбр