Привет! Вы наверно меня уже знаете, ведь моя первая статья набрала 6к просмотров. Поэтому перейду сразу к сути статьи.

План

  1. Почему именно DWM?

  2. Как мы будем настраивать?

  3. Какие еще утилиты мы будем использовать?

  4. Настройка системы для DWM

  5. Написание конфига

Почему именно 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 открывается терминал

Neofetch для красоты)
Neofetch для красоты)

Как я считаю, надо поменять клавишу 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)


  1. yyqwerty
    02.06.2023 10:28
    +1

    Для упрощённой работы с патчами есть форк dwm-flexipatch.


    1. DirtyHornet Автор
      02.06.2023 10:28
      +1

      это да, но я делаю свою сборку на гитхабе, и в скором времени буду писать на нее обзор


      1. Johan_Palych
        02.06.2023 10:28

        Есть и такое: 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


        1. DirtyHornet Автор
          02.06.2023 10:28

          ну я не оч люблю вайленд (самое банальное, дискорд)


  1. DimaSmirnov
    02.06.2023 10:28
    +2

    Такие люди тут нужны) Первая публикация прям зашла, парня понесло)


    1. DirtyHornet Автор
      02.06.2023 10:28
      +1

      спасибо большое


  1. 13werwolf13
    02.06.2023 10:28
    +2

    ставить в систему что-то не из пакетов с репозиториев - верный путь отстрелить себе в ноги.
    возьмите дистрибутив в котором dwm и прочее уже есть в репах (например в opensuse его нет в стандартных репозиториях, но есть в репозитории utilities:suckless)

    ну а если говорить о собственном форке с доработками то потретьте 10 минут времени и изучите как собрать собственные пакеты и сделать своё репо, каких-то особо сложных вещей там нет, даже поднимать свой сервис нет необходимости, можно взять уже готовый Open Build Service например тут и собирать на их серверах в репозитории на их зеркалах для пары десятков дистрибутивов. например так делает создатель QOwnNotes и ещё некоторые. Для тестирования конечно можно и локальную сборку внутри ВМ и контейнера, но для применения только из пакетов с репозитория.


    1. DirtyHornet Автор
      02.06.2023 10:28

      смотрите, если вы устанавливаете что-то из репозиториев дистрибутива (например, в AUR есть DWM) то это нельзя будет пересобрать. в этом и проблема. настройка dwm делается only билдами


      1. IDDQDesnik
        02.06.2023 10:28
        +1

        man checkinstall


      1. 13werwolf13
        02.06.2023 10:28
        +1

        aur это НЕ репозиторий пакетов несмотря на название. aur это богомерзкий мусор.
        и я повторюсь - собрать в obs и поставить из репы пакетным менеджером


  1. garwall
    02.06.2023 10:28

    Лучше не прибивать железно вызов терминала, а написать какой-нибудь скрипт dwm-sensible-terminal и дергать его.


    1. DirtyHornet Автор
      02.06.2023 10:28

      у i3 взяли?))


      1. garwall
        02.06.2023 10:28

        или у rofi. в общем, да, у i3. Но и так просто удобней я под иксами st эксплуатирую, но его мне удобней вызывать с параметром -f, отвечающим за шрифт. (а его либо в скрипте задавать, либо еще как, но не хардкодить в dwm)


  1. 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_(Русский)


    1. DirtyHornet Автор
      02.06.2023 10:28

      я для просто пользователей рассказал, как можно это сделать