Bspwm - это минималистичный, быстрый и достаточно конфигурируемый тайловый оконный менеджер, представляющий окна как слои двоичного ��ерева. Поддерживается несколько мониторов. Имеет простую настройку.
В качестве быстрого решения для установки вы можете воспользоваться моим установочным скриптом.
Что будет использоваться:
bspwm - Тайловый оконный менеджер.
sxhkd - Демон горячих клавиш для X.
dmenu - Динамическое меню для X.
polybar - Инструмент для создания статус-баров.
picom - Композитор окон для X.
Данные компоненты легкие и быстрые, содержат небольшое кол-во зависимостей.
Вы с легкостью можете заменить часть компонентов на более красивые:
Вместо dmenu можно использовать Rofi, но стоит учитывать мощность вашей машины т.к. на слабой машине данное меню может открываться несколько секунд.
Вместо picom можно использовать его форк picom-jonaburg-git из AUR. Он добавляет эффект размытия, закруглённые края.
Примечание. В этом гайде не будет рассматриваться "красивый" дизайн системы. Обои, иконки, шрифты вы сможете поставить самостоятельно.
Установка
Все компоненты настраиваются в конфиг файлах, которые находятся в домашней директории пользователя. Поэтому не используйте root пользователя, а создайте нового. Иначе вы можете столкнуться с такими проблемами как запуск приложений в sandbox режиме (браузеры, приложения на electron).
Создание пользователя
Создаём пользователя. Замените "user_name" на нужное имя пользователя.
useradd -m -G wheel user_nameКлюч -G wheel означает, что пользователь войдет в группу wheel. Это нужно чтобы выполнят команды от суперпользователя (sudo).
Задаём пароль для пользователя:
passwd user_nameЧтобы группа имела право выполнять команды от суперпользователя, нужно изменить файл /etc/sudoers:
nano /etc/sudoersНаходим и раскомментируем строчку:
# %wheel ALL=(ALL:ALL) ALLПакеты и программы
Основные пакеты для установки:
pacman -S bspwm sxhkd dmenu polybar picomТакже нужно скачать эмулятор терминала. Мой выбор пал на легковесный xfce4-terminal:
pacman -S xfce4-terminalДля удобства скачаем браузер. В качестве браузера я использую qutebrowser. Он заточен на использование без мыши. Если нужен обычный браузер, то качаем firefox.
pacman -S qutebrowserXorg
pacman -S xorg xorg-xinitГруппа xorg содержит внутри большое кол-во пакетов и шрифтов.
Если вы хотите более легкую установку, то стоит скачать определённые пакеты:
xorg-server - Xorg x сервер
xorg-xinit - Для использование xinit и startx.
xorg-xset - Утилита пользовательских настроек.
xorg-xsetroot - Установка фона root окна на заданный паттерн или цвет.
xorg-xrandr - Утилита для настройки RandR (настройка мониторов).
xorg-xrdb - Утилита базы данных для xorg сервера
pacman -S xorg-server xorg-xinit xorg-xset xorg-xsetroot xorg-xrandr xorg-xrdbxorg-server и xorg-xinit скачиваются обязательно
Так как шрифты не установлены, поставим gnu free fonts:
pacman -S gnu-free-fontsВидео драйве��
xf86-video-amdgpu - новый, свободный драйвер для видеокарт AMD.
xf86-video-ati - старый свободный драйвер для AMD.
xf86-video-intel - драйвер для встроенной графики Intel.
xf86-video-nouveau - свободный драйвер для карт NVIDIA.
xf86-video-vesa - свободный драйвер, поддерживающий все карты, ограниченная функциональность. Для виртуальной машины.
xf86-video-qxl - свободный драйвер виртуальной видеокарты, ограниченная функциональность. Для виртуальной машины. (Отсутствует в пакетах Artix)
nvidia - проприетарный драйвер для NVIDIA.
В данном случае надо смотреть на свою машину и производителя видеокарты.
Так как я использую виртуальную машину, то устанавливаю xf86-video-vesa:
pacman -S xf86-video-vesaКонфигурация
Все операции с конфигами я буду производить не от root пользователя. Символ "~" в пути файла\директории означает /home/{user} (домашняя директория). Если вам нужно установить конфиг файлы для определённого пользователя, замените "~" на нужную домашнюю директорию пользователя.
Некоторые конфиг файлы будут храниться в ~/.config. Если данная директория отсутствует, то создайте её:
mkdir ~/.configBspwm
Создадим папку для локального конфига:
mkdir ~/.config/bspwmСкопируем конфиг файл в домашнюю директорию:
cp /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwmТеперь откроем и изменим его:
nano ~/.config/bspwm/bspwmrcНемного про правила приложений. Само правило выглядит примерно так:
bspc rule -a qutebrowser desktop='^2'С помощью такого правила можно явно указать на каком рабочем столе запускать приложение или его начальное состояние
Рабочие столы
Данная строка задаёт 10 рабочих столов на главный монитор:
bspc monitor -d I II III IV V VI VII VIII IX XЕсли вы обладатель нескольких мониторов, то можно распределить рабочие столы по ним.
Сначала узнаём имена мониторов в системе:
xrandrТеперь мы можем добавить настройку рабочих столов для определённого монитора:
bspc monitor {Монитор} -d {Рабочие столы}Может получиться примерно так:
bspc monitor DVI-I-1 -d I II III IVbspc monitor DVI-I-2 -d V VI VIIbspc monitor DP-1 -d VIII IX XЦвета, рамки, отступы
Рамки и отступы:
bspc config border_width 2
bspc config window_gap 12Цвет рамки в разных состояниях:
bspc config normal_border_color "#0A1F32"
bspc config active_border_color "#2D384A"
bspc config focused_border_color "#344756"Цвет пространства при выборе положения нового окна:
bspc config presel_feedback_color "#595B82"Фокус окна наведение курсора:
bspc config focus_follows_pointer true
bspc config pointer_modifier superКоэффициент разделение. Сколько процентов останется от родительского окна при открытии нового.
bspc config split_ratio 0.52Отступы и рамки, когда открыто одно окно:
bspc config borderless_monocle true
bspc config gapless_monocle trueSxhkd
Создадим папку для локального конфига:
mkdir ~/.config/sxhkdСкопируем конфиг файл в домашнюю директорию:
cp /usr/share/doc/bspwm/examples/sxhkdrc ~/.config/sxhkdТеперь откроем и изменим его:
nano ~/.config/sxhkd/sxhkdrcВсе что минимально нужно сделать - это изменить запуск терминала на нужный:
super + Return
xfce4-terminalМожно самостоятельно добавить горячие клавиши по такому сантаксису:
Клавиша_Модификатор + Клавиша
КомандаЕсли нужно выполнять команду с различными аргументами, то используем такой синтаксис:
Клавиша_Модификатор + {Клавиша1, Клавиша2}
Команда {Аргумент1, Аргумент2}В данном случае "Клавиша1" соответствует "Аргументу1" и т.д.
Polybar
Создадим папку для локального конфига:
mkdir ~/.config/polybarСкопируем конфиг файл в домашнюю директорию:
cp /usr/share/doc/polybar/examples/config.ini ~/.config/polybar/configТеперь создадим загрузочный скрипт:
nano ~/.config/polybar/launch.shВ этом файле прописываем:
killall -q polybar # Отключение бара, если он включен
echo "---" | tee -a /tmp/example_bar.log # Просмотр логов
polybar example >> /tmp/example_bar.log # Запуск бара example и запись его логаНазвание бара прописывается в конфиг файле
Чтобы бар автоматически запускался добавим данную строку в конец файла ~/.config/bspwm:
$HOME/.config/polybar/launch.shПримечание. Автозапуск можно поставить разные места, например в xinitrc, но у меня, каким-то образом, polybar при таком подходе ломает bspwm.
Цвета
В начале конфигурационного обычно ставиться описание цвета бара:
[colors]
background = #222
background-alt = #444
foreground = #dfdfdf
foreground-alt = #f0f0f0
primary = #646464
secondary = #646464
alert = #646464
underline = #c0c0c0в данном случае это нейтральные темные цвета
Bar
Первой строкой ставиться заголовок bar/название
[bar/base]Опциональная привязка в определённому монитору(так можно поставить на каждый монитор разные бары):
monitor = ${env:MONITOR:HDMI-1}Настройка размера:
width = 100%
height = 27
;offset-x = 1%
;offset-y = 1%
radius = 8.0
fixed-center = trueЦвета:
background = ${colors.background}
foreground = ${colors.foreground}Настройка линии:
line-size = 2
line-color = #f00Настройка рамки:
border-size = 4
border-color = #00000000Шрифты:
font-0 = fixed:pixelsize=10;1
font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
font-2 = siji:pixelsize=10;1Отступы:
padding-left = 0
padding-right = 5
module-margin-left = 1
module-margin-right = 2Расположение модулей:
modules-left = bspwm
modules-center = xwindow
modules-right = pulseaudio eth wlan xkeyboard dateМодули
Polybar поддерживает дополнительные модули, которые можно сделать самостоятельно на любом интерпретируемом языке.
Синтаксис модуля строится на заголовке, типе, место запуска и настройки. Например модуль версии ядра:
[module/info-kernel]
type = custom/script
exec = uname -r
interval = 1024Сообщество написало много модулей. Репозиторий с модулями.
Выбирайте любой понравившийся и скачайте. Например:
~/.config/polybarСделайте файл исполняемым:
chmod +x ~/.config/polybar/script.shДобавьте ваш модуль в конфиг polybar:
[module/{ИМЯ}]
type = custom/script
exec = ~/.config/polybar/script.shПереключение между барами:
Если вы не хотите перегружать один бар множеством модулей, то файле конфигурации polybar создайте 2 настройки бара (можно просто скопировать и изменить имя с набором модулей):
[bar/base]
modules-left = bspwm
modules-center = xwindow
modules-right = pulseaudio eth wlan xkeyboard date
; ОСТАЛЬНЫЕ НАСТРОЙКИ
[bar/additional]
modules-left = info-kernel
modules-center =
modules-right = filesystem memory cpu
; ОСТАЛЬНЫЕ НАСТРОЙКИТеперь создайте 2 скрипта для запуска баров:
# ~/.config/launch.sh
killall -q polybar
echo "---" | tee -a /tmp/polybar-base.log
polybar base >>/tmp/polybar-base.log
# ~/.config/launch-additional.sh
killall -q polybar
echo "---" | tee -a /tmp/polybar-additional.log
polybar additional >>/tmp/polybar-additional.logСделаем их исполняемыми:
chmod +x ~/.config/launch.sh
chmod +x ~/.config/launch-additional.shТеперь в конфигурацию sxhkd добавим горячие клавиши для переключение баров:
# base bar
super + F1
$HOME/.config/polybar/launch.sh
# additional bar
super + F2
$HOME/.config/polybar/launch-additional.shБольше о конфигурации можно почитать в вики.
Xinitrc
Скопируем конфиг файл в домашнюю директорию:
cp /etc/X11/xinit/xinitrc ~/.xinitrcТеперь откроем и изменим его:
nano ~/.xinitrcУдаляем все после строчки "fi" в конце файла. В моём случае это:
# twm &
# xclock -geometry 50x50-1+1 &
# xterm -geometry 80x50+494_51 &
# xterm -geometry 80x20+494-0 &
# exec xterm -geometry 80x66+0+0 -name loginЗаменяем эти команды на:
setxkbmap -option grp:alt_shift_toggle us,ru # Смена языка. Такой подход не совсем "правильный"
picom -f & # Запуск picom
xsetroot -cursor_name left_ptr # Установка стандартного курсора
exec bspwm # Запуск bspwmПосле изменения конфигурации xinitrc, можно попробовать запустить окружение с помощью:
startxЧтобы выйти из окружения нажмите super+alt+q.
Настройка мониторов
Чтобы мониторы правильно отображались, нужно указать их конфигурацию для xrandr. Есть две вариации как это сделать.
Arandr
Простой вариант это скачать Arandr, он предназначен для обеспечения простого визуального интерфейса для XRandR.
pacman -S arandrТак как программа графическая запускаем её.
Выводиться примерно такой интерфейс. Вы можете мышкой настроить положение мониторов. Если нажать ПКМ по монитору, то покажется меню, где есть дополнительные настройки. Мы можем задать ориентацию, разрешение для каждого монитора, а так же сделать один из мониторов главным.
После настройки нужно сохранить скрипт. Нажимаем на Layout > Save as. Даём название файла, например, display.sh.
Делаем файл исполняемым:
chmod +x .screenlayout/display.shРучная настройка
Если вы не хотите устанавливать лишние приложения, то можно сделать все "вручную".
Выводим список мониторов:
xrandrПомимо списка мониторов выводится информация о том, какие разрешения могут иметь мониторы, их ориентация, герцовка и т.д.
# Screen 0: minimum 320 x 200, current 1280 x960, maximum 8192 x 8192
# Virtual-1 connected primary 1280x960+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
# 800x600 60.00 + 60.32
# 2560x1600 59.99
# 2560x1440 59.95
# 1920x1440 60.00
# 1856x1392 60.00
# 1792x1344 60.00
# 1920x1200 59.88
# 1920x1080 59.96
# 1600x1200 60.00
# 1680x1050 59.95
# 1400x1050 59.98
# 1280x960 60.00*
# 1360x768 60.02
# 1280x800 59.81
# 1152x864 75.00
# 1280x768 59.87
# 1280x720 59.86
# 1024x768 60.00
# 640x480 59.94
# Virtual-2 disconnected (normal left inverted right x axis y axis)
# Virtual-3 disconnected (normal left inverted right x axis y axis)
# Virtual-4 disconnected (normal left inverted right x axis y axis)
# Virtual-5 disconnected (normal left inverted right x axis y axis)
# Virtual-6 disconnected (normal left inverted right x axis y axis)
# Virtual-7 disconnected (normal left inverted right x axis y axis)
# Virtual-8 disconnected Теперь можно настроить мониторы командой:
xrandr --output {Монитор} --mode {Разрешение} В моём случае это выглядит вот так:
xrandr --output Virtual-1 --mode 1280x960Аргумент auto позволяет автоматически выставить разрешение:
xrandr --output Virtual-1 --autoЕсли в списке присутствует несколько частот обновления, их можно изменить с помощью аргумента rate:
xrandr --output Virtual-1 --auto --rate 60Чтобы сделать монитор главным, используем аргумент primary:
xrandr --output Virtual-1 --auto --primaryЕсли вам нужно изменить ориентацию монитора, то используйте аргумент rotate:
xrandr --output Virtual-1 --auto --rotate normalНеобязательно настраивать несколько мониторов разными командами, xrandr поддерживает настройку нескольких мониторов одной командой:
xrandr --output Virtual-1 --auto --output Virtual-2 --autoС помощью аргумента off можно отключить монитор:
xrandr --output HDMI-1 --off --output HDMI-2 --autoЕсли вы определились с настройкой, то сохраните команду в файл.
Создадим директорию .screenlayout, если она не присутствует:
mkdir ~/.screenlayoutТеперь запишем команду конфигурации в файл display.sh. В моё случае это выглядит так:
echo "xrandr --output Virtual-1 --primary --mode 1280x960 --rotate normal" >> .screenlayout/display.shДелаем файл исполняемым:
chmod +x .screenlayout/display.shАвтозапуск
Автозапуск будем производить с помощью xinit. Добавляем в файл .xinitrc строчку:
$HOME/.screenlayout/display.sh # Куда-нибудь сюда
picom -f &
xsetroot -cursor_name left_ptr
exec bspwm Betterlockscreen
Данный компонент необязателен, но он удобен, если вам надо блокировать систему сочетанием клавиш.
Установка
Betterlockscreen устанавливается из AUR, если у вас не установлен yay, то его необходимо установить.
Скачиваем yay с репозитория:
git clone https://aur.archlinux.org/yay.git Переходим в установленную директорию:
cd yay Собираем пакет:
makepkg -si Теперь установим сам betterlockscreen с помощью yay:
yay -S betterlockscreenНастройка
Если запустить betterlockscreen без аргументов, он выведет описание всех аргументов. Рассмотрим некторые:
Добавление изображения:
Аргумента -u --update <PATH> добавляет обои на экран блокировки. Обои я скачал в директорию ~/.config/betterlockscreen/
betterlockscreen -u ~/.config/betterlockscreen/wallpaper.jpgТак же можно дополнительно настроить отображение эффектов:
--dim <N> Затемнение изображения в процентах (0-100)
--blur <N> Величина размытия изображения (0.0-1.0)
--color <HEX> Заполнить цветом задний фон палитрой HEX
Например:
betterlockscreen -u ~/.config/betterlockscreen/wallpaper.jpg --dim 20 --blur 0.5Теперь можно запустить экран блокировки с различными эффектами с помощью аргумента -l --lock <EFFECT>:
betterlockscreen -l blur Так же можно поставить изображение в качестве обоев рабочего стола:
betterlockscreen -u ~/downloads/wallpaper.jpg
betterlockscreen -wДобавим горячую клавишу для запуска экрана блокировки в конфигурацию sxhkd:
alt + shift + x
betterlockscreen -l blurЗапуск и управление
Так как я не рассматриваю решения с использованием дисплейного менеджера, запуск будет производиться с консоли:
startxДанная команда запускает наше графическое окружение на иксах. В работе это выглядит примерно так:
Стандартные горячие клавиши sxhkd:
Shortcut | Действие |
|---|---|
super + Return | Запуск терминала |
super + Spase | Запуск dmenu |
super + Escape | Перезапуск конфига sxhkd |
super + alt + {q,r} | Выйти/перезапустить bspwm |
super + {_,shift + }w | Закрыть и убить приложение |
super + m | Переход в режим монокля и обратно в плиточный |
super + y | Отправить новейший отмеченный узел в новейший предварительно выбранный узел |
super + g | Поменяйте местами текущий узел и самое большое окно |
Состояние и флаги:
Shortcut | Действие |
|---|---|
super + f | Установить режим окна (focused, floating) |
super + ctrl + {m,x,y,z} | Установить флаг узла (marked,locked,sticky,private) |
Фокус и перемещение:
Shortcut | Действие |
|---|---|
super + {_,shift + }{h,j,k,l} | Фокус на ноду в выбранном направлении |
super + {p,b,comma,period} | Фокус узлов в другой путь(workspace) |
super + {_,shift + }c | Фокус на следующее/предыдущий окно в текущем рабочем столе |
super + bracket{left,right} | Фокус на следующий/предыдущий рабочий стол в текущем мониторе |
super + {grave,Tab} | Фокус на последний узел/рабочий стол |
super + {o,i} | Фокус на более старый или новый узел в истории фокуса |
super + {_,shift + }{1-9,0} | Переключиться на рабочий стол или перетащить на него активное окно |
Предварительный выбор:
Shortcut | Действие |
|---|---|
super + ctrl + {h,j,k,l} | Выбор направления открытого окна |
super + ctrl + {1-9} | Выбрать рабочий стол на котором откроется новое окно |
super + ctrl + space | Отменить предварительный выбор для сфокусированного узла |
super + ctrl + shift + space | Отменить предварительный выбор для сфокусированного рабочего стола |
Перемещение и изменение размера:
Shortcut | Действие |
|---|---|
super + alt + {h,j,k,l} | Увеличить окно сдвинув одну из его сторон |
super + alt + shift + {h,j,k,l} | Уменьшить окно сдвинув одну из его сторон |
super + {Left,Down,Up,Right} | Перемещение плавающих окон |
