GrabDuck

DWM — минимализм в действии

:

С чего всё началось


Когда то в давние времена, когда не было ещё ноутбуков (т е когда они были не по карману) стоял у меня дома комп — Pentium чего то там, 64Mb оперативки, 2Gb HDD, дисплей 14".
KDE и Gnome упорно не смогли бы (даже если бы и захотели) запуститься на таком железе. А почту почитать хотелось да и в интернет погоду посмотреть, книжку почитать — тоже очень хотелось. Порывшись в сети, настроил IceWM, который на этом оборудовании вполне прилично работал, запускался Firefox и почта

Так началось моё увлечение быстрыми и функциональными средами, не проходит и года чтобы я не затестил что то новое. Сегодня вот хочу рассказать о DWM

Помимо работы в DWM есть небольшой опыт работы с awesome (сложный конфиг), xmonad (тоже непросто настроить первый минимум, default конфиг совсем уж простой), scrotwm ( не нравиться концепция поддержки нескольких мониторов). Из «быстрых» сред достаточно долго работал с IceWM, Fluxbox.

Плюсы DWM — Быстродействие. Надёжность. Простота.


Имея минимум бинарных зависимостей и не используя ничего постороннего, даже отсутствие читаемого во время выполнения файла конфигурации может быть плюсом: это повышает надёжность системы в целом.

Выигрыш в скорости прорисовки и запуска приложений реально определить на глаз. Появляется ощущение того что комп «летает» в то время как на KDE тот же комп в лучшем случае «нормально функционирует».

По поводу же простоты хочу сказать следующее. Возможно это крайность — редактирование конфига в config.h, но изучение Lua (как в awesome), или haskell (как в xmonad) — это тоже крайности: пытаться построить нормальный
конфиг с помощью copy-paste в xmonad и awesome долгое и нудное дело,
учить новый язык программирования тем более.

На мой взгляд, из всех минималистичных сред DWM один из самых простых менеджеров окон.
Представляет собой один бинарный файл, без файла конфигурации и каких либо опций запуска. Конфигурация осуществляется путём редактирования файла include языка C.

При этом в default конфигурации работает сразу:

  1. тайлинг (modkey+t) и плавающий (Floating) режимы (modkey+f)
  2. в режиме тайлинг — увеличение/уменьшение количества клиентов мастер окна (modkey+i, modkey+d)
  3. изменения размеров областей (modkey+h, +l)
  4. и другие стандартные фичи тайлинг медеджеров.

Т е имеем минимум необходимого функционала тайлинг менеджера.

Кастомные клавиши настраиваются просто. Если это вызов внешней программы, вначале надо определить переменную с её вызовом, а затем вызвать. Вот допустим как я переопределил клавиши регулировки звука:

static const char *incr_sound[]  = { "amixer", "set", "Master", "2dB+",	 NULL };
static const char *decr_sound[]	 = { "amixer", "set", "Master", "2dB-",	 NULL };

...

static Key keys[] = {
...
	{ 0,          XF86XK_AudioRaiseVolume,      spawn,         {.v = incr_sound } },
	{ 0,	      XF86XK_AudioLowerVolume,	  spawn,	   {.v = decr_sound } },

Для быстрого запуска программ — я установил dmenu.

static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", colors[0][2], "-nf",
				  colors[0][1], "-sb", colors[1][2], "-sf", colors[0][1], NULL };
...
{ Mod1Mask,                     XK_F2,     spawn,         {.v = dmenucmd } },

Немного о моих предпочтениях и требованиях к среде


Работа программистом предполагает несколько существенных моментов конфигурации среды разработки.

В общем говоря, работать конечно можно в любой среде и без изменения базовых настроек…
… но тогда неизбежны километры бега мыши по столу и часто (подсознательное) раздражение от скучного множественного выполнения однотипных действий.

Тема интенсификации работы и улучшения функциональности средств разработки очень широкая
и затрагивает массу аспектов и существуют миллионы возможных конфигураций.

Мне лично нужно следующее (по крайней мере не представляю как можно работать
этих фич):

  • Быстрое открытие по Hot Key наиболее часто используемых программ: текстового редактора, терминала, браузера: настроено как dmenu, modkey+S+Enter, modkey+c
  • Быстрый переброс этих окон вправо/влево, с экрана на экран: настроено как modkey+o
  • Возможность запуска других программ, желательно с авто-подсказками и без тормозов (как, например, в KDE по Alt+F2): Alt+f2, Modkey+r
  • Запуск программ при старте оконного менеджера: через .xinitrc
  • Вывод текущих даты и времени где то чтобы было видно на экране: через xsetroot в цикле
  • sys tray — место на экране где будут находиться иконки от всяких мессенжеров типа скайпа, конфигурации сети и т п: внешняя программа stalonetray
  • множество десктопов, чтобы хватило места разместить все мои работающие программы: в комплекте поставки
  • русификация: средства xorg
  • текущая индикация загрузки процессора (sysload): свой скрипт+xsetroot
  • индикация разряда бататеи, текущее время: свой скрипт+xsetroot

Что такое tiling-wm


Более подробно можно почитать тут: en.wikipedia.org/wiki/Tiling_window_manager

Для меня же лично, кратко сформулирую как: Tiling это когда не придется искать скрытое окно при большом их количестве, или когда не требуется тратить время на перетаскивание окон мышой туда сюда. Управление приложениями и их расположением на экране происходит преимущественно с клавиатуры. Нет необходимости долго жать Alt+Tab — все окна на виду.

Чтобы повеселить вас расскажу произошедшую недавнюю историю о «видимости окон».
Работал я в KDE… У меня два моника — тот что на лаптопе и тот что на столе.
Работая в Skype+Tmux удалённой сессии с коллегой я случайно как то не так сдвинул окно и потом: __не смог его найти__!?

У меня уже бывало такое в KDE когда двигая окно оно «проваливалось» на соседний desktop, но такого чтобы после этого я его не нашёл ещё не было!

В общем странная вышла ситуация, пришлось прервать наш митинг, благо мы почти всё обсудили. А что с окном? Оно нашлось. Случайно… Через ~ 2 часа — я его обнаружил в «невидимой» области между мониторами, которая образовалась от того, что мониторы разного размера а виртуальный экран в KDE прямоугольный. Закатилось оно короче в правый нижний угол, там «мёртвая» зона в 432 пикселя в высоту. Вот такая вот история.

Мораль: такого бы никогда не произошло в Tiling режиме так как все окна на виду.

Конкретика:

DWM представляет собой минималистичный WM, при этом предоставляя всё, что мне необходимо для успешной и продуктивной работы.
  1. 10 пре-конфигурённых workspaces по кнопкам modkey+n
  2. 3 режима — тайлинг, floating, monocle
  3. полный заголовок окна
  4. индикация заряда батареи, дата+время, sysload
  5. работа в тайлинг режиме: открытие новых окон, размеры областей, увеличение/уменьшение количества клиентов мастера
  6. задание floating и расположения для определённых приложений. gimp как пример.
  7. dmenu — быстрое динамическое меню
  8. мои скрипты — конфигурация дисплеев, sleep, set-desktop-wallpaper

По пунктам 1-8 смотрите моё видео. Я специально загнал монитор в режим с меньшим разрешением, чтобы на небольших мониторах было хорошо видно:

Минусы & недоработки:


  • думаю что default конфигурация должна быть удобна для всех. почему по умолчанию
    переключение режима (modkey-t, modkey-f) происходит для всех десктопов мне непонятно:
    это неудобно. пришлось ставить патч: dwm.suckless.org/patches/pertag
  • моя программка для установки даты и т п в тулбаре иногда теряет соединение с
    X сервером. Не знаю виноват ли в этом DWM или у меня какие то проблемы с xorg.
    Пришлось ввести цикл перезапуска.
  • всё таки отсутствие конфига и рестарта напрягает. я думаю что для языка C
    это несложная задачка пропарсить файл имя/значение. Цикл изменения config.h
    компиляция пришлось пройти раз 50 пока я не достроил всё что мне нужно.

Выводы

Возможно для многих DWM будет уж чересчур минималистичным для повседневной работы. Но могу порекомендовать одно — установив единожды и подстроив его под себя, DWM будет очень надёжным помощником в тех ситуациях когда KDE или что то другое отказывается работать правильно (длинная и муторная пересборка пакетов в Gentoo это самый яркий пример такого форс-мажора).

Внешние ссылки