Оконный менеджер river#
Некоторое программное обеспечение (ПО) на первый взгляд имеет сложную документацию. Один из таких представителей оконный менеджер - river.
Данный менеджер окон (WM) - композитор для Wayland, в отличии от других представителей данной области располагает довольно скудной документацией с помощью которой сложно разобраться во многих тонкостях его настройки. Часть информации о настройке river вы можете найти на вики river, но большая часть расположена в мануалах для river, riverctl, rivertile, которые могут быть доступны из системы командой, если у вас установлен man:
man river
man riverctl
man rivertile
Однако в данных мануалах не все так очевидно с первого раза, как бы хотелось, но их использование или ознакомление с ними рекомендуется.
Предупреждение
Данное руководство основано на данных из мануалов и опыте взаимодействия с river. Руководство построено на основе примеров команд - адаптируйте их под свои нужды.
Конфиг river#
В отличие от многих других WM, river в качестве своего конфигурационного файла использует исполняемый файл с именем init, поэтому настраивать river можно как с помощью скрипта оболочки, так и с помощью программ написанных на других языках программирования. По умолчанию используется скрипт оболочки - в этом можно убедиться по наличию надписи в первой строке #!/bin/sh файла init. Еще одной особенностью подхода конфигурационного файла river является возможность изменения его параметров непосредственно из работающей системы без необходимости перезапуска WM или перечитывания данных из файла init. Данная возможность полезна в случае, если вы хотите проверить некоторое изменение быстро, например - новую комбинацию клавиш для вызова терминала - достаточно ввести в терминале команду:
riverctl map normal Super T spawn foot
Разберем представленную команду:
riverctl - команда для определения параметров в river,
map - параметр отвечающий за определения комбинаций клавиш,
normal - параметр указывающий на режим работы (в river 2 режима: основной - normal, и режим на случай блокировки экрана - locked),
foot - здесь отображает программу, которую нужно запустить, также можно задать команду для выполнения, например 'reboot'. В случае определения команды одиночные кавычки обязательны,
spawn - команда отвечающая за выполнение, Super и T - указывают на клавиши которые нужно нажать. Если используются несколько управляющих клавиш (Super, Alt, Shift, Control и т.п.) то между ними нужно добавлять знак +, например для команды в предыдущем примере это будет выглядеть следующим образом:
riverctl map normal Super+Shift T spawn foot
Предупреждение
Вероятно, что комбинации только из служебных клавиш обозначить нельзя! (Super Shift, Alt Shift и т.п.)
Предупреждение
Не смотря на то что river позволяет вносить изменения в настройки в режиме "реального времени", для того чтобы изменения использовались на постоянной основе, а не только в данной сессии - изменения необходимо добавлять(производить) в файл(е) init!
Настройка river#
Приступим к настройке river. Для начала стоит отметить, что конфигурационный файл init необходимо располагать в:
$HOME/.config/river/
Пример конфигурационного файла в зависимости от вашей системы может быть расположен:
/etc/river/init
/usr/share/river/example/init
Если по указанным путям его нет и вы не знаете где его найти, то можно получить его из репозитория river. Если вы хотите использовать другой формат для файла init, то есть примеры на wiki river - мы их пока не затрагиваем.
Назначение клавиш#
Чтобы определить комбинацию клавиш уже был представлен пример команды, однако в случае если у вас используется несколько раскладок клавиатур, например английская и русская, то на русской раскладке часть комбинаций не будет работать. Это происходит потому что по умолчанию river использует keysym, а не keycode (у англоязычных и русскоязычных букв keysym - разный, а keycode - одинаковый) Чтобы решить данную проблему необходимо использовать -layuot:
riverctl map -layuot 0 normal Super T spawn foot
# |
# номер раскладки
Предупреждение
Данная комбинация не включает использование keycode, она просто говорит, что в качестве привязанных клавиш нужно использовать раскладку 0, т.е. первую указанную в "us, ru". Будьте внимательны!
Стоит отметить, что те клавиши, которые не зависят от keysym (Super, Alt, Control, Return и прочие служебные клавиши) не нуждаются в добавлении -layuot, например следующая команда будет работать в любой раскладке:
riverctl map normal Super Return spawn foot
В river, как и в других WM, можно привязывать к клавишам целые команды, для этого нужно добавить одиночные кавычки:
riverctl map normal Super Return spawn 'foot --app-id=foobar'
Для того чтобы убрать привязку клавиш в работающей системе, используйте unmap, например:
riverctl unmap normal Super D
Предупреждение
Данная команда введенная в терминале сработает только для текущей сессии, если вы хотите внести изменения на постоянной основе - редактируйте init для последующих запусков.
В river для определения взаимодействия с окнами с помощью мыши используется map-pointer, например:
Для перемещения окна с помощью мыши:
riverctl map-pointer -layuot 0 normal Super BTN_LEFT move-view
Предупреждение
Окна в river определены как виды - view.
Предупреждение
При перемещении не "плавающего" окна, т.е. из rivertile на 13.02.2025 заданные размеры окна игнорируются - берутся те размеры, что сейчас на экране!
Для изменения размера окна с помощью мыши:
riverctl map-pointer -layuot 0 normal Super BTN_RIGHT resize-view
Для переключения режима "плавающего" окна с помощью мыши:
riverctl map-pointer -layuot 0 normal Super BTN_MIDDLE toggle-float
Чтобы удалить привязку, например:
riverctl unmap-pointer normal Super BTN_RIGHT
# | | |
# режим Модификатор Кнопка мыши
Настройка раскладки клавиатуры#
Для настройки смены раскладок клавиатуры:
riverctl keyboard-layout -model pc105 -variant qwerty -options "grp:win_space_toggle" "us, ru"
# или
riverctl keyboard-layout -options "grp:win_space_toggle" "us, ru"
Разберем допустимые параметры:
rules - не присутствует в данном примере, не является обязательным, позволяет определять правила, на данный момент имейте в виду что такой параметр есть.
keyboard-layout - определение слоев клавиатуры,
model - здесь задается тип клавиатуры - сколько клавиш (указывать не обязательно данный параметр),
variant - форматов раскладок несколько, но все привыкли к формату qwerty (указывать не обязательно данный параметр),
options - тут указывается как переключать раскладку клавиатур, согласно xkb,
"us, ru" - в кавычках указываются все нужные раскладки.
Предупреждение
После обновления предположительно setxkbmap, вариант с указанием всех параметров может перестать работать, обращайте на это внимание! Что касается сокращенного варианта - похожих случаев не зафиксировано и позволяет решить описанную проблему с большим количеством параметров, но имейте в виду.
Предупреждение
По умолчанию в river каждая клавиатура расценивается как индивидуальное устройство ввода и раскладка клавиатуры переключается для каждой клавиатуры в отдельности, конкретной клавиатурой.
Если вам нужно чтобы на всех клавиатурах раскладка переключалась одновременно, то для этого есть группы, которые нужно создать и добавить туда все нужные устройства ввода. Для работы с группами устройств ввода есть несколько действий:
Создать группу:
riverctl keyboard-group-create _имя_группы_
Добавить устройство в группу:
riverctl keyboard-group-add _имя_группы_ _имя_устройства_
Для того чтобы узнать _имя_устройства_ ввода:
riverctl list-inputs
Для удаления устройства из группы:
riverctl keyboard-group-remove _имя_группы_ _имя_устройства_
Для удаления группы:
riverctl keyboard-group-destroy _имя_группы_
Настроить раскладки для всех клавиатур можно через файл согласно документации XKB:
riverctl keyboard-layout-file _путь_к_файлу_
Настройка медиа-клавиш или устройств#
Для настройки медиа клавиш и устройств в конфиге river есть подобный фрагмент:
for mode in normal locked
do
# Eject the optical drive (well if you still have one that is)
riverctl map $mode None XF86Eject spawn 'eject -T'
riverctl map $mode None XF86AudioRaiseVolume spawn 'wpctl set-volume @DEFAULT_SINK@ 2%+'
riverctl map $mode None XF86AudioLowerVolume spawn 'wpctl set-volume @DEFAULT_SINK@ 2%-'
riverctl map $mode None XF86AudioMute spawn 'wpctl set-mute @DEFAULT_SINK@ toggle'
# Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl)
riverctl map $mode None XF86AudioMedia spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPlay spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPrev spawn 'playerctl previous'
riverctl map $mode None XF86AudioNext spawn 'playerctl next'
# Настройка яркости экрана через brightnessctl (https://github.com/Hummer12007/brightnessctl)
riverctl map $mode None XF86MonBrightnessUp spawn 'brightnessctl set +5%'
riverctl map $mode None XF86MonBrightnessDown spawn 'brightnessctl set 5%-'
done
Если вы не используете pipewire и wireplumber, то для регулировки звука замените wpctl на pamixer или pactl согласно документации их использования. (По умолчанию в конфиге river указан pamixer)
Как можно видеть из примера в случае специальных медиа клавиш или крутилок или других спец. клавиш в обозначении появляется конструкция $mode None XF86Audio... - данный формат специально предназначен для подобных настроек.
"Тайлинг" в river#
Для реализации "тайлинга", т.е. расположения окон на экране в river, используется rivertile - это так называемый генератор слоев. По умолчанию rivertile работает в стековом режиме, т.е. есть одна главная область и вторая второстепенная, куда "складываются" остальные окна в своеобразный "столбик".
Особенность river в том, что он позволяет заменить rivertile на другой, тем самым позволяет с легкостью изменить формат разметки "тайлинга". На wiki river предлагаются следующие варианты:
Чтобы указать какой генератор макетов использовать по умолчанию для всех экранов:
riverctl default-layout rivertile # rivertile используется по
умолчанию в river - замените на другой
Чтобы указать другое размещение окон на активном экране используйте:
riverctl output-layout rivertile # rivertile замените на любой
другой
Для отправки команд генератору разметки есть подобный пример:
# Команда с привязкой к "горячим" клавишам
riverctl map -layout 0 normal Super K send-layout-cmd rivertile "main-count +1"
# Для команды из терминала
send-layout-cmd rivertile "main-count +1"
rivertile - тут в качестве примера генератора, а выражение в "" команда которую нужно обработать - должна соответствовать документации генератора
Настройка параметров rivertile#
В rivertile можно изменить расстояние между окнами:
rivertile -view-padding N # N - количество пикселей
Для изменения расстояния до краев окна:
rivertile -outer-padding N # N - количество пикселей
Для выбора места - где будет располагаться основной сегмент:
rivertile -main-location PAR # PAR = [top | bottom | left | right] - указывается один из представленных
Чтобы изменить соотношение "полезного" пространство для основного сегмента:
rivertile -main-ratio N # N - значение от 0.1 до 0.9
Определить количество видов в основном пространстве:
rivertile -main-count N # N - целое значение, по умолчанию 1
Взаимодействие с окнами#
Для переключения активного окна используются:
Выбрать следующее окно:
riverctl map -layout 0 normal Super J focus-view next
Выбрать предыдущее окно:
riverctl map -layout 0 normal Super K focus-view previous
Для переноса окна в стек и обратно:
riverctl map -layout 0 normal Super+Shift Return zoom
Переключение режимов окна:
Переключение окна в "плавающий режим" и обратно:
riverctl map -layout 0 normal Super Space toggle-float
Переключение окна в полноэкранный режим и обратно:
riverctl map -layout 0 normal Super F toggle-fullscreen
Для перемещения окон:
Переместить окно следующую позицию:
riverctl map -layout 0 normal Super+Shift J swap next
Переместить окно на предыдущую позицию:
riverctl map -layout 0 normal Super+Shift K swap previous
Предупреждение
Поддерживаются также значения up, down, left, right.
Для того чтобы перемещать "плавающее" окно:
riverctl map -layout 0 normal Super+Alt H move left 100 # переместит окно влево
riverctl map -layout 0 normal Super+Alt J move down 100 # переместит окно вниз
riverctl map -layout 0 normal Super+Alt K move up 100 # переместит окно вверх
riverctl map -layout 0 normal Super+Alt L move right 100 # переместит окно вправо
100 - показывает шаг перемещения в пиксилях
Предупреждение
Если окно не было "плавающим", то оно перейдет в данный режим!
"Плавающие" окна можно переместить к одной из сторон экрана например:
riverctl map -layout 0 normal Super+Alt+Control H snap left # левый край
riverctl map -layout 0 normal Super+Alt+Control J snap down # нижний край
riverctl map -layout 0 normal Super+Alt+Control K snap up # верхний край
riverctl map -layout 0 normal Super+Alt+Control L snap right # правый край
Для перемещения окна в угол экрана выполните две команды последовательно, например для левого угла переместите окно к левой границе экрана и вверх, либо наоборот. Также вы можете обозначить данные действия на одну клавишу с помощью &&.
Управление размерами окон#
Для изменения размеров окон используются следующие команды:
Уменьшение размера основного окна:
riverctl map -layout 0 normal Super H send-layout-cmd rivertile "main-ratio -0.05"
Увеличение размера основного окна:
riverctl map -layout 0 normal Super H send-layout-cmd rivertile "main-ratio +0.05"
Предупреждение
Увеличение / уменьшение основного сектора приводит к уменьшению / увеличению размеров стека соответственно!
Для "плавающих" окон:
Уменьшение по горизонтали:
riverctl map -layout 0 normal Super+Alt+Shift H resize horizontal -100
Увеличение по вертикали:
riverctl map -layout 0 normal Super+Alt+Shift J resize vertical 100
Уменьшение по вертикали:
riverctl map -layout 0 normal Super+Alt+Shift K resize vertical -100
Увеличение по горизонтали:
riverctl map -layout 0 normal Super+Alt+Shift L resize horizontal 100
100 - показывает шаг изменения размера в пиксилях
Предупреждение
Изменение размеров "плавающих" окон происходит с двух сторон!
Настройка экранов(мониторов)#
В river для управления экранами (мониторами) используется внешний софт, на wiki river рекомендуются следующие:
На данный момент будет описано использование wlr-randr. Для начала необходимо знать какие выводы у вас используются. Для этого достаточно запустить команду:
wlr-randr
Данная команда покажет вам всю доступную информацию о подключенных мониторах и настройках, например:
DP-2 "AOC Q27G2WG4 0x0000DAB3 (DP-2)"
Make: AOC
Model: Q27G2WG4
Serial: 0x0000DAB3
Physical size: 600x340 mmSwayNotificationCenter
Enabled: yes
Modes:
2560x1440 px, 59.951000 Hz (preferred)
2560x1440 px, 143.912003 Hz (current)
2560x1440 px, 119.998001 Hz
2560x1440 px, 99.945999 Hz
1920x1080 px, 119.878998 Hz
1920x1080 px, 60.000000 Hz
1920x1080 px, 59.938999 Hz
1920x1080 px, 50.000000 Hz
1280x1440 px, 59.912998 Hz
1280x1024 px, 75.025002 Hz
1280x1024 px, 60.020000 Hz
1440x900 px, 59.901001 Hz
1280x720 px, 59.943001 Hz
1280x720 px, 50.000000 Hz
1024x768 px, 119.988998 Hz
1024x768 px, 99.972000 Hz
1024x768 px, 75.028999 Hz
1024x768 px, 70.069000 Hz
1024x768 px, 60.004002 Hz
800x600 px, 119.972000 Hz
800x600 px, 99.662003 Hz
800x600 px, 75.000000 Hz
800x600 px, 72.188004 Hz
800x600 px, 60.317001 Hz
800x600 px, 56.250000 Hz
720x576 px, 50.000000 Hz
720x480 px, 59.939999 Hz
640x480 px, 119.517998 Hz
640x480 px, 99.768997 Hz
640x480 px, 75.000000 Hz
640x480 px, 72.808998 Hz
640x480 px, 59.939999 Hz
640x480 px, 59.929001 Hz
Position: 0,0
Transform: normal
Scale: 1.000000
Adaptive Sync: disabled
DP-1 "AOC Q27G2SG4 XFXQ7HA001584 (DP-1)"
Make: AOC
Model: Q27G2SG4
Serial: XFXQ7HA001584
Physical size: 600x340 mm
Enabled: yes
Modes:
2560x1440 px, 59.951000 Hz (preferred)
2560x1440 px, 155.000000 Hz
2560x1440 px, 143.912003 Hz (current)
2560x1440 px, 119.998001 Hz
1920x1080 px, 119.878998 Hz
1920x1080 px, 60.000000 Hz
1920x1080 px, 59.938999 Hz
1920x1080 px, 50.000000 Hz
1280x1440 px, 59.912998 Hz
1280x1024 px, 75.025002 Hz
1280x1024 px, 60.020000 Hz
1280x720 px, 59.943001 Hz
1280x720 px, 50.000000 Hz
1024x768 px, 119.988998 Hz
1024x768 px, 99.972000 Hz
1024x768 px, 75.028999 Hz
1024x768 px, 70.069000 Hz
1024x768 px, 60.004002 Hz
800x600 px, 119.972000 Hz
800x600 px, 99.662003 Hz
800x600 px, 75.000000 Hz
800x600 px, 72.188004 Hz
800x600 px, 60.317001 Hz
800x600 px, 56.250000 Hz
720x576 px, 50.000000 Hz
720x480 px, 59.939999 Hz
640x480 px, 119.517998 Hz
640x480 px, 99.768997 Hz
640x480 px, 75.000000 Hz
640x480 px, 72.808998 Hz
640x480 px, 59.939999 Hz
640x480 px, 59.929001 Hz
Position: 2560,0
Transform: normal
Scale: 1.000000
Adaptive Sync: disabled
Для настройки экранов wlr-randr использует ряд параметров:
--output name # выбор экрана для настройки (name - HDMI, DP и т.п.)
# Следующие параметры указываются после --output name для конкретного монитора
--mode WxH@XHz # определяет разрешение и частоту экрана (W - ширина, H - высота в px) и частоту (XHz - частота в Hz. Х - должен точно соответствовать имеющимся значениям)
--pos X,Y # расположение одного экрана относительно другого X - смещение по X, Y - смещение по Y
--adaptive-sync X # включение режима переменной частоты обновления монитора (X - enabled или disabled)
--scale X # масштабирование изображения (X - 1.0, 1.5 и т.п.)
--transform X # поворот изображения на экране (90, 180, normal, flipped, flipped-90 и т.п.)
--on # включение
--off # выключение
--toggle # переключение (вкл. / выкл.)
Пример настройки экранов через wlr-randr:
wlr-randr --output DP-2 --mode 2560x1440@143.912003Hz --pos 0,0 --adaptive-sync enabled --output DP-1 --mode 2560x1440@143.912003Hz --pos 2560,0 --adaptive-sync disabled
В Wayland вывод изображения синхронизируется с частотой обновления монитора, что может создавать задержку ввода. Для решения данной проблемы был реализован протокол tearing. Для его включения в полноэкранных программах:
riverctl allow-tearing enabled
Настройка управления программами / приложениями#
Организация работы с программами / приложениями в river производится через правила (rules). Данный компонент позволяет определять: на каком мониторе будет открываться программа, на какой tag будет выводиться по умолчанию, будет ли использоваться tearing - независимо от заданного глобального параметра, задавать размер окна программы и его расположения, будет ли окно открываться как плавающее, будет ли программа открываться в полноэкранном режиме - в общем отвечает за все основные параметры. Взаимодействовать с rules можно тремя способами:
Добавить правило#
Предупреждение
В river добавлять правило можно только по одному. Не стоит пытаться объединять все в одну строку, если конечно вы не пишите несколько команд через &&.
Правило определяющее tag для программы#
Чтобы firefox открывался на третьем tag нужно указать правило:
riverctl rule-add -app-id "firefox" tags $((1 << 2))
Предупреждение
Стоит отметить, что в river, как в части языков программирования, нумерация начинается с 0, а не с 1, поэтому в выражение $((1 << N)), N - должно быть на 1 меньше чем номер tag на который вы хотите определить отображение программы по умолчанию. Зная данный факт можно заменить выражение на $((1 << N - 1)) - это позволит указывать N согласно номеру tag.
Для того чтобы river понимал какую программу он должен обработать и отобразить на определенном tag используются такие параметры как app-id или title. Данные параметры можно задавать при запуске программы через riverctl:
riverctl spawn 'foot -app-id=terminal'
riverctl spawn 'foot -title=terminal'
Предупреждение
Если title не задано пользователем, то оно не задается системой самостоятельно, поэтому лучше ориентироваться на app-id.
Предупреждение
Во многих случаях app-id соответствует названию программы, но далеко не всегда так: например blender дополнительно в app-id требует указание версии, например blender-4.3, иначе на него правило работать не будут!
Для того, чтобы определить title и app-id запущенной программы, можно использовать lswt. Пример результата:
state: app-id: title:
---- libreoffice-startcenter LibreOffice
--a- foot foot
---- foot foot
---- firefox "river/wiki: The river Wayland compositor wiki - Codeberg.org — Mozilla Firefox"
---- foot foot
Правило определяющее монитор для программы#
Чтобы указать монитор на котором стоит отображать программу по умолчанию, можно использовать следующий пример:
riverctl rule-add -app-id "steam" output DP-2
Для определения имени "вывода" (экрана) воспользуйтесь одной из программ, упомянутых в Настройка экранов (мониторов).
Правило регулирующее отображение программы в полноэкранном режиме#
Для отображения по умолчанию программы в полноэкранном режиме достаточно использовать параметр fullscreen:
riverctl rule-add -app-id "foot" fullscreen
Для того чтобы сделать исключение используется no-fullscreen:
riverctl rule-add -app-id "foot" no-fullscreen
Правило для плавающего окна#
Для запуска программы в режиме "плавающего" окна по умолчанию - используйте float:
riverctl rule-add -app-id "firefox" float
Для отмены или исключения:
riverctl rule-add -app-id "firefox" no-float
Правила размера и расположения#
Чтобы задать размер окна программы:
riverctl rule-add -app-id "foot" dimensions W H # W - ширина, H - высота
Предупреждение
Стоит отметить, что размер окна работает в первую очередь для "плавающих" окон, поскольку "не плавающие" окна регулируются макетом rivertile.
Чтобы задать позицию окна программы:
riverctl rule-add -app-id "foot" position W H # W - координата по ширине, H - координата по высоте
Предупреждение
Стоит отметить, что "начало координат" (точка X = 0, Y = 0) находится в верхнем левом углу. И в первую очередь указание размера необходимо для "плавающих" окон.
Правило отвечающее за tearing#
Для того, чтобы задать конкретной программе использовать tearing вне зависимости от глобального параметра:
riverctl rule-add -app-id "firefox" tearing
Для отключения tearing для конкретной программы:
riverctl rule-add -app-id "firefox" no-tearing
Правило указывающее на управляющего по декорациям окна#
В Wayland многое в графике программ переложено на сами клиенты, а не композиторы. В river есть два параметра которые определяют кто должен отвечать за внешний вид окон программ:
Клиент сам занимается декорацией окна, заголовка и т.п.:
riverctl rule-add -app-id "foot" csd
river занимается декорацией окна, заголовка и т.п.:
riverctl rule-add -app-id "foot" ssd
Предупреждение
river не отвечает за то что и как рисуется в самом окне, но может например скрыть заголовок окна терминала, если он является управляющим. По умолчанию используется режим ssd для многих программ.
Настройка внешнего вида river#
В river настройка внешнего вида ограничена несколькими параметрами:
Чтобы задать цвет фона:
riverctl background-color 0x000000ff
Для указания цвета в river используется один из двух вариантов обозначений:
0xRRGGBBAA - данный формат описывает все цвета на основе комбинации трех цветов - красный (RR), зеленый (GG) и синий (BB) и также задает прозрачность (AA). Все четыре параметра могут изменяться от 00 до 99 и от aa до ff, где aa - является следующим за 99,т.е. ff - наибольшее значение, а 00 - наименьшее.
0xRRGGBB - данный формат такой же как и первый, но без прозрачности, т.е. АА всегда равен ff
Задать цвет границ активного окна:
riverctl border-color-focused 0xffffffff
Задать цвет границ неактивного окна:
riverctl border-color-unfocused 0x555555ff
Задать цвет "срочных представлений":
riverctl border-color-urgent 0x660022ff
Предупреждение
"Срочные предстваления" на данный момент не совсем понятны. Мы работаем над тем, чтобы дать более точную информацию.
Задать ширину рамки окна:
riverctl border-width N # N - целое значение пикселей
Чтобы разместить обои на экраны необходимо использовать сторонний софт, на wiki river рекомендуют:
Стоит отметить, что в Wayland мониторы не объединяются в один единый рабочий стол или виртуальный экран, поэтому для вывода разных изображений на разные экраны нужно использовать программы, которые это поддерживают, иначе изображение будет повторятся на всех экранах. Также вероятно вам придется разрезать изображение под каждый экран, если вы хотите разместить изображение размером с объединенные экраны. Приведем пример использования swaybg:
riverctl spawn 'swaybg -o DP-1 -i /path_to_image1/img1.jpg -o DP-2 -i /path_to_image2/img2.png'
# или
exec swaybg -o DP-1 -i /path_to_image1/img1.jpg -o DP-2 -i /path_to_image2/img2.png
Настройки для курсора#
Изменение активного окна с помощью курсора мыши:
riverctl focus-follow-cursor _параметр_
Допустимые значения _параметр_:
disabled - не менять активное окно при перемещении курсора,
normal - перемещение приводит к переключению активного окна, но не переключается на данное окно, если курсор перемещается внутри окна непокидая его,
always - всегда переключать активное окно вслед за курсором мыши.
Способы скрыть курсор мыши:
Скрывать курсор мыши через T милисекунд:
riverctl hide-cursor timeout T
Скрывать курсор мыши при нажатии не специальных клавиш:
riverctl hide-cursor when-typing disabled # enabled | disabled
Положение курсора при перемещении на другой экран или другое окно:
riverctl set-cursor-warp disabled
Вместо disabled доступны:
on-output-change - расположить курсор в центре экрана, при переключении с клавиатуры на другой экран
on-focus-change - расположить курсор в центре активного окна, при переключении с клавиатуры на другой экран или окно
Задать тему и размер курсора:
riverctl xcursor-theme _тема_курсора_ _размер_курсора_ # _размер_курсора указывать не обязательно
Удаление правил#
Любое правило можно удалить из запущенной системы:
riverctl rule-del -app-id "foot" ssd # ssd для примера, параметры частично описаны выше, но также их получение описано далее.
Для указание на программу можно использовать app-id или title, главное чтобы они были определены.
Просмотр заданных правил#
Если правила были заданы, то вполне логично что их нужно как-то просмотреть и проверить. Для этого есть команда:
riverctl list-rules _параметр_
_параметр_ может принимать следующие значения - dimensions, float, fullscreen, output, position, ssd, tags
Предупреждение
Параметры для tearing по какой-то причине проверить нельзя!
Особые режимы / события в river#
В river предусмотрены такие события как: lid - крышка и tabled - планшет. Для их определения используется команды:
При закрытии крышки:
riverctl map-switch normal lid close _любая команда через riverctl_
При открытии крышки:
riverctl map-switch normal lid open _любая команда через riverctl_
При включении:
riverctl map-switch normal tabled on _любая команда через riverctl_
При выключении:
riverctl map-switch normal tabled off _любая команда через riverctl_
Для удаления заданных параметров, например:
riverctl unmap-switch normal lid close
riverctl unmap-switch normal tabled off
Не смотря на то, что в river по умолчанию только два режима: normal и locked, есть возможность определять / создавать другие режимы и переключаться между ними, например в конфиге river есть такой фрагмент:
# Объявления проходного режима. Этот режим имеет только одно отображение для возврата в обычный режим. Это делает его полезным для тестирования вложенного композитора wayland
riverctl declare-mode passthrough
# Super+F11 войти в режим passthrough
riverctl map normal Super F11 enter-mode passthrough
# Super+F11 вернутся в режим normal
riverctl map passthrough Super F11 enter-mode normal
Параметры для настройки устройств ввода#
В river есть ряд параметров которые предназначены для настройки спецализированных значений или поведений устройств ввода (input).
Чтобы настроить будут ли "события" устройства ввода использоваться в river:
riverctl input _имя_устройства_ events enabled
Допустимые значения:
enabled - включить,
disabled - выключить,
disabled-on-external-mouse - выключить тачпад при подключении внешней мыши.
Предупреждение
Для определения _имя_устройства_ используйте list-inputs. Пример использования был описан выше в Настройка раскладки клавиатуры.
Чтобы указать профиль ускорения указателя устройства ввода:
riverctl input _имя_устройства_ accel-profile none
Допустимые значения:
none - нет профиля,
flat - плоский профиль - ко всем дельтам устройства ввода применяется постоянный коэффициент, независимо от скорости движения,
adaptive - адаптивный профиль - профиль, который учитывает текущую скорость устройства при определении ускорения.
Чтобы определить коэффициент ускорения указателя устройства ввода:
riverctl input _имя_устройства_ pointer-accel 1.0
Возможные значения от -1.0 до 1.0.
Режим работы тачпада / кликпада:
riverctl input _имя_устройства_ click-method none
Допустимые значения:
none - нет режима,
button-areas - нижняя область тачпада делится на область левой, средней и правой кнопок,
clickfinger - количество пальцев на тачпаде определяет тип кнопки.
Для активиции или отключения функции перетаскивания тачпадом:
riverctl input _имя_устройства_ drag enabled
Допустимые значения:
enabled - включить,
disabled - выключить.
Для включения или отключения функции блокировки перетаскивания тачпадом:
riverctl input _имя_устройства_ drag-lock enabled
Допустимые значения:
enabled - включить,
disabled - выключить.
Для включения или отключения функции отключения тачпада во время набора текста:
riverctl input _имя_устройства_ disable-while-typing enabled
Допустимые значения:
enabled - включить,
disabled - выключить.
Для включения или отключения функции отключения тачпада при использовании трекпоинта:
riverctl input _имя_устройства_ disable-while-trackpointing enabled
Допустимые значения:
enabled - включить,
disabled - выключить.
Для включения эмуляции средней кнопки мыши на тачпаде:
riverctl input _имя_устройства_ middle-emulation enabled
Допустимые значения:
enabled - включить,
disabled - выключить.
Чтобы включить инверсию прокрутки:
riverctl input _имя_устройства_ natural-scroll enabled
Допустимые значения:
enabled - включить,
disabled - выключить.
Чтобы определить скорость прокрутки:
riverctl input _имя_устройства_ scroll-factor 2
Допускаются значения больше 0. Значения < 1 приведут к замедлению скорости прокрутки, когда значения > 1 - к ускорению.
Режим работы "для левшей" для мыши, тачпада и т.п.:
riverctl input _имя_устройства_ left_handed enabled
Допустимые значения:
enabled - включить,
disabled - выключить.
Включить или отключить функцию "тап" для тачпада:
riverctl input _имя_устройства_ tap enabled
Допустимые значения:
enabled - включить,
disabled - выключить.
Настройка типов нажатий на тачпаде:
riverctl input _имя_устройства_ tap-button-map left-right-middle
Допустимые значения:
left-right-middle - нажатие на тачпад одним пальцем - левая кнопка мыши, двумя - правая, тремя - средняя,
left-middle-right - нажатие на тачпад одним пальцем - левая кнопка мыши, двумя - средняя, тремя - правая.
Чтобы задать способ прокрутки на тачпаде:
riverctl input _имя_устройства_ scroll-method none
Допустимые значения:
none - не использовать тачпад для прокрутки,
two-finger - прокрутка с помощью двух пальцев,
edge - пролистывание, используя край тачпада,
button - пролистывание с помощью движения указателя при нажатой кнопке.
Чтобы задать клавишу для пролистывания с помощью четвертого варианта:
riverctl input _имя_устройства_ scroll-button _код_события_
Режим работы клавиши прокрутки:
riverctl input _имя_устройства_ scroll-button-lock enabled
Допустимые значения:
enabled - клавишу не нужно удерживать. Первое нажатие войти в режим прокрутки, а второе нажатие - выйти,
disabled - клавишу нужно удерживать для прокрутки.
Чтобы указать устройству ввода работать только на определенном экране, используйте:
riverctl input _имя_устройства_ map-to-output HDMI-1
Допустимые значения:
disabled - отключить привязку устройства ввода к определенному экрану,
Все возможные варианты output, которые вы можете получить через тот же wlr-randr (DP-1, HDMI-1 и т.п.).
В river можно задать скорость обработки нажатий и задержку:
riverctl set-repeat rate delay
О параметрах:
rate - скорость повторной обработки нажатия (зажатия) клавиши в милисекундах (50 - по умолчанию),
delay - задержка повторной обработки нажатия (зажатия) клавиши в милисекундах (300 - по умолчанию).
Настройка уведомлений#
Как и во многих других WM в river используются сторонние средства для отображения уведомлений. На wiki river рекомендуются следующие:
Для запуска вместе с river нужно в init указать команду:
riverctl spawn fnott # fnott тут в качестве примера, замените на любой другой
Панель (status bar)#
В качестве панели (status bar) на вики river рекомендуют использовать:
Для запуска панели достаточно указать команду в init:
riverctl spawn waybar # вместо waybar можете использовать любую другую панель.
Предупреждение
Панели могут потребовать дополнительной настройки для отображения элементов river (tags, window, mode, layuot и т.п.).
Предупреждение
На 11.02.2025 г. панели не имеют модуля вывода текущей раскладки языка в river!
Как можно заметить для запуска приложения "в фоне" достаточно просто использовать riverctl spawn _имя_программы_, данная команда просто запустит программу - работает как через файл init так и из терминала.
Меню запуска приложений#
Для запуска программ нужен так называемый launcher (лаунчер). На wiki river рекомендуют:
Для использования достаточно определить комбинацию клавиш, что было описано вначале на примере foot.
Блокировка экрана#
Для блокировки экрана на wiki river рекомендуют использовать:
Заблокировать экран можно назначив запуск программы на "горячую" клавишу или используя swayidle:
riverctl spawn 'swayidle -w timeout 300 "swaylock --show-failed-attempts -e"'
Немного пояснения:
-w - говорит о необходимости ожидания события,
timeout - событие, которое ожидает swayidle - в данном случае ожидание бездействия в 300 секунд.
Через swayidle можно выполнять разные команды. Например выключать и включать мониторы. В мануале swayidle есть подобное события:
swayidle -w \
timeout 300 ’swaylock -f -c 000000’ \
timeout 600 ’swaymsg "output * dpms off"’ \
resume ’swaymsg "output * dpms on"’ \
before-sleep ’swaylock -f -c 000000’
Предупреждение
Будьте внимательны при настройки отключения мониторов, поскольку после пробуждения могут часть настроек river "слететь", особенно в случае с несколькими мониторами, а в случае с видеокартами nvidia возможны проблемы с пробуждением!