Гайд на BSPWM. Установка и настройка на Arch Linux с нуля
bspwm - это фрэймовый оконный менеджер с поддержкой нескольких мониторов, представляющий окна как слои двоичного дерева. Настраивается и управляется с помощью сообщений.
В этой статье подробно рассказано и показано, как установить и настроить bspwm на Arch Linux.
Установка:
Перед установкой убедитесь, что список пакетов обновлен:sudo pacman -Syu
Далее установите пакеты bspwm и sxhkd. Это можно сделать с помощью следующей команды:sudo pacman -S bspwm sxhkd
sxhkd - это демон горячих клавиш, который необходим для их включения и настройки.
Первый запуск:
Перед запуском необходимо установить пакеты xorg-server и xorg-xinit:sudo pacman -S xorg-server xorg-xinit
Теперь копируем файл xinitrc:cp /etc/X11/xinit/xinitrc ~/.xinitrc
Редактируем его и добавляем запуск sxhkd и bspwm:
sxhkd & exec bspwm
Осталось скопировать и немного отредактировать конфигурационные файлы:mkdir ~/.config/bspwm
mkdir ~/.conifg/sxhkd
cp /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwm/
cp /usr/share/doc/bspwm/examples/sxhkd/sxhkdrc ~/.config/sxhkd/
chmod +x ~/.config/bspwm/bspwmrc
(да, конфигурационный файл bspwm должен быть исполняемым)
Откройте конфигурационный файл sxhkd и укажите тот терминал, который необходимо открыть по сочетанию клавиш Win + Enter:nano ~/.config/sxhkd/sxhkdrc
В данном примере мы открываем терминал kitty. Если он не установлен, то исправьте это:sudo pacman -S kitty
Если вас встретил черный экран, то это хорошо и значит, что bspwm запустился. Попробуйте открыть терминал с помощью сочетания клавиш Win + Enter.
Документация:
Получить документацию можно с помощью man (если не установлен, то установите с помощью sudo pacman -S man
):man bspwm
Либо посмотрите через веб-браузер на man.archlinux.org:
https://man.archlinux.org/man/bspwm.1
Настройка:
Как уже было отмечено ранее, вся настройка производится с помощью сообщений. Сообщения передаются через программу bspc. Сообщения указываются в конфигурационном файле bspwm. Откройте конфигурационный файл и посмотрите пример:
Как вы уже наверное поняли, сначала нужно указать на запуск bspc, далее мы указываем что именно хотим настроить, а потом указываем параметры настройки. Давайте рассмотрим на примере настройки мониторов.
Настройка мониторов:
Для начала узнаем имена мониторов. Это можно сделать с помощью xrandr -q | grep -w connected
:
Если xrandr не установлен, то вводим команду для установки:sudo pacman -S xorg-xrandr
Теперь используем эти имена мониторов так, чтобы дисплейный сервер знал как с ними работать:
xrandr --output eDP-1 --primary --mode 1920x1080 --rotate normal --output HDMI-1-0 --mode 1920x1080 --rotate normal --right-of eDP-1
В этом примере мы указываем, что монитор HDMI-1-0 находится справа от eDP-1. Замените --right-of
на --left-of
, --above
или --below
в зависимости от того, где находится ваш монитор. Добавьте эту команду в конфигурационный файл bspwm, чтобы при запуске оконного менеджера эта настройка автоматически устанавливалась. А еще лучше будет добавить скрипт, который будет автоматически определять, подключен ли второй монитор и если да, то выполнять его настройку:
#!/bin/bash my_second_monitor=$(xrandr --query | grep 'HDMI-1-0') if [[ $my_second_monitor = *connected* ]]; then xrandr --output eDP-1 --primary --mode 1920x1080 --rotate normal --output HDMI-1-0 --mode 1920x1080 --rotate normal --right-of eDP-1 fi
Автоматический запуск скрипта можно прописать в конфигурационном файле bspwm:chmod +x ~/.config/bspwm/scripts/dual_monitor.sh
~/.config/bspwm/scripts/dual_monitor.sh
Теперь в конфигурационном файле bspwm можно настроить мониторы с помощью bspc и указать на каком мониторе должен открываться определенный рабочий стол:
bspc monitor eDP-1 -d I II III IV bspc monitor HDMI-1-0 -d V VI VII VIII IX X
Переключаться между рабочими столами можно с помощью сочетаний клавиш, которые прописаны в sxhkd (по умолчанию Win + {1-0}).
Чтобы указать, на каком рабочем столе должна быть фокусировка при старте bspwm, нужно прописать в конфигурационном файле bspwm следующее:bspc desktop -f ^3
- в этом примере мы указываем, что фокусировка должна быть на 3 рабочем столе.
Кстати, рабочих столов в bspwm может быть больше 10. Максимальное количество рабочих столов мне неизвестно.
Перезапуск bspwm:
Так как мы только что внесли изменения в конфигурационный файл, следовало бы проверить изменения. Для этого в терминале можно воспользоваться следующей командой:bspc wm -r
Чтобы не вводить при каждом необходимом случае данную команду вручную, можно указать в конфигурационном файле sxhkd сочетание клавиш. По дефолту там указано Win + Alt + R:
Чтобы перезапустить sxhkd, можно также использовать команду:pkill -USR1 -x sxhkd
Либо использовать сочетание клавиш, прописанное в конфигурационном файле sxhkd:
Чуть позже мы более подробно рассмотрим настройку sxhkd.
Автозапуск программ:
Для того, чтобы автоматически запускать какую-то конкретную программу при старте оконного менеджера, можно явно прописать ее запуск в конфигурационном файле bspwm. Рассмотрим на примере запуска веб-браузера Firefox и терминала Kitty:
firefox kitty
Перезапускаем bspwm и у нас открываются веб-браузер с терминалом:
Хотя это не лучшее решение для автоматического запуска программ, так как при каждом перезапуске bspwm, будет открываться новый терминал, что может быть лишним и раздражать. При этом, найти какую-либо информацию о том, как встроенными функциями bspwm можно изменить такое поведение мне не удалось.
Правила для окон:
В bspwm есть два способа установить правила отображения и поведения окон. Рассмотрим оба.
Способ 1. С помощью bspc:
Вот простой пример:bspc rule -a Gimp desktop=^8 follow=on state=floating
rule - указываем, что хотим взаимодействовать с правилами;
-a (или --add) - создание правила;
Gimp - имя приложения, для окна которого мы устанавливаем правила;
desktop=^8 - рабочий стол, на котором должно открываться окно;
follow=on - означает, что не нужно следовать за окном (например, если пользователь сфокусирован на 1 рабочем столе, то при открытии firefox, фокусировка не будет изменяться и пользователь останется сфокусированным на 1 рабочем столе. Особенно полезно, когда приложения автоматически открываются при запуске bspwm);
state=floating - плавающее состояние окна
Список команд в документации:
Способ 2. С помощью внешней команды правил:
Пример здесь - https://github.com/baskerville/bspwm/tree/master/examples/external_rules
Если какое-то окно не ведет себя в соответствии с правилами:
Убедитесь, что вы правильно задали имя класса программы (перед этим введите sudo pacman -S xorg-xprop
, если необходимо):xprop | grep WM_CLASS
Настройка отображения окон:
Вы можете по своему усмотрению изменять внешний вид окон встроенными средствами bspwm:
Например, чтобы изменить размер рамки активного окна:bspc config border_width 5
Или расстояние между окнами:bspc config window_gap 0
А вот, как можно изменить цвет рамки:focused_border_color \#000000
Более подробно про настройки отображения окон можно посмотреть в документации:
Смена курсора:
Полезный совет для тех, кому не нравится, что курсор на главном экране отображается в виде крестика. Установите xorg-xsetroot:sudo pacman -S xorg-xsetroot
И добавьте эту строку в файл автозагрузки:xsetroot -cursor_name left_ptr
После этого курсор должен стать стандартным.