/ Статьи / Графика и GUI / Настройка и использование Dwm (Динамический тайловый оконный менеджер) /

Настройка и использование Dwm (Динамический тайловый оконный менеджер)

Дата публикации: Aug. 22, 2010, 9:13 a.m.
Теги: wm, dwm,
Автор: Brainsburn

dwm

Dwm - компактный и быстрый динамический тайловый оконный менеджер от проекта suckless.org. Разрабатывается параллельно с wmii. Отличительная черта dwm - компактность и быстрота. В этой статье я расскажу, что вам придется сделать, настроить и установить, чтобы подстроить dwm под себя. Ну и немного рассуждений и плюсах и минусах этого wm.


Почему dwm?

Попытаюсь объяснить. Основную часть своего времени вы тратите на работу "внутри" программ. То, как эти программы выглядят и как они с вами взаимодействуют, не зависит от оконного менеджера. По сути, от оконного менеджера зависит то, _как_ вы попадете в нужную вам программу. В обычных оконных менеджерах или, прошу прощения, в Windows, для того, чтобы перейти в окно нужной программы, надо сделать такие действия:
1) Вспомнить, на каком рабочем столе вы оставили эту программу и переключиться на него
2) Оторвать руку с клавиатуры и перенести ее на мышь.
3) Поводить мышкой по коврику, а глазами - по экрану, дабы определить местоположение курсора
4) Тыкнуть курсором по заголовку нужного окна.

А вот, что надо сделать в dwm:
1) Переключиться одним шорткатом на тег (рабочий стол), на котором на постоянной основе "проживает" нужная вам программа. При этом вспоминать ничего не надо - нужен Firefox - переключаемся на тег "Web". Все просто.
2) Двумя-тремя нажатиями Alt-j перейти в окно нужной программы.

Вариант с dwm проще, вам не кажется? Если не кажется, ничего страшного - никто и не говорил, что dwm должен подходить всем. Конечно, мое доказательство удобности dwm не идеально, но я к этому и не стремился :) Просто лично для меня создает определенные трудности тот факт, что мне надо убирать руку с клавиатуры и тянуться к мыши, а потом еще и фокусировать свое внимание на курсоре. Видимо, не быть мне снайпером... Мне удобнее нажать пару клавиш вместо этого всего. Хотя, кому-то, соглашусь, не удобнее.

Еще одна полезность dwm заключается в том, что это _динамический_ тайловый оконный менеджер. Это означает, что размеры окна автоматически будут изменяться и окно программы будет занимать все свободное место всегда.
Вы можете забыть о необходимости менять размер окна вручную.
Кстати, для меня было откровением, когда мне сказали, что в Windows не работает Alt + "правый клик" для изменения размеров окна. Там надо мышкой целиться ровно в край окна, чтобы его растянуть, представляете! Да, я серьезно вам говорю! Не хотите, не верьте...



Так же в dwm понятие "рабочий стол" заменено понятием "тег". В принципе, одно и то же, просто у вас могут быть теги "Web", "IM", "Files" и программы могут быть настроены на запуск в определенных тегах. Можно в каком-то одном, можно в нескольких или во всех сразу. Довольно удобно.

Архив с dwm весит меньше 20кб. В dwm нету ничего лишнего. Абсолютно! Нету даже меню по правому клику мыши. В качестве утилиты для запуска программ рекомендуется использовать Ъ-вещь - dmenu. Очень мощная и удобная штука! О dmenu поговорим ниже.

Для настройки dwm надо редактировать файл config.h, а затем перекомпилировать. Это отпугивает многих, но на деле все, отнюдь, не страшно. Файл config.h очень прост, да и настройка dwm в принципе однотипна и проста, а перекомпиляция занимает буквально долю секунды.


В dwm нету панели задач - она не нужна. У вас могут возникнуть проблемы из-за отсутствия системного трея, но это - решаемая проблема. В dwm нету всплывающего меню по правому клику мыши - какое может быть меню, если фон рабочего стола вы увидите только, если ни одна программа не запущена? В dwm нету заголовков окон - опять же, за ненадобностью.




Автор dwm явно не из тех людей, которые любят писать громоздкий код. В этом я с ним согласен - код должен быть компактный, гибкий и понятный. Когда программа обвешана тучей ненужного хлама, который занимает 90% места и ресурсов, это плохо. Или, когда ICQ-клиент отжирает 150МБ, это просто ужасно.

Dwm - оконный менеджер из разряда "не для всех". Это означает, что большинству пользователей он будет не удобен. Если вы все еще читаете этот текст и не убежали с этой страницы с криками "да ну его #@%$@!", попытаюсь вас обрадовать - когда я только поставил dwm в первый раз, на настройку и приведение его к рабочему виду ушло не более 2-х часов, включая чтение документации и гугление. Это мало, особенно, если учитывать, что основной объем времени ушел уже на косметические штрихи. Например, я довольно долго экспериментировал с цветом границ окна и никак не мог выбрать между #eeeeee и #323232. Да-да, без гламура никуда.



Итак, долгая прелюдия подошла к концу и можно переходить кхм... к делу.

Установка и базовая настройка dwm

Получить исходные коды можно отсюда: http://dl.suckless.org/dwm/ . Последняя версия dwm на данный момент - 5.8.2. Так же вы можете получить самый свежий код так:

 hg clone http://hg.suckless.org/dwm
( я ставил dwm именно этим способом). Про установку dwm с помощью пакетного менеджера вашего дистрибутива Linux я говорить не буду. Разве что, если вы ставите dwm в Gentoo, обратите внимание на use-флаг savedconfig.

Процесс сборки dwm прост, как два пальца:
$ make
# make install

После выполнения make, вы обнаружите файл config.h. Это именно тот файл, редактируя который, настраивают dwm. Команда make install сделает всего ничего - скопирует бинарник dwm в /usr/local/bin и ман в /usr/local/share/man/man1/. После этого вы можете запускать и использовать dwm. Вы спрашиваете, как запустить dwm? Просто - с помощью файла ~/.xinitrc.

Все, что нужно - добавить туда строку со словом "dwm" (без кавычек). ~/.xinitrc вообще очень хороший файл и он нам еще поможет не раз.

При первом запуске вы можете обнаружить, что вам ничего не понятно. Но это заблуждение - вам _уже_ все понятно. Ну или почти все... Первый вопрос, который возник у меня - как запускать программы? На первое время сойдет сочетание Alt-Shift-Enter, которое запускает эмулятор терминала. Перемещаться между рабочими столами ака тегами можно по Alt-[1..9]. Сперва, дам список клавиатурных сочетаний, используемых в dwm, а затем, опишу процесс конфигурирования config.h.



Клавиатурные сочетания dwm
Alt-Shift-Enter - запуск терминала
Alt-p - dmenu (если он установлен, конечно)
Alt-(1..9) - перемещение по тегам
Alt-Enter - сделать активное окно "мастером". Попробуете - поймете.
Alt-j и Alt-k - перемещение между окнами программ
Alt-h и Alt-l - изменение размера окна по ширине
Alt-Shift-c - закрыть активное окно
Alt-Shift-q - закрыть dwm
Alt-t - переход в tiled режим (основной режим)
Alt-m - переход в monocle (переводит окно в полноэкранный режим)


Файл config.h
После редактирования config.h для активации изменений достаточно выполнить make install.
Первые несколько строк задают шрифт и цвета.
font[] - шрифт
normbordercolorp[] = цвет границ окна
normbgcolor[] = цвет фона
normfgcolor[] = цвет текста в статус баре
selbordercolor[] = цвет границ активного окна
selbgcolor[] = цвет фона заголовка окна
selfgcolor[] = цвет текста заголовка окна
borderpx = ширина границ окна

Далее, после /* tagging */ идет строка, которая описывает имена тегов. По умолчанию там цифры от 1 до 9.

Следом за ней - rules[], в которых присваиваются теги для программ.


static const float mfact = 0.55
Это означает, что размер мастер окна будет 55% от ширины экрана.

После этого найдите такую строку:
static const char *dmenucmd[]
Тут задается команда для запуска dmenu. После нее - *termcmd[] - команда для запуска терминала. Еще ниже - в keys[] указывается, какие клавиатурные сочетания будут вызывать эти команды.

Вроде все. Ликбез закончен, перейдем к практике.

Кирилица в dwm

Первым делом вы можете обнаружить, что у dwm есть проблемы с отображением кириллицы (русских букв) в панели (статус баре). Я не буду разглагольствовать, почему автор не удосужился сделать нормальную поддержку utf-8, а просто скажу, как это исправить:

static const char font[] = "-*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-*";
Собственно, вы можете использовать любой шрифт, поддерживающий iso10646.
Как узнать, поддерживает ли ее шрифт? Используйте утилиту xfontsel.


Теперь о цветах. Статус бар dwm по умолчанию синий. Мне больше нравится темно-серый:
static const char normbordercolor[] = "#999999";
static const char normbgcolor[]     = "#323232";
static const char normfgcolor[]     = "#eeeeee";
static const char selbordercolor[]  = "#eeeeee";
static const char selbgcolor[]      = "#3a3a3a";
static const char selfgcolor[]      = "#ffffff";



Теги. Вот как это выглядит у меня:
static const char *tags[] = { "web", "im", "console", "files", "main", "6", "7", "8", "9" };

Правила:
static const Rule rules[] = {
        { "Gimp",     NULL,       NULL,       0,            True,        -1 },
        { "Firefox",  NULL,       NULL,       1 << 0,       False,       -1 },
        { "Roxterm",  NULL,       NULL,       1 << 2,       False,       -1 },
        { "trayer",    NULL,       NULL,       ~0,           False,       -1 },
};

"1 << 0" означает, что Firefox будет запускаться на первом теге ("web"), "1 << 2" означает, что Roxterm будет запускаться на третьем теге ("console"), "~0" означает, что trayer будет запускаться сразу на всех тегах. Таким образом добавляете в правила приложения, которые вы используете и каждое будет запускаться только там, где надо.

С конфигом почти разобрались. Я не описал только одну, но очень важную деталь. Я опишу ее позднее, это будет о настройке клавиш на мультимедиа клавиатуре.


dmenu

Dmenu - очень мощная штука и о его настройке написано много мануалов. Но исполнять свои прямые обязанности dmenu может и без настройки. Просто установите dmenu, в конфиге dwm для него уже есть шорткат. Нажмите Alt-p, вверху появится само dmenu, начните набирать первые буквы нужного вам приложения (к примеру - firefox) и вы увидите, как уменьшается список команд, которые начинаются на эти буквы. Когда этот список сократится до одного, нажмите Enter. Вот так тривиально и без излишеств рекомендуется запускать программы в dwm. Да-да, никаких тебе иконок, ярлычков и других бесполезных выкидышей гламура. По статистике человек в основном использует не более десяти программ (не считая системных консольных утилит), не так трудно запомнить их названия. Лично для меня проще набрать "fire" для запуска веб-браузера, чем водить курсором по экрану.



Что делать с conky?

До dwm у меня был красивый и большой conky, который красиво показывал много всякой интересной информации о системе. Когда я пересел на dwm, то вдруг обнаружил, что всю _полезную_ информацию о системе можно уместить в одну строку в статус баре dwm =)

Conky в dwm можно запускать как обычно, отдав ей во владения какой-то один тег. Можно conky запускать с опцией "own_window no". А можно поступить правильнее и настроить conky на вывод информации в статус бар dwm. Конечно, придется отказаться от всяческих графиков горизонтальных, графиков вертикальных, оставив только ту информацию, которая влезет в одну строку: информация о cpu, ram и о сетевых интерфейсах. Первым делом, надо настроить conky на вывод информации в консоль. Так выглядит мой ~/.conkyrc:

background no
out_to_console yes
out_to_x no
update_interval 2
total_run_times 0
use_spacer none

TEXT
cpu:${cpu}% mem:$memperc%($mem) down:${downspeed corbina} up:${upspeed corbina} ${time %A} ${time %d} ${time %H}:${time %M}
Текст в статус бар dwm добавляется с помощью xsetroot. Отредактируем должным образом ~/.xinitrc:
conky | while read -r; do xsetroot -name "$REPLY"; done &
dwm


Установка фона рабочего стола в dwm

Это делается как обычно, но я все же опишу процесс для тех, кто в танке. Фоновую картинку в иксах можно задавать командой feh. Установите ее, если не сделали этого раньше. Теперь добавляем следующую строку в ~/.xinitrc:

feh --bg-scale /Pictures/image.jpg &
Ее можно добавлять в любое место xinitrc, главное, чтобы она была перед строкой "dwm".



Раскладка клавиатуры. Про отдельную раскладку клавиатуры для каждого окна с помощью xxkb я уже писал.

Автозапуск программ в dwm производится с помощью все того же файла ~/.xinitrc:
psi &
qutim &
xxkb &
feh --bg-scale /files/Pictures/Linux/lxf117-wide.jpg &
conky | while read -r; do xsetroot -name "$REPLY"; done &
gnome-terminal -e weechat-curses &
dwm
Системный трей в dwm

Для этой цели вы можете использовать, к примеру, утилиту trayer. Просто поставьте ее в автозапуск и сделайте правило в config.h для размещения ее на всех тегах.




Теперь расскажу о той очень важной вещи про config.h, о которой не договорил вначале.

Настройка горячих клавиш мультимедиа клавиатуры в dwm
Делается это в три шага
1) Узнаем код клавиши с помощью утилиты xev
2) Добавляем команду в config.h
3) Добавляем сочетание клавиш в config.h, которое будет вызывать эту команду

Как использовать xev. Запускаете xev в терминале и жмете нужную клавишу. Вы увидите нечто подобное:
KeyPress event, serial 30, synthetic NO, window 0x1200001,
root 0x15b, subw 0x0, time 235999518, (370,513), root:(371,528),
state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
Вам нужно значение keysym.
Теперь добавим команды для увеличения и уменьшения громкости. В разделе /* commands */ (там уже есть по-умолчанию команды для dmenu и терминала) добавьте следующие строки:
static const char *apluscmd[] = { "amixer", "sset", "Front", "1+", NULL };
static const char *aminuscmd[] = { "amixer", "sset", "Front", "1-", NULL };
Далее, в static Key keys[] добавьте клавиатурные сочетания, которые будут вызывать эти команды:

{ 0,                            0x1008ff13,   spawn,       {.v = apluscmd } },
{ 0,                            0x1008ff11,   spawn,       {.v = aminuscmd } },
жирным шрифтом выделены коды клавиш, которые вы получили с помощью xev.

На всякий случай показываю полностью ту часть конфига, которая отвечает за мультимедиа клавиши, а именно - пауза/плей, стоп, след. трек, пред. трек, перемотать вперед, перемотать назад, увел. громк., уменьш. громк., выкл./вкл. звук.




/* commands */
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb",
selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[]  = { "roxterm", NULL };
static const char *apluscmd[] = { "amixer", "sset", "Front", "1+", NULL };
static const char *aminuscmd[] = { "amixer", "sset", "Front", "1-", NULL };
static const char *atogglecmd[] = { "amixer", "sset", "Front", "toggle", NULL };
static const char *mpdnextcmd[] = { "mpc", "next", NULL };
static const char *mpdprevcmd[] = { "mpc", "prev", NULL };
static const char *mpdstopcmd[] = { "mpc", "stop", NULL };
static const char *mpdtogglecmd[] = { "mpc", "toggle", NULL };
static const char *mpdseekpcmd[] = { "mpc", "seek", "+00:00:10", NULL };
static const char *mpdseekmcmd[] = { "mpc", "seek", "-00:00:10", NULL };

static Key keys[] = {
        /* modifier                     key        function        argument */
        { MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
        { MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
        { MODKEY,                       XK_b,      togglebar,      {0} },
        { MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
        { MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
        { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
        { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
        { MODKEY,                       XK_Return, zoom,           {0} },
        { MODKEY,                       XK_Tab,    view,           {0} },
        { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
        { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
        { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
        { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
        { MODKEY,                       XK_space,  setlayout,      {0} },
        { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
        { MODKEY,                       XK_0,      view,           {.ui = ~0 } },
        { MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
        { MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
        { MODKEY,                       XK_period, focusmon,       {.i = +1 } },
        { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
        { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
        { 0,                            0x1008ff13,   spawn,       {.v = apluscmd } },
        { 0,                            0x1008ff11,   spawn,       {.v = aminuscmd } },
        { 0,                            0x1008ff14,   spawn,       {.v = mpdtogglecmd } },
        { 0,                            0x1008ff15,   spawn,       {.v = mpdstopcmd } },
        { 0,                            0x1008ff17,   spawn,       {.v = mpdnextcmd } },
        { 0,                            0x1008ff16,   spawn,       {.v = mpdprevcmd } },
        { 0,                            0x1008ff12,   spawn,       {.v = atogglecmd } },
        { MODKEY,                       0x1008ff17,   spawn,       {.v = mpdseekpcmd } },
        { MODKEY,                       0x1008ff16,   spawn,       {.v = mpdseekmcmd } },

        TAGKEYS(                        XK_1,                      0)
        TAGKEYS(                        XK_2,                      1)
        TAGKEYS(                        XK_3,                      2)
        TAGKEYS(                        XK_4,                      3)
        TAGKEYS(                        XK_5,                      4)
        TAGKEYS(                        XK_6,                      5)
        TAGKEYS(                        XK_7,                      6)
        TAGKEYS(                        XK_8,                      7)
        TAGKEYS(                        XK_9,                      8)
        { MODKEY|ShiftMask,             XK_q,      quit,           {0} },
};


Да, это может показаться сложным, но вы ведь не меняете мультимедиа шорткаты каждый день? :)

Скриншоты dwm

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

dwm
dwm dwm

А вот. что получилось у меня:
dwm


На этом все. Спасибо за чтение.




Возможно, эти материалы Вас заинтересуют:


Рекомендовать эту страницу:

Комментарии:(25)

# Zendar Oct. 28, 2010, 8:40 p.m.
Пожалуй, единственный вменяемый гайд по настройке DWM для новичка. Описан не только процесс налаживания самого DWM, но и настройка коньков, трея и решение проблемы с кириллицей, за что огромное спасибо!

# oleg_xp Nov. 2, 2010, 5:37 p.m.
После статьи пришлось перейти на DWM до этого пользовался Awesome.

# Андрей Nov. 30, 2010, 2:01 p.m.
Огромное спасибо! Очень приятный, нужный и толковый обзор!

# oleg_xp Nov. 30, 2010, 8:34 p.m.
Доброго времени суток. Огромное спасибо за описание.
И сразу вопрос. Столкнулся с мелкой проблемой. После переключения раскладки на русскую, мышь перестает переключать рабочие столы. Подскажите как решить эту проблему.

# Brainsburn Dec. 2, 2010, 12:17 p.m.
oleg_xp, у меня такая же проблема, но я не придавал ей значения, т.к. переключаюсь между тегами с клавиатуры. Но если найду, как ее решить, обязательно отпишусь.

# Katana Dec. 27, 2010, 6:04 a.m.
Автору огромный респект за интересную и толковую статью!
Меньше недели назад я открыл для себя фреймовые окнные менеджеры - теперь думаю сносить xfce :)

Попробовал DWM - был по-настоящему шокирован размерами архива :), но пока не могу разобраться со схемой разбивкм окон на фреймы. Есть ли в DWM


# Katana Dec. 27, 2010, 6:09 a.m.
:) продолжаю:

Есть ли в DWM возможность изменять с помощью хоткеев или мыши разбивку окон с горизонтальной на вертикальную и т.д., как в Awesome?

# oleg_xp Dec. 30, 2010, 1:10 p.m.
Да есть патчи на сайте разработчика для разной разбивки окон.
Хорошо было бы статью написать про патчи для DWM, реально с последней версией работает около 3-х патчей.

# Brainsburn Jan. 3, 2011, 8:04 p.m.
Всех с прошедшим. Katana, как уже написал oleg_xp, на http://suckless.org есть много патчей, добавляющих различную функциональность, в том числе и раскладки окон.
Про патчи сам уже давно думаю что-то написать, но никак руки не дойдут. Кстати, если кому интересно, я написал про интеграцию Dzen2 в DWM: http://zenux.ru/articles/47/

# pimiento April 6, 2011, 6:35 p.m.
Не пойму только одну вещь - как включить в конфиге XINERAMA? нужно сделать какой-то #define я так понимаю

# Loki April 15, 2011, 11:07 p.m.
Добрый день!
Скажите можно ли избежать следующих проблем при использовании trayer:
при переключении между тегами первоначально выбирается как раз таки trayer и это очень неудобно.

# Brainsburn April 16, 2011, 11:03 p.m.
Loki, у самого такая же проблема, так и не смог ничего придумать. Пытался даже патчить DWM, но знаний не хватило. %-) В итоге использую DWM без трея.
Dzen2, кстати, интегрируется в DWM отлично. Интересно, как у него это получается?

# Loki April 18, 2011, 3:02 p.m.
Brainsburn, понятно спасибо. Отказался бы от трея, если бы pidgin нормально сообщал о новых сообщениях(. Однако никак. Включен плагин pidgin'a Message Notifications, в нем включена галочка использования Urgent Flag, но не работает. Причем нотификация новых писем с гмейла череэ этот же pidgin работает.

Кстати, еще проблема - java приложения (редактор Intellij IDEA) при запуске или при переключении тегов теряет фокус клавиатуры и приходится мышкой по нему щелкать, чтобы клава заработала - неудобно. Запуск java приложений пофиксен через wmname.

# Loki April 20, 2011, 10:39 p.m.
Если кому интересно - нотификация от pidgin вроде стала работать после применения патча к dwm для ликвидации проблем с фокусом клавиатуры (http://permalink.gmane.org/gmane.comp.misc.suckless/5270) и сброса флажков в пункте Notification Removal плагина Message Notification

# Гость June 6, 2011, 10:33 a.m.
Интересная статья. А если из репозитория установил,то уже никак не поменять настройки DWM? Просто при сборке из исходников вылазит "make: *** Ошибка 1",поэтому поставил пока так.

# Brainsburn July 17, 2011, 12:51 p.m.
Гость, в Gentoo для этого есть USE флаг "savedconfig". Не знаю, как с этим в других дистрибутивах. Но вообще лучше разберитесь с компиляцией. Кстати, сообщение "make: *** Ошибка 1" не дает никакого представления о произошедшей ошибке.

# Brainsburn July 26, 2011, 3:05 p.m.
А ведь пофиксили в недавно вышедшем DWM 5.9 баг, когда с русской раскладкой мышь не переключала теги :)

# Bazooo Dec. 29, 2011, 8:57 p.m.
Какой шрифт будет нормально работать в dwm 6.0? Пробовал -*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-*, и koi8, задолбался искать нормальний, не показываает кирилицу. А как сделать нормальную поддержку UTF-8, и поддержку xft шрифтов, или других болеее-меенее симпатичных?

# Гость Dec. 30, 2011, 3:59 a.m.
У меня "-*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-*, системная локаль utf-8, все норм.

# sasha April 20, 2012, 12:14 p.m.
Всем здравствуйте, вот решил установить DWM, в Debian, где найти файл конфигурации DWM? (DWM я устанавливал из репозитрия)

# Brainsburn April 21, 2012, 6:44 p.m.
sasha, имхо, самый простой способ - скачать архив и вручную собрать. О захламлении системы не беспокойтесь - там всего 1 бинарник и 1 ман.

# Гость May 23, 2012, 2:17 p.m.
Огромное спасибо за толковое руководство для начинающих.

# Илья Oct. 6, 2012, 1:13 p.m.
тут еще инфа интересная есть
www.cypherpunks.ru/DWM.html

# st Nov. 2, 2012, 2:41 a.m.
После переключения раскладки на русскую, мышь перестает переключать рабочие столы
хе.. в awesome 3.4.13-1 тоже
пофиксили в DWM 5.9 баг, когда с русской раскладкой мышь не переключала теги
а когда в awesome?

# SBOdin July 22, 2017, 7:06 p.m.
Спасибо за полезное руководство

Комментировать:

Гость, Вы можете оставить свой комментарий.

Стиль кода:
Имя
Сайт * не обязательное поле
Поставьте галку, если вы - бот
Поставьте галку, если вы - человек

Друзья! Убедительная просьба воздержаться от нецензурной лексики!



Справка:
Если вы хотите использовать в тексте комментария специальные символы, например, [ и ], используйте их внутри тега [code] [/code]
Вы можете использовать теги BBcode. Для оформления кода и подсветки синтаксиса используйте тег [code] или [code=название_языка], например, [code=python]
Ссылки вставляйте так: [url]zenux.ru[/url] или так: http://zenux.ru, но не так: zenux.ru
Текст сообщения должен быть в пределах 3000 символов.




Последние комментарии:

Eugene: Галка, внешний вид изменить совершенно не сложно.... >>>
Галка: А сильно сложно Убунту переделывать?... >>>
Brainsburn_: “Написание в 1-й” подразумевает “в первой”, а не в... >>>
ZZZ: “Написание в 1-й” подразумевает &ldquo... >>>
SBOdin: Спасибо за полезное руководство... >>>