С чего всё началось
Когда то в давние времена, когда не было ещё ноутбуков (т е когда они были не по карману) стоял у меня дома комп — 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 конфигурации работает сразу:
- тайлинг (modkey+t) и плавающий (Floating) режимы (modkey+f)
- в режиме тайлинг — увеличение/уменьшение количества клиентов мастер окна (modkey+i, modkey+d)
- изменения размеров областей (modkey+h, +l)
- и другие стандартные фичи тайлинг медеджеров.
Т е имеем минимум необходимого функционала тайлинг менеджера.
Кастомные клавиши настраиваются просто. Если это вызов внешней программы, вначале надо определить переменную с её вызовом, а затем вызвать. Вот допустим как я переопределил клавиши регулировки звука:
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, при этом предоставляя всё, что мне необходимо для успешной и продуктивной работы.
- 10 пре-конфигурённых workspaces по кнопкам modkey+n
- 3 режима — тайлинг, floating, monocle
- полный заголовок окна
- индикация заряда батареи, дата+время, sysload
- работа в тайлинг режиме: открытие новых окон, размеры областей, увеличение/уменьшение количества клиентов мастера
- задание floating и расположения для определённых приложений. gimp как пример.
- dmenu — быстрое динамическое меню
- мои скрипты — конфигурация дисплеев, 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 это самый яркий пример такого форс-мажора).