Linux
August 27

Гайд на 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

Собственно, запуск:
startx

Если вас встретил черный экран, то это хорошо и значит, что 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

После этого курсор должен стать стандартным.


Мой Telegram

Мой GitHub

Поддержать автора донатом