Яндекс.Метрика

    Ни о чём

    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 это самый яркий пример такого форс-мажора).

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