Прогресс, как известно, товарищ шиложопый и на месте стоять просто неспособен. Это, к счастью, касается и многострадального графического стека в GNU+Linux. На предпочитаемых мною ARM-based устройствах (напомню, что это Raspberry Pi 4B+ в качестве рабочей станции и MNT Reform2 в качестве лэптопа) старый, но всё менее добрый с годами Xorg показывает просто ужасающую производительность, в отличие от новомодного Wayland - тиринг в видео, внезапные глитчи при отрисовке окон... Проще пристрелить и выкинуть, чем разбираться, что же пошло не так.
К счастью, человечество подарило нам прекрасный композитор sway, полностью повторяющий функциональность (и, что важно, совместимый с конфигом) оконного менеджера i3, являющегося, с моей точки зрения, безусловным совершенством в данной нише.
Разумеется, не всё гладко - многие привычные в Иксах утилиты вроде setxkbmap здесь не работают. Но выход, как водится, нашёлся.
(если мне не изменяет память, данный конфиг уже приводился мной, но повторение — мать учения и сестра заикания)
Как уже упоминалось, 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. Штош, будем отучать.
(да и для другого Qt'шного софта подходит)
Просто вызываю его скриптом, в котором объявляю следующие переменные:
export QT_QPA_PLATFORM=wayland export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
Если у вас имеются в использовании приложения на Electron (не надо плеваться, инструмент не виноват, что его часто используют обезьяны, это всего лишь движок браузера, потому, например, браузер Vieb тут очень даже в кассу), то пригодится добавить к их вызову следующие параметры:
--enable-features=UseOzonePlatform --ozone-platform=wayland
Старичок тоже поначалу зачем-то пытался воспроизводить с использованием непонятно чего, и люто тормозил в результате. Поможем ему определиться в этой жизни.Так как вызываю я его в 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: