Pull to refresh

LINUX + BSPWM

Level of difficultyEasy

Bspwm - это минималистичный и достаточно просто конфигурируемый тайловый оконный менеджер, представляющий окна как слои двоичного дерева.

Зачем вообще нужен WM когда есть полноценные DE (GNOME,KDE, XFCE)?

  • Лучший опыт кастомизации системы. Кастомизация всех WM происходит за счет изменения конфигурационых файлов, в которых можно настроит все что угодно в пару кликов, и тем самым неплохо прокачаться в мире Linux на десктопе. В гноме как и в кедах конечно можно установить расширения, которые дадут необходимый пользователю функционал, но после обновления самого гнома все расширения могут слететь и потом придется ждать новой версии расширения, например, как это было у меня с переходом на GNOME 45.

  • Контроль системы. Используя WM пользователь уже более целесообразно подходит к выбору необходимого ему ПО, например нужна ли ему менюшка wifi,когда он пользуется проводным интернетом. Для меня переход на WM был обусловлен двумя факторами: малым количеством ОЗУ и ssd-шкой на 120 гб. WM позволяет таким пользователям как я чувствовать себя комфортнее, так как при холодном старте bspwm потребляет всего 400 мб, а система(2 офиса, obs и куча другого софта) занимала всего 30 гб дискового пространства.

Почему BSPWM?

  • Иксы(X server) под капотом(моя Nvidia GT 730 не дружит с Wayland).

  • Простота конфигурирования и использования. После почти года на Debian с I3wm, мне захотелось чего-то более совершенного. Главной проблемой i3wm является его раздутый конфиг, где происходит настройка абсолютно всего, что лично для меня кажется максимально не удобным. Bspwm же на фоне i3wm выделяется своей модульностью(настройка hotkeys происходит в отдельном файле) и на мой взгляд, более точно соответствует философии Unix (делай что-то одно и делай это хорошо).

Исходные данные:

  • Arch Linux (или одна из его user-friendly вариаций, в моем случае EndeavourOS).

Что будет использоваться:

  • bspwm - Тайловый оконный менеджер.

  • sxhkd - Демон горячих клавиш для X.

  • rofi - Динамическое меню для X.

  • polybar - Статус-бар для X.

  • picom - Композитор окон для X.

  • pywal - Инструмент, генерирующий цветовую палитру из доминирующих цветов изображения.

Установка

Основные пакеты для установки:

pacman -S bspwm sxhkd xorg xorg-xinit xfce4-terminal micro

Конфигурация

Для редактирования конфигурационных файлов будет задействован не root пользователь. При указании символа "~" в пути к файлу или директории подразумевается домашняя директория пользователя, которая обычно расположена в /home/user/. Если требуется настроить конфигурационные файлы для конкретного пользователя, замените символ "~" на соответствующий путь к домашней директории этого пользователя.

Нам необходимо создать директорию .config(если эта директория отсутствует):

mkdir ~/.config

Bspwm

Внутри директории ~/.config создаем папку bspwm:

mkdir ~/.config/bspwm

Скопируем дефолтный конфиг bspwm в соответствующую папку:

cp /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwm

Теперь откроем файл(с помощью удобного для вас редактора) и изменим его:

micro ~/.config/bspwm/bspwmrc

Sxhkd

Внутри директории ~/.config создаем папку sxhkd:

mkdir ~/.config/sxhkd

Скопируем дефолтный конфиг sxhkd в соответствующую папку:

cp /usr/share/doc/bspwm/examples/sxhkdrc ~/.config/sxhkd

Теперь откроем файл(с помощью удобного для вас редактора) и изменим его:

micro ~/.config/sxhkd/sxhkdrc

В нашем случае мы будет использовать отличный от используемого в конфиге эмулятор терминала:

super + Return      xfce4-terminal

Следующим шагом будет создание файла ~/.xinitrc и внесение в него след. команды:

exec sxhkd &
exec bspwm

Базовая настройка нашего рабочего окружения выполнена, произведем его запуск:

startx

После запуска X server нас встречает черный экран, а комбинация клавиш super(win) + Return(enter) открывает нам эмулятор терминала. Система с минимальным графическим окружением готова, комбинации hotkeys из файла sxhkdrc позволят вам разместить окна приложений исходя из ваших "хотелок".

А теперь давайте превратим неказистую связку Linux+bspwm в DE под свои запросы.

Первой проблемой с которой мы столкнемся - при просмотре видео в браузере, и при изменении размера окна, мы будем наблюдать ужасный тиринг. Эта проблема в основном актуальна при использовании видеокарт от Nvidia (в моем случае GT 730), с AMD ситуация значительно лучше. Все дело в использовании свободного видео драйвера Nouveau, который поддерживается сообществом Linux, но не компанией Nvidia, поэтому его будет необходимо заменить для избавления от "спецэффектов".

Установка проприетарного драйвера Nvidia

При помощи следующей команды узнаем информацию о своей видеокарты и используемый драйвер:

inxi -G

Заходим на https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units и ищем свою видеокарту, запоминаем Code name видеокарты, сверяем данные с "выхлопом" inxi -G. На https://wiki.archlinux.org/title/NVIDIA находим пакет, который нам подходит и устанавливаем его. Перед установкой я бы рекомендовал сделать бекап системы при помощи, например, Timeshift. Перезагружаем пк.
Например, Gt 730, Code name начинается с GK, по вики арча устанавливаю пакет nvidia-470xx-dkms. Этот пакет находится в ауре, предварительно проверяем наличие/устанавливаем yay.
После перезагрузки тиринг пропадает, теперь можно с головой окунуться в кастомизацию нашего WM.

Установка необходимых пакетов и программ

pacman -S picom polybar lxappearance python-pywal nitrogen rofi 

Polybar

В любой OS незаменимой частью интерфейса является его док-панель. В WM на X server лучшим выбором статус-бара, по моему мнению, является polybar.

Внутри директории ~/.config создаем папку polybar:

mkdir ~/.config/polybar

Скопируем дефолтный конфиг polybar в соответствующую папку:

cp /usr/share/doc/polybar/examples/config.ini ~/.config/polybar

Теперь откроем файл(с помощью удобного для вас редактора) и изменим его:

micro ~/.config/polybar/config.ini

Конфигурационый файл polybar интуитивно понятен, поэтому пройдемся по расширению его функционала.
Цвета панели. Есть два варианта: приписывать цвета вручную или воспользоваться утилитой pywal.
Pywal — это инструмент, который создает цветовую палитру из доминирующих цветов наших обоев. Мой выбор пал на pywal, так как установить обои и сменить цветовую схему системы можно будет в пару кликов. Также при помощи этой утилиты можно сменить тему telegram, discord, firefox, vs code и многих других.
Обои при первом запуске мы установим с помощью nitrogen (необходимо будет выбрать Zoomed Fill, так как без него изображения, не соответствующие вашему разрешению экрану, будут выглядеть не очень). Применим цветовую схему наших обоев:

wal -i /путь/к/изображению/

Pywal мы будем использовать не только в polybar но и в bspwm.

Пример использования pywal в polybar:

[colors]
background = ${xrdb:color0:#222}
foreground = ${xrdb:color7:#222}
foreground-alt = ${xrdb:color7:#222}
primary = ${xrdb:color1:#222}
secondary = ${xrdb:color2:#222}
alert = ${xrdb:color3:#222}

После установки проприетарного драйвера Nvidia polybar может перестать отображаться из-за смены имени монитора( информацию о мониторе можно узнать с помощью xrandr).
Height и radius отвечают за ширину бара и радиус скругления бара соответственно.

monitor = HDMI-0
height = 24pt
radius = 10

Шрифты. В данном разделе можно указать какие шрифты мы хотим использовать в баре и их размер.

font-0 = mononoki:size=15;1 #шрифт тескта в баре
font-1 = FontAwesome:size=13;1 #иконки с сайта https://fontawesome.com/, предварительно скачайте ttf-font-awesome
font-2 = 0xProtoNerdFont:size=15;1 #иконки с сайта https://www.nerdfonts.com/cheat-sheet, предварительно скачайте с сайта шрифты и поместите их в папку .fonts в домашней директории

Расположение модулей. Здесь можно настроить местоположение, например, индикатора раскладки клавиатуры(слева, по центру, справа).

modules-left = xworkspaces
modules-center = date cmus   
modules-right = weather uptime updates filesystem xkeyboard memory cpu

Включение трея с баре. Wm-restack позволяет в полноэкранном режиме скрыть polybar.

tray-position = right
wm-restack = bspwm

Теперь давайте пробежимся по настройке и созданию модулей.

Xkeyboard. Из-за ненормального отображения, caps lock был занесен в черный список. В format-prefix вставлена иконка клавиатуры, а цвет иконки(colors.primary) будет динамически меняться на "доминирующий" цвет при помощи pywal.

[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = caps lock

format-prefix = " "
format-prefix-foreground = ${colors.primary}

В polybar можно создавать собственные модули.
Данный пример модуля при помощи openweathermap выводит мне температуру в моем городе с иконкой, которую он получил от скрипта weather.sh. Скрипты можно найти на https://github.com/polybar/polybar-scripts или написать их самостоятельно, скрипты обязательно необходимо сделать исполняемыми(chmod +x /путь/к/скрипту/) и установить необходимые зависимости. Функционал каждого модуля также можно расширять при помощи своих скриптов, например, у меня по левому клику на модуль открывается страница яндекс погоды моего города.

[module/weather]
type = custom/script
exec = ~/.config/polybar/scripts/weather.sh
interval = 100
label-font = 3
click-left = exec /home/q/.config/polybar/scripts/weather-yandex.sh

Bspwm

В файл ~/.config/bspwm/bspwmrc вносим следующие правки.

pgrep -x sxhkd > /dev/null || sxhkd -f & #запуск sxhkd
wal -R & #запуск pywal с предыдущей цветовой схемой
$HOME/.config/polybar/launch.sh & #скрипт запуска polybar,скопировать с https://github.com/polybar/polybar/wiki/
picom & #запуск picom
xsetroot -cursor_name left_ptr & #цивилизованный курсор
setxkbmap -model pc105 -layout us,ru -option grp:alt_shift_toggle & #раскладка клавиатуры, модель чаще всего 105 но может быть и 104


telegram-desktop -startintray & #запуск телеграмма при старте системы, в данном случае в трее


bspc monitor -d         ?  ?  7 8 9  #иконки рабочих областей, их кол-во не ограничено)

bspc config window_gap 12 #отступы между окнами
bspc config border_width 2

bspc config split_ratio 0.5


. "${HOME}/.cache/wal/colors.sh" #импорт цветовой схемы pywal

bspc config normal_border_color "$color1"
bspc config active_border_color "$color2"
bspc config focused_border_color "$color15"
bspc config presel_feedback_color "$color1"

bspc config borderless_monocle true
bspc config gapless_monocle true

bspc config focus_follows_pointer true
bspc config pointer_modifier    super #клавиша-модификатор с помощью которой происходит перемещение и изменение размеров окон, Win на клавиатуре

bspc config single_monocle           true
bspc config borderless_monocle   true
bspc config gapless_monocle      false
bspc config paddingless_monocle  true

Picom

Picom- это композитор для Xorg. Его задачей будет избавление от тиринга, а также добавление нашим окнам прозрачности. Конфиг picom можно оставить без изменений,но для красоты можно сделать следующее:

backend = "glx" #нужен для красивого блюра, если тиринг остался, то используйте xrender
vsync = true #обязательно для включения, вертикальная синхронизация, поможет избавиться от тиринга
corner-radius = 10 #скругление углов окон
blur: {
    method = "dual_kawase"; #красивый блюр:)
    strength = 5; 
}

В настройках xfce4-terminal крутим ползунок прозрачности и наслаждаемся)

Lxappearance

Не нравится как выглядит thunar или firefox? Меняем внешний вид gtk приложений. Заходим на https://www.gnome-look.org/browse/, выбираем понравившуюся gtk тему, скачиваем ее, распаковываем, и кладем в .themes. Выбираем скачанную тему нажимаем "применить". Перезапускаем gtk приложение, и тема изменяется.

Rofi

Запуск приложений через терминал это очень неудобно. Решим эту проблему с помощью лаунчера rofi. Можно использовать dmenu, но rofi более функционален "из коробки".
Запуск rofi необходимо прописать в sxhkdrc вместо dmenu, а также указать ключ для его запуска. В нашем случае ключ: -drun, который отображает приложения. Для информативности подключим иконки приложений с помощью ключа: -show-icons.

# program launcher
super + space
	rofi -show drun -show-icons

Выбор цветовой темы rofi:

rofi-theme-selector
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.