Dwm настройка

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

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

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

  • Сайт DWM
  • Мой config.h, учитывайте то, что стоит pertag и statuscolor патчи

Хабы:

Источник: https://habr.com/ru/post/136533/

Linux – это интересно

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

Aug. 22, 2010, 9:13 a.m. wm, dwm,
Brainsburn

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

Источник: https://zenux.ru/articles/42/

Назначение процесса dwm.exe в ОС Windows

Dwm настройка

Desktop Window Manager (Диспетчер окон рабочего стола) — это менеджер по работе с окнами, присутствующий в операционной системе Windows с релиза версии Vista.

Изначально он был создан для добавления эффекта Aero, тем не менее в скором времени функционал DWM был расширен и он стал неотъемлемой частью Windows.

Назначение процесса dwm.exe в ОС Windows

Функции Диспетчера окон рабочего стола

Как мы уже говорили выше, основной задачей dwm.exe является управление окнами рабочего стола, он следит за отображением всех пикселей на экране вашего компьютера.

DWM можно назвать еще и инструментом компоновки. Почему? Он использует собранные со всех одновременно открытых приложений (окно браузера, проводник и т.д.) графическую информацию и создает окончательное изображение, которые мы привыкли видеть обычным набором окон.

Назначение процесса dwm.exe в ОС Windows

DWM управляет не только окнами. Он отвечает еще и за важные системные функции, такие как визуальные эффекты, стеклянные рамки, скринсейверы, обои, темы Windows, 3D-анимации и Windows Flip.

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

Как включить или отключить DWM?

Прежде чем мы приступим к разбору этой темы, важно отметить, что Desktop Windows Manager стал важным компонентом операционной системы. Microsoft отключили любую возможность деактивировать его еще с момента выпуска Windows 8. Тем не менее данную службу можно отключить, если вы используете Windows 7 или Windows Vista.

Воспользовавшись комбинацией клавиш Windows + R, введите команду services.msc и нажмите Enter. Найдите службу Desktop Windows Manager (Диспетчер окон рабочего стола) и отключите ее.

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

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

DWM нагружает процессор или память

Некоторые пользователи жаловались на то, что Desktop Windows Manager по какой-то причине отнимал чрезмерно большое количество ресурсов компьютера. Если узнаете свою ситуацию, попробуйте выполнить следующее:

Отключите прозрачность

Перейдите в раздел Персонализация > Цвета. Прокрутите содержимое окна ближе к концу и смените значение Эффекты прозрачности на Откл.

Назначение процесса dwm.exe в ОС Windows

Отключите визуальные эффекты

Немаловажный шаг для снижения нагрузки на DWM — отключение всех возможных эффектов Windows.

1. Щелкните правой кнопкой по иконке Мой компьютер (Этот компьютер).

2. Перейдите в Свойства.

3. Откройте Дополнительные параметры системы.

Назначение процесса dwm.exe в ОС Windows

4. Откройте вкладку Дополнительно.

5. В меню Быстродействие перейдите в Параметры.

Назначение процесса dwm.exe в ОС Windows

6. Установите активное состояние на параметр Обеспечить наилучшее быстродействие.

Назначение процесса dwm.exe в ОС Windows

7. Нажмите Применить и ОК.

Эти действия существенно снизят презентабельность внешнего вида Windows, тем не менее нагрузка на DWM будет снижена, а производительность ПК повысится.

Рекомендуем по возможности обновить драйвер дисплея.

Стороннее приложение

Существует множество процессов, запускаемых сторонними приложениями. Как следствие, они могут напрямую влиять на загруженность системы.

Вспомните, не устанавливали ли вы на днях новую программу — вполне возможно причина кроется именно в этом действии.

Является ли dwm.exe вирусом?

Однозначный ответ — нет. По умолчанию эта служба находится в папке System32 системного диска. Если же вы обнаружили его в неположенном месте, допустим это другой логический раздел, тогда есть смысл включить настороженность.

Просканируйте компьютер при помощи Защитника Windows или воспользуйтесь сторонним антивирусным программным обеспечением, чтобы вовремя устранить возможный вирус.

Надеемся, статья оказалась для вас полезной и помогла разобраться с функциями Диспетчера окон рабочего стола!

***
Источник: www.starusrecovery.ru

Источник: https://zen.yandex.ru/media/starusrecovery/naznachenie-processa-dwmexe-v-os-windows-5c103b69b2ad0b00ad07a6da

Осваиваем DWM: проблемы и решения (настройка трея, запуск dwm через систему альтернатив)

Dwm настройка

Ссылка на аепрый пост, посвященный DWM: клиц

Итак, как мы помним, в DWM нет плагинов, но есть патчи. Таким образом, чтобы эХсперементировать над DWM с патчами, не трогая основной DWM из пакета, появляется задача: скомпилировать чистый DWM в папке пользователя и настроить его запуск, не трогая dwm из пакета.

Решение:

Скачиваем исходные коды по ссылке http://dl.suckless.org/dwm/

Распаковываем в ~/dwm, переходим в него, делаем make, получаем ошибку:

alexander@alexander-ThinkPad-X201 ~ $ cd ~/dwmalexander@alexander-ThinkPad-X201 ~/dwm $ makedwm build options:CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/X11R6/include/freetype2 -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=”6.1″ -DXINERAMALDFLAGS = -s -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXftCC = ccCC drw.cdrw.c:5:22: fatal error: X11/Xlib.h: Нет такого файла или каталога #include compilation terminated.make: *** [drw.o] Ошибка 1

Лечим:

sudo apt-get install libx11-dev

Опять получаем ошибку, но уже другую:

drw.c:6:25: fatal error: X11/Xft/Xft.h: Нет такого файла или каталога

лечим:

sudo apt-get install libxft-dev

получаем:

/usr/include/X11/Xft/Xft.h:39:22: fatal error: ft2build.h: Нет такого файла или каталога

пробуем: make

получаем:

/usr/include/X11/Xft/Xft.h:39:22: fatal error: ft2build.h: Нет такого файла или каталога

лечим:

sudo apt-get install libfreetype6-dev

Этот файл лежит в /usr/include/freetype2

Правим config.mk

Находим строчку: INCS = -I${X11INC} -I${FREETYPEINC}

Правим: INCS = -I${X11INC} -I${FREETYPEINC} -I/usr/include/freetype2

Пробуем make

получаем:

X11/extensions/Xinerama.h: Нет такого файла или каталога

Но в config.mk говорится, что Xinerama, comment if you don't want it – так что ищем строки

# Xinerama, comment if you don't want itXINERAMALIBS  = -lXineramaXINERAMAFLAGS = -DXINERAMA

и комментируем их

пробуем: make

Ура! Все скомпилировалось 🙂

Теперь патч,который выводит системный трей

Скачиваем его: http://dwm.suckless.org/patches/dwm-6.1-systray.diff (для версии 6.1)

Патчим:

patch < dwm-6.1-systray.diff

Получаем ошибку:

1 33 hunks FAILED — saving rejects to file dwm.c.rej

Ручками правим в пропатченном dwm.c строку 663: с XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); на resizebarwin(m);

Компилируем: make

Все ок.

Теперь задача номер два: запустить наш DWM при входе. Для этого нам поможет

.

Добавляем в систему альтернативу. Смотрим, где располагается текущий dwm:

alexander@alexander-ThinkPad-X201 ~ $ which dwm

/usr/bin/dwm

Добавляем альтернативу при помощи ключа –install утилиты update-alternatives (для памяти:   –install )

alexander@alexander-ThinkPad-X201 ~ $ sudo update-alternatives –install /usr/bin/dwm dwm /home/alexander/dwm/dwm 1065[sudo] password for alexander: update-alternatives: используется /home/alexander/dwm/dwm для предоставления /usr/bin/dwm (dwm) в автоматический режим

Собственно, смотрим, что получилось… (выходим из текущего WM, и запускаем DWM)

Трей есть!

Далее, если надо вдруг удалить альтернативу, то используем ключ   –remove

  –remove

В данном случае:

alexander@alexander-ThinkPad-X201 ~ $ sudo update-alternatives –remove dwm /home/alexander/dwm/dwm[sudo] password for alexander: update-alternatives: используется /usr/bin/dwm.default для предоставления /usr/bin/dwm (dwm) в автоматический режим

Для истории:

–config – настраивает альтернативу. Например, sudo update-alternatives –config x-www-browser – может сменить браузер по умолчанию.

ls -al /etc/alternatives/ – посмотреть список файлов-ссылок на альтернативы

Основные ссылки:

editor — редактор текста (типа nano, vi, vim, emacs)

ftp — ftp-клиент

x-cursor-theme — тема курсора

x-session-manager — графическая сессия (kde, gnome, openbox)

x-terminal-emulator — эмулятор терминала

x-window-manager — оконный менеджер (kwin, metacity, openbox)

x-www-browser — веб-браузер

Ну и напоследок, так сказать – выводы про dwm.

А выводы немного неутешительны. Несмотря на то, что эксперимент достаточно удачен, рано или поздно – патчи войдут в конфликт друг с другом, и будет “весело” – в том смысле, что разгребать вручную кучу diff-файлов удовольствие, с моей точки зрения ниже среднего. Так что посмотрим в сторону других тайлинговых альтернатив dwm…
в соцсетях:

Источник: http://www.alib.spb.ru/blog/page/osvaivaem-dwm-problemy-i-reshenija-nastrojka-treja-zapusk-dwm-cherez-sistemu-alternativ

Настройка dwm: Патчи

Dwm настройка

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

Официальные патчи для dwm ищите на ресурсе: http://dwm.suckless.org/patches/. В этой статье я их буду брать именно оттуда.

Как и во вводной статье по dwm, я буду пользоваться abs в Archlinux. Если вы собираете dwm из исходников, то отличий будет не так уж много. На самом деле, процедура становится даже проще.

Первым делом нужно скачать сам патч. Одним из самых простых является fancybar. Он меняет стандартное поведение dwm таким образом, что на верхней панели отображаются имена всех окон в текущем тэге. По умолчанию же выводится только имя окна в фокусе.

Ссылка на страницу патча fancybar: http://dwm.suckless.org/patches/fancybar. Имеет значение то, какая у вас версия dwm. Патч может не заработать, если версия окажется несовместимой. Узнать версию dwm можно с помощью команды:

У меня dwm-6.1. Поэтому я скачиваю соответствующий патч dwm-6.1-fancybar.diff. Сохранять его лучше всего в /var/abs/local/dwm/.

Патч представляет собой файл описания различий между чистой версией программы и ее доработанной копией.

Если вы используете abs и следуете моим советам из прошлой статьи, то откройте файл /var/abs/local/dwm/PKGBUILD. Отредактируем в нем секции source и prepare():

source=(http://dl.suckless.org/dwm/dwm-$pkgver.tar.gz  cd $srcdir/$pkgname-$pkgver  cp $srcdir/config.h config.h  patch -p1 sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; if(selmon->sel->isfloating)- resize(selmon->sel, selmon->sel->x, selmon->sel->y,-        selmon->sel->w, selmon->sel->h, False);+ /*restore last known float dimensions*/+ resize(selmon->sel, selmon->sel->sfx, selmon->sel->sfy,+        selmon->sel->sfw, selmon->sel->sfh, False);+ /*save last known float dimensions*/+ selmon->sel->sfx = selmon->sel->x;+ selmon->sel->sfy = selmon->sel->y;+ selmon->sel->sfw = selmon->sel->w;+ selmon->sel->sfh = selmon->sel->h;

Здесь указан проблемный фрагмент. Строки, в начале которых стоит -, должны быть убраны, а у которых +, — добавлены.

Сравниваем с оригинальным файлом /var/abs/local/dwm/src/dwm-6.1/dwm.c.orig:

togglefloating(const Arg *arg) if (selmon->sel->isfullscreen) /* no support for fullscreen windows */ selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; if (selmon->sel->isfloating) resize(selmon->sel, selmon->sel->x, selmon->sel->y,        selmon->sel->w, selmon->sel->h, 0);

Я скопировал всю функцию, которая будет подвержена изменениям. Теперь давайте поиграем в игру «Найти отличия». Я вижу ровно два. Первое:

if (selmon->sel->isfloating)

В оригинальном файле после if есть пробел. А в патче нет.

Второе:

selmon->sel->w, selmon->sel->h, 0);

В качестве последнего аргумента в оригинальном файле передается 0, а в патче — False.

Исправим файл патча /var/abs/local/dwm/dwm-6.1-save_floats.diff:

URL: http://dwm.suckless.org/patches/historical/save_floatsThis patch saves size and position of every floating window before it is forcedinto tiled mode. If the window is made floating again, the old dimensions will===================================================================— dwm/dwm.c.orig 2014-02-09 15:24:10.344116918 +0100+++ dwm/dwm.c 2014-02-09 15:24:10.336116918 +0100+ int sfx, sfy, sfw, sfh; /* stored float geometry, used on mode revert */ int oldx, oldy, oldw, oldh; int basew, baseh, incw, inch, maxw, maxh, minw, minh; XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; if (selmon->sel->isfloating)- resize(selmon->sel, selmon->sel->x, selmon->sel->y,-        selmon->sel->w, selmon->sel->h, 0);+ /*restore last known float dimensions*/+ resize(selmon->sel, selmon->sel->sfx, selmon->sel->sfy,+        selmon->sel->sfw, selmon->sel->sfh, False);+ /*save last known float dimensions*/+ selmon->sel->sfx = selmon->sel->x;+ selmon->sel->sfy = selmon->sel->y;+ selmon->sel->sfw = selmon->sel->w;+ selmon->sel->sfh = selmon->sel->h;

Повторная попытка привела нас к успеху. Патч работает.

Патч dwm для отображения второй строки статуса: dualstatus

Еще один патч, который не заработал у меня сразу. К тому же, он может оказаться полезным. Встречайте dualstatus. Он позволяет отображать вторую панель в нижней части экрана. Чем не альтернатива conky?

Итак. Скачиваем патч: http://dwm.suckless.org/patches/dualstatus. Делаем все, что нужно. Запускаем на сборку, и получаем ошибку:

> updpkgsums && makepkg -fi Hunk #1 succeeded at 106 (offset 19 lines).Hunk #2 succeeded at 1211 with fuzz 2 (offset 165 lines).Hunk #3 succeeded at 1946 (offset 300 lines).patching file config.def.hHunk #1 succeeded at 19 with fuzz 1 (offset 4 lines).Hunk #2 succeeded at 67 (offset 4 lines).Hunk #1 succeeded at 166 with fuzz 2 (offset 25 lines).Hunk #2 succeeded at 248 (offset 31 lines).Hunk #3 succeeded at 312 (offset 38 lines).Hunk #4 succeeded at 524 with fuzz 1 (offset 38 lines).Hunk #6 succeeded at 883 with fuzz 1 (offset 121 lines).Hunk #7 succeeded at 1776 (offset 204 lines).Hunk #8 succeeded at 1953 (offset 239 lines).Hunk #9 succeeded at 2094 with fuzz 1 (offset 258 lines).Hunk #10 succeeded at 2114 (offset 258 lines).Hunk #11 succeeded at 2290 (offset 258 lines).1 11 hunks FAILED — saving rejects to file dwm.c.rej==> ОШИБКА: Произошел сбой в prepare().

Снова смотрим проблемный фрагмент в /var/abs/local/dwm/src/dwm-6.1/dwm.c.rej:

@ -589,6 +600,7 @ configurenotify(XEvent *e) for (m = mons; m; m = m->next) XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);+ XMoveResizeWindow(dpy, eb.win, mons->wx, eb.y, mons->ww, bh);

Сравниваем с /var/abs/local/dwm/src/dwm-6.1/dwm.c.orig:

configurenotify(XEvent *e) XConfigureEvent *ev = &e->xconfigure; /* TODO: updategeom handling sucks, needs to be simplified */ if (ev->window == root) { dirty = (sw != ev->width || sh != ev->height); if (updategeom() || dirty) { for (m = mons; m; m = m->next)

В этот раз отличие сразу бросается в глаза. В патче мы видим:

XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);

А в оригинале:

Исправляем /var/abs/local/dwm/dwm-6.1-dualstatus.diff:

diff –git a/config.def.h b/config.def.hindex 7054c06..b96107a 100644@ -15,6 +15,7 @ static const unsigned int borderpx  = 1;        /* border pixel of windows */ static const unsigned int snap      = 32;       /* snap pixel */ static const int showbar            = 1;        /* 0 means no bar */ static const int topbar             = 1;        /* 0 means bottom bar */+static const int extrabar           = 1;        /* 0 means no extra bar */ static const char *tags[] = { “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9” };@ -62,6 +63,7 @ static Key keys[] = { { MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } }, { MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } }, { MODKEY,                       XK_b,      togglebar,      {0} },+ { MODKEY,                       XK_b,      toggleextrabar, {0} }, { MODKEY,                       XK_j,      focusstack,     {.i = +1 } }, { MODKEY,                       XK_k,      focusstack,     {.i = -1 } }, { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },diff –git a/dwm.c b/dwm.cindex 0362114..9b7cd74 100644@ -141,6 +141,13 @ typedef struct { /* function declarations */ static void applyrules(Client *c); static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);@ -210,6 +217,7 @ static void tag(const Arg *arg); static void tagmon(const Arg *arg); static void tile(Monitor *); static void togglebar(const Arg *arg);+static void toggleextrabar(const Arg *arg); static void togglefloating(const Arg *arg); static void toggletag(const Arg *arg); static void toggleview(const Arg *arg);@ -266,6 +274,7 @ static Display *dpy; static Monitor *mons, *selmon; /* configuration, allows nested code to access above variables */@ -477,6 +486,8 @ cleanup(void) XUngrabKey(dpy, AnyKey, AnyModifier, root);+ XUnmapWindow(dpy, eb.win);+ XDestroyWindow(dpy, eb.win); for (i = 0; i next)+ XMoveResizeWindow(dpy, eb.win, mons->wx, eb.y, mons->ww, bh);@ -751,6 +763,9 @ drawbar(Monitor *m) drw_map(drw, m->barwin, 0, 0, m->ww, bh);+ drw_setscheme(drw, &scheme[SchemeNorm]);+ drw_text(drw, 0, 0, mons->ww, bh, eb.text, 0);+ drw_map(drw, eb.win, 0, 0, mons->ww, bh);@ -1558,6 +1573,7 @ setup(void) root = RootWindow(dpy, screen); drw = drw_create(dpy, screen, root, sw, sh); drw_load_fonts(drw, fonts, LENGTH(fonts)); die(“no fonts could be loaded.”); bh = drw->fonts[0]->h + 2;@ -1699,6 +1715,17 @ togglebar(const Arg *arg)+toggleextrabar(const Arg *arg)+ XMoveResizeWindow(dpy, eb.win, selmon->wx, eb.y, selmon->ww, bh); togglefloating(const Arg *arg)@ -1810,6 +1837,13 @ updatebars(void) XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); XMapRaised(dpy, m->barwin);+ eb.win = XCreateWindow(dpy, root, mons->wx, eb.y, mons->ww, bh, 0, DefaultDepth(dpy, screen),+        CopyFromParent, DefaultVisual(dpy, screen),+        CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);+ XDefineCursor(dpy, eb.win, cursor[CurNormal]->cursor);+ XMapRaised(dpy, eb.win);@ -1823,6 +1857,13 @ updatebarpos(Monitor *m) m->wy = m->topbar ? m->wy + bh : m->wy;+ if(m == mons && eb.show) {+ eb.y = topbar ? m->wy + m->wh : m->wy;+ m->wy = m->topbar ? m->wy : m->wy + bh;@ -1992,8 +2033,21 @ updatetitle(Client *c)- if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))+ if(!gettextprop(root, XA_WM_NAME, text, sizeof(text))) { strcpy(stext, “dwm-“VERSION);+ char *e = strchr(text, ';');+ strncpy(eb.text, e, sizeof(eb.text)-1);+ strncpy(stext, text, sizeof(stext)-1);

Теперь патч работает. Но рано радоваться. Собрать dwm мы все еще не можем. На этот раз произошла ошибка компиляции:

> updpkgsums && makepkg -fi ==> Запускается build()…CFLAGS   = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/include/X11 -I/usr/include/freetype2 -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=”6.1″ -DXINERAMALDFLAGS  = -s -L/usr/lib/X11 -lX11 -lXinerama -lfontconfig -lXftIn file included from /usr/include/stdio.h:27:0,/usr/include/features.h:148:3: предупреждение: #warning “_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE” [-Wcpp] # warning “_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE”In file included from /usr/include/errno.h:28:0,/usr/include/features.h:148:3: предупреждение: #warning “_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE” [-Wcpp] # warning “_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE”dwm.c: В функции «setup»:dwm.c:1780:12: ошибка: «extrabar» undeclared (first use in this function)dwm.c:1780:12: замечание: each undeclared identifier is reported only once for each function it appears indwm.c: На верхнем уровне:dwm.c:1957:1: предупреждение: «toggleextrabar» определена, но нигде не используется [-Wunused-function] toggleextrabar(const Arg *arg)Makefile:18: ошибка выполнения рецепта для цели «dwm.o»make: *** [dwm.o] Ошибка 1==> ОШИБКА: Произошел сбой в build().

Из этого сообщения легко понять, что не хватает определения переменной или константы с именем extrabar. Смотрим еще раз в /var/abs/local/dwm/dwm-6.1-dualstatus.diff. И видим, что там и правда объявлена такая константа:

+static const int extrabar           = 1;        /* 0 means no extra bar */

Еще раз возвращаемся к нашему /var/abs/local/dwm/config.h. И добавляем следующее:

static const int extrabar           = 1;        /* 0 means no extra bar */

Вот теперь все собирается и работает. Чтобы выводить информацию на нижнюю панель, используйте уже знакомую нам команду xsetroot. Сообщение для верхней и нижней панелей нужно отделять с помощью точки с запятой. Например:

setroot -name 'Hello, top!;Hello, bottom!'
Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.