Привет! Вы наверно меня уже знаете, ведь моя первая статья набрала 6к просмотров. Поэтому перейду сразу к сути статьи.
План
Почему именно DWM?
Как мы будем настраивать?
Какие еще утилиты мы будем использовать?
Настройка системы для DWM
Написание конфига
Почему именно DWM?
DWM - dynamic window manager. Это означает, что он может работать с floating и tiling окнами. Он разработан на языке C под Xserver. В его коде содержится ~2300 строк кода + дополнительные утилиты 500 строк.
Его расширение осуществляется патчами (которые мы тоже будем использовать). DWM надо собирать самому, что для многих является скорее плюсом, чем минусом. В нем можно работать "из коробки", все самое важное работает сразу после установки (открытие терминала, dmenu и т.д). В нем работает стандартное меню (в большинстве wm надо загружать доп. пакеты). Ну и самый главный плюс - настройка конфига происходит на языке C, а это означает, что каждый может написать свой элемент.
Как мы будем настраивать?
Настройка DWM, как я говорил, происходит на языке C, но если вы его не знаете, все равно не будет трудностей с настройкой. Есть 2 типа конфигов:
config.def.h - это конфиг, который потом превращается в config.h (если config.h нет)
config.h - главный конфиг, стоит выше, чем config.def.h
Еще, в DWM есть много патчей, которые мы с вами тоже будем использовать.
Какие еще утилиты мы будем использовать?
Первое, нам нужен dmenu (меню поиска и запуска файлов из папки /usr/bin
).
Второе, нам нужен терминал (sakura, kitty, alacritty или st), в нашем примере я буду использовать kitty (я им пользуюсь на основной машине)
В третьих, нам нужен редактор кода в терминале, я использую vim.
В четвертых, браузер (xD, он правда очень нужен).
Ну и в пятых, slstatus (или какое нибудь другое меню) (я покажу как можно его самому написать)
Настройка системы для DWM
DWM работает на X сервере, следовательно, нам нужен X сервер.
P.S. я буду использовать Ubuntu Server на виртуальной машине, но все действия (кроме пакетного менеджера) можно будет провернуть на других дистрибутивах.
Для установки X сервера вам надо прописать комманду
# Для Ubuntu
sudo apt install xorg
# Для Arch
sudo pacman -S xorg
Далее, вам нужен Git (для установки dwm, slstatus и тд)
Его также можно установить коммандой
# Для Ubuntu
sudo apt install git
# Для Arch
sudo pacman -S git
После этого, вам следует создать папку для wm, я так и назову wm
mkdir wm
cd wm
И начну делать git clone
всех нужных мне пакетов
git clone https://git.suckless.org/dwm
git clone https://git.suckless.org/dmenu
git clone https://git.suckless.org/slstatus
После выполнения всех процедур, я перейду в папку dwm
cd dwm
Ну и для просто стандартного запуска введу
sudo make clean install
P.S. если пишет что команда не найдена, установите пакет make в вашу систему.
После билда, перейдите в корень и откройте файл .xinitrc
и введите в нем exec dwm
Введите в терминале startx
и Вуа-ля!
Вот мы и запустили DWM на нашей машине, дальше надо его настроить
Настройка конфига
Нажимаешь Alt+Shift+Q
и выходим из DWM (сейчас ничего работать не будет). Перейдем в папку ~/wm/dmenu
и тоже соберем его.
Теперь мы можем снова прописать startx
и запустить dwm
После можно нажать Alt+p
и ву-а-ля! Запустился dmenu!
Он позволяет запускать любые процессы. Теперь снова выйдем из него, нажав Alt+Shift+Q
Далее, нам нужен терминал. Я говорил, что буду использовать Kitty, поэтому его поставлю.
Теперь, самое интересное, настройка самого конфига. Переходим в ~/wm/dwm
и открываем config.def.h
(надо удалить config.h командой rm -rf
)
Чтобы поменять терминал на свой (терминал в dwm открывается клавишами MOD+Shift+Enter
) (Mod = Alt), надо найти строчку
static const char *termcmd[] = {"st", NULL}
И там где "st" надо прописать имя своего терминала
static const char *termcmd[] = {"kitty", NULL}
Теперь сохраняем и выходим из редактора, и собираем DWM.
После сборки прописываем startx
и ву-а-ля! При нажатии Mod+Shift+Enter открывается терминал
Как я считаю, надо поменять клавишу Mod с Alt на Win.
Теперь, можем конфигурировать DWM внутри DWM)
Также открываем config.def.h
и находим строку
#define MODKEY Mod1Mask
Тут настройка для клавиши Alt, для то чтобы сменить клавишу, вместо Mod1Mack
надо вставить Mod4Mack
#define MODKEY Mod4Mask
Теперь удаляем config.h
и собираем наш DWM.
Для перезапуску выходим Alt+Shift+Q
и прописываем startx
Теперь, главная клавиша DWM - Win! Чтобы открыть терминал, вместо Alt, надо нажать Win.
Теперь, настройка slstatus.
SlStatus утилита которая меняет вот это
Например, на вот это
И обновляет каждую секунду
Переходим в ~/wm/slstatus
и входим в config.def.h
Появляется много настроек, но по дефолту стоит только время. Я бы поставил время, hostname и CPU в процентах
В массив arg
надо ввести следующее
static const struct arg args[] {
{datetime, "%s | ", "%F %T"},
{hostname, "%s | ", NULL},
{cpu_perc, "%s", NULL}
}
Сохраняем и выходим. Дальше собираем как и все утилиты.
И для теста, можем запустить его командой slstatus
Вот такая сборка! Расскажу вым про патчи.
Самый хороший патч для красивой системы - fullgaps
Патч для красивого меню - status2d (задавать цвета)
Ну и патч - noborder (убирает подсветку границ окна если оно в фулл режиме)
Конец
Спасибо за прочтение статьи! Если вам зайдет, выпущу 2 часть
Комментарии (15)
13werwolf13
02.06.2023 10:28+2ставить в систему что-то не из пакетов с репозиториев - верный путь отстрелить себе в ноги.
возьмите дистрибутив в котором dwm и прочее уже есть в репах (например в opensuse его нет в стандартных репозиториях, но есть в репозитории utilities:suckless)ну а если говорить о собственном форке с доработками то потретьте 10 минут времени и изучите как собрать собственные пакеты и сделать своё репо, каких-то особо сложных вещей там нет, даже поднимать свой сервис нет необходимости, можно взять уже готовый Open Build Service например тут и собирать на их серверах в репозитории на их зеркалах для пары десятков дистрибутивов. например так делает создатель QOwnNotes и ещё некоторые. Для тестирования конечно можно и локальную сборку внутри ВМ и контейнера, но для применения только из пакетов с репозитория.
DirtyHornet Автор
02.06.2023 10:28смотрите, если вы устанавливаете что-то из репозиториев дистрибутива (например, в AUR есть DWM) то это нельзя будет пересобрать. в этом и проблема. настройка dwm делается only билдами
13werwolf13
02.06.2023 10:28+1aur это НЕ репозиторий пакетов несмотря на название. aur это богомерзкий мусор.
и я повторюсь - собрать в obs и поставить из репы пакетным менеджером
garwall
02.06.2023 10:28Лучше не прибивать железно вызов терминала, а написать какой-нибудь скрипт dwm-sensible-terminal и дергать его.
DirtyHornet Автор
02.06.2023 10:28у i3 взяли?))
garwall
02.06.2023 10:28или у rofi. в общем, да, у i3. Но и так просто удобней я под иксами st эксплуатирую, но его мне удобней вызывать с параметром -f, отвечающим за шрифт. (а его либо в скрипте задавать, либо еще как, но не хардкодить в dwm)
Johan_Palych
02.06.2023 10:28Рекомендую почитать эту доку:
https://wiki.archlinux.org/title/Dwm
xorg - метапакет в Debian/Ubuntu и Group в Archlinux
Ставлю обычно такой минимум:
sudo pacman -S xorg-server xorg-xinit xorg-xset xorg-xsetroot xorg-xrandr xorg-xrdb gnu-free-fonts
lspci | grep -e VGA -e 3D
или
sudo pacman -S inxi
inxi -GSC -xx
И дальше по плану:
https://wiki.archlinux.org/title/Xorg_(Русский)
yyqwerty
Для упрощённой работы с патчами есть форк dwm-flexipatch.
DirtyHornet Автор
это да, но я делаю свою сборку на гитхабе, и в скором времени буду писать на нее обзор
Johan_Palych
Есть и такое: dwm for Wayland
https://github.com/djpohly/dwl
Simple, hackable dynamic tiling Wayland compositor (dwm for Wayland)
https://aur.archlinux.org/packages/dwl
Посмотрите здесь для ознакомления:
https://aur.archlinux.org/packages?O=0&K=dwm
DirtyHornet Автор
ну я не оч люблю вайленд (самое банальное, дискорд)