CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
23.01.2022

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

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Desktop
Internet
Internet-серверы
Безопасность
Бизнес/Офис
Игры
Мультимедиа
Наука
Операционные системы
Программирование
СУБД
Создание веб-сайтов
Утилиты

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Заметки :: Блогометки :: Десктопы

dwm. От статики к динамике

http://polachok.googlepages.com/

"Динамикой называется раздел механики, в котором изучаются движения механических систем под действием сил"
Из учебника по теормеху

Наблюдение 1.Вы замечали, что у UNIX'овых манов есть интересная особенность: они ничего не объясняют человеку совершенно не знакомому с предметом? Например man dwm расскажет заинтересовавшемуся пользователю, что dwm значит dynamic window manager. Тот самый случай. Я, в меру сил, попытаюсь исправить этот недостаток.

"Это не Пьер и не Жиль, а какой-то мужик в трусах"
Соня Винниченко

Во-первых, объясню, чем отличается dwm от других оконных менеджеров. Тут все просто: отличается первой буквой в названии. Это "d" там неспроста. "Динамичность" означает, что расположение окон по экрану происходит динамически, в зависимости от изменяющихся условий. Вообще, как мне кажется, из-за особенностей дизайна dwm служит не только оконным менеджером, а еще и организатором мыслительного потока (ну и коряво же выразился). Вы, конечно, не поняли, что я хочу сказать (а некоторые, возможно, подумали: еще только второй абзац, а уже фанатичный бред). Объясню: в dwm нет "концепции" рабочих столов, она заменена идеей тэгов. Каждому окну приписывается один или несколько тэгов. Пользователь во время работы создает вид - совокупность тегов, отображаемых в конкретный момент на экране. Пример: у меня есть вид с тэгом web и я читаю статью про вомбатов в wikipedia. Но тут вдруг приходит сообщение от друга Васи, я нажимаю волшебную клавишу, и добавляю в свой вид тэг im. Окно gajim'a появляется, я отвечаю и продолжаю читать про вомбатов. Или: пишу статью про dwm, хочу посмотреть, как она выглядит в браузере, добавляю к тэгу main тэг web. Таким образом, все, что относится к текущей деятельности, оказывается перед глазами.

Наблюдение 2.Классические оконные менеджеры не достойны этого гордого имени. Почему? По простой причине: окнами они не управляют, а просто перекладывают свою работу на пользователя, предоставляя ему такие средства как заголовки и кнопки в них. Замечали, сколько времени уходит на перемещение окон по рабочему столу? Нет? Тогда объясните, почему каждая эффективная рабочая среда (имеется в виду в первую голову vim и emacs) предлагает пользователю свою систему управления рабочим пространством, обычно реализованную в виде неперекрывающихся фреймов. То- то же. Если у Вас есть достаточно времени попробуйте поработать в twm и увидите насколько это неудобно. Но далеко ли ушел от этих неудобств ваш оконный менеджер? Нет! Просто в него добавили некий уникальный для каждого набор костылей, которые поприкрыли непотребство.

"Винтовка - это праздник, все летит в п-ду"
Егор Летов.

Наблюдение 3. C каждым годом растет количество ядер, помещающихся в один процессор и количество мегагерц в каждом ядре. С каждым годом растет объём памяти, поглощаемой приложениями, увеличивается количество кнопок и меню. Задачи же, по большей части, остаются теми же: редактирование текста, графики и мультимедиа. И если Microsoft можно подозревать в сговоре с производителями процессоров и видеокарт, то open source'ных хакеров в этом обвинять как-то… не с руки. Anselm R. Garbe объясняет эту тенденцию стремлением создателей раздутого кода показать себя крутыми специалистами, понимающими то, что недоступно другим. Такой подход в корне неверен, и противоречит самой идее open source: "пишу один, доводим вместе". Против такого загромождения Anselm и выступает. Им был основан проект suckless.org:dedicated to software which sucks less . Кроме dwm в рамках проекта разрабатывается wmii , набор библиотек для взаимодействия по протоколу 9P, набор вспомогательных утилит , каким-либо образом полезных при использовании dwm или wmii, и wiki.

"Я покоряю города истошным воплем идиота,
Мне нравится моя работа, гори-гори моя звезда"

БГ

Города - не города, но, надеюсь, кого-то мои словесные излияния заинтересовали. Так оно или не так - не знаю, но на этом от чистой теории перейду к чистой, опять же, практике. Получение dwm'a не составит труда, можно, конечно, как обычно положиться на пакетный менеджер своего дистрибутива. Но я бы не советовал этого делать, скорей всего там обнаружится устаревшая версия. Новые версии dwm/dmenu появляются весьма часто, примерно раз в 2 недели. На сегодняшний день это версия 4.0. Формат конфигурационного файла не менялся уже на протяжении вроде бы четырех релизов, и вроде бы устоялся. Ах, да, забыл Вас напугать.. .dwm конфигурируется прямо в исходных кодах (тут слышатся выкрики "фууу, ниасилили xml!", но автор не обращает на них внимания). На самом деле не так страшен Си как его малюют. Не страшнее FvwmScript как минимум. Поверьте, Вам не придется убивать недели и месяцы на настройку своего dwm.

После распаковки архива со свежим релизом можно подправить файл config.mk, в нем задается путь для установки:

PREFIX = /usr/local

Я лично предпочитаю устанавливать куда-нибудь в домашний каталог:

PREFIX = /home/polachok/Programs

но дело, конечно, ваше. После этого следует дать команду

make

а если не терпится, то и

make install

После этого dwm будет установлен и готов к работе, останется лишь прочитать man dwm и прописать его в качестве оконного менеджера по умолчанию. На этом месте мы прощаемся с нетерпеливыми читателями и продолжаем разговор с более умеренными. Так вот, после команды make в каталоге с dwm появляется файл config.h (полученный копированием config.default.h). Его (как вы наверное догадались) мы и будем редактировать, а при возникновении каких-либо проблем всегда можно проделать

diff -u

с оригиналом и попробовать таким образом прояснить суть проблемы. Файл config.h отлично прокомментирован, но я все-таки опишу значение каждого параметра.
BORDERPX ширина границы окна. в dwm у окон нет заголовков.
FONT шрифт используемый в панели. в dwm есть панель, на которой отображается заголовок активного окна, названия тэгов и текст со стандартного ввода
NORMBORDERCOLOR цвет границ неактивных окон
NORMBGCOLOR фон панели
NORMFGCOLOR текст панели
SELBORDERCOLOR цвет границ активного окна
SELBGCOLOR фон заголовка окна в панели
SELFGCOLOR текст заголовка окна в панели
TOPBAR расположение панели: вверху или внизу?

Дальше задаются имена тегов, и не забудьте про NULL в конце:

#define TAGS \
const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL };

Честно говоря, мне совершенно непонятны причины таких вот сбивающих с толку умолчаний. Цифровые названия скорее наводят на мысль об организации работы по-старому, как с виртуальными рабочими столами. Я бы посоветовал сменить их на что-нибудь более… осмысленное, вроде web, mail, dev и проч. Подумайте на какие отдельные классы задач можно разбить ваш рабочий процесс. Дальше идут правила размещения окон по тэгам:

#define RULES \
static Rule rule[] = { \
        /* class:instance:title regex   tags regex      isfloating */ \

В первой и второй колонке можно использовать регулярные выражения. Вот пример из моего config.h:

 { "Gajim*",            "im",       True }, \

Это правило сделает все окна Gajim'a плавающими и разместит его на тэге im. Если требуется просто разместить окно на тэге в последней колонке пишется False. Дальше видим

#define LAYOUTS \
static Layout layout[] = { \
	/* symbol		function */ \

Это способы "раскладывания" окон, я обычно их называю режимами. tile - укладывать плиткой, без перекрытий, одно или несколько окон при этом считаются главными - MASTER и занимает основную часть экрана. floating - как в традиционных wm. Здесь же можно указать символ, используемый для индикации текущего режима на панели dwm. Первый в списке режимов становится используемым по умолчанию, но вы всегда можете сменить текущий режим нажатием комбинации клавиш.
ShiftMask зажатая клавиша Shift
ControlMask зажатая клавиша Control

Завершает конфиг описание модификатора и список горячих клавиш:

MODKEY

Клавиша-модификатор, по умолчанию Alt.

#define KEYS \
static Key key[] = { \
        /* modifier                     key             function        argument */ \

Список горячих клавиш: модификатор, клавиша, функция, аргумент.

ShiftMask зажатая клавиша Shift
ControlMask зажатая клавиша Control
ShiftMask зажатая клавиша Shift
ControlMask зажатая клавиша Control

Например

{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	"8" }, \

такая строка означает зажатие Alt+Control+Shift+9.
spawn запуск внешней программы
setlayout переключить режим
incmasterw увеличить/уменьшить ширину MASTER-области
incnmaster увеличить/уменьшить количество окон в MASTER-области
focusclient передать фокус следующему/предыдущему окну
togglemax развернуть на весь экран
zoom перенести окно в MASTER-область
togglefloating переключатель плавающее/tiled для отдельного окна
killclientзакрыть окно
view Сделать тэг-аргумент текущим видом
toggleview Добавить/удалить тэг-аргумент в текущий вид
tag Выставить окну тэг-аргумент
toggletag Добавить/удалить тэг-аргумент клиенту
quit выход

Многие пользователи ion3 жалуются на якобы отсутствие в dwm "named scratchpads". Это необоснованно. Если вам требуется плавающее окно, появляющееся и исчезающее по горячей клавише, создайте тэг, разместите на нем с помощью правил своё приложение, а затем добавьте в список горячих клавиш конструкцию с toggleview. Как я уже писал немного выше, dwm читает текст со стандартного ввода и способен выводить его на свою панель. Грех этой возможностью не воспользоваться, ведь таким образом пользователю даются практически неограниченные возможности добавления всяческих мониторов, вроде загрузки cpu или заряда батареи. Если Вы чувствуете в себе силы, можете попробовать разобраться в этом:

 
echo "MPD: [`mpc | sed -n '2s/\[\(.*\)\].*/\1/;2s/playing/p/p;2s/paused/s/p;2s/stopped/t/p'`] `mpc | sed -n '1p'` `mpc | sed -n '2s/.*\]//p'|cut -d ' ' -f 2,6` | bat0: $(eval echo `grep remain /proc/acpi/battery/BAT0/state|cut -d ' ' -f 8`*100/4423 | bc) cpu0: `echo $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)/1000 | bc` | `date` `uptime | sed 's/.*://; s/,//g'`"
Если же городить подобную ахинею лениво можно воспользоваться (возможно привычным) conky, он ведь умеет выводить на консоль (man conky, опция out_to_console). Чтобы установить dwm в качестве оконного менеджера по умолчанию напишите в ~/.xinitrc или ~/.xsession что-то вроде:
 while true
    do
        echo `date` `uptime | sed 's/.*,//'` # или что-там у вас подается на stdin?
        sleep 1
    done | dwm 

"Тра-та-та, тра-та-та, мы везем с собой кота. Обезьяну, попугая. Вот компания какая!" Из детской песенки Запускать гуёвые программы из терминалок в виде:

firefox & exit

Довольно тоскливо, не правда ли? Можно конечно для каждого нужного приложения прописать хоткей... Но проще и удобней воспользоваться dmenu. Ну да, dynamic menu. dmenu читает со стандартного ввода список значений разделенных символами новой строки "\n", выводит их в виде горизонтального меню, по которому можно перемещаться стрелочками (автодополение тоже работает), и выводит выбранный элемент на stdout. Все еще непонятно?

 exec $(ls -lL `echo "$PATH" | tr : ' '` 2>|/dev/null | awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort -u|dmenu) 

Эта штука запустит любой бинарник из $PATH и потому так и просится в config.h. Хотя, конечно, хорошо было бы организовать кэширование. Как это сделать интересующийся читатель догадается сам, а другой нам не нужен.

Вот собственно и все, что я хотел рассказать об оконном менеджере dwm. Пожелание напоследок: используйте голову по назначению и все получится.




Комментарии

Konstantyn, Tue Apr 29 16:41:33 2008:
а ещё может это и изврат но мне понравилос dwm +
yakuake
Konstantyn, Tue Apr 29 16:29:53 2008:
юзаю даже без denu
аноним, Tue Apr 29 16:29:21 2008:
Штука весьма удобная)
sinclair, Wed Dec 26 19:23:53 2007:
ну каждому своё =)
аноним, Wed Dec 26 19:06:18 2007:
имхо, удобнее сделать автозапуск через ~/.xsession, вот так примерно:

echo "" > ~/.xsession-errors
eval `dbus-launch --sh-syntax --exit-with-session`
xrdb ~/.Xdefaults || echo PIZDETS
eval `grep "export PLAN9" ~/.zshrc`
eval `grep "export PATH" ~/.zshrc`
export LANG=ru_RU.UTF-8
java -jar ~/bin/toonel.jar -t &
xsetroot -solid "#2e3436"
xset +fp ~/.fonts/artwiz-rus
mpd &
xmodmap ~/.xmodmaprc &
autocutsel -selection PRIMARY -fork &
autocutsel -selection CLIPBOARD -fork &
pmenu-gen&
swarp 1280 900 &
unclutter -idle 1 &
xmodmap ~/.xmodmaprc &
(sleep 8 ; urxvt -e mutt -y & urxvt -T htop -geometry 120x40+150+110 -e screen -c ~/.screenrc.misc &) &
urxvt -e screen&
while true
do
dwm
done
sinclair, Wed Dec 26 17:23:56 2007:
очень полезно ещё сделать автозапуск =) как, например, описано тут - http://www.vkoster.ru/soft/dwm_manager/

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds