Блог Александра Башкирова

ИТ и бизнес, компьютеры и ПО, фото, программирование и просто мысли…
Этот сайт в основном посвящен тому, что мне интересно вне работы. Ведется в порядке хобби.
Все изложенное на сайте - мое частное оценочное мнение и не может быть истолковано иначе.
Со всеми вытекающими из этого последствиями.

dwm

Подписаться на эту метку по RSS

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

Просмотров: 5836Комментарии: 0
Linux

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

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

Решение:

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

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

alexander@alexander-ThinkPad-X201 ~ $ cd ~/dwm
alexander@alexander-ThinkPad-X201 ~/dwm $ make
dwm 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" -DXINERAMA
LDFLAGS  = -s -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft
CC       = cc
CC drw.c
drw.c:5:22: fatal error: X11/Xlib.h: Нет такого файла или каталога
 #include <x11 xlib.h="">
                      ^
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 it
XINERAMALIBS  = -lXinerama
XINERAMAFLAGS = -DXINERAMA

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

пробуем: make

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

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

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

Патчим:

patch < dwm-6.1-systray.diff

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

1 out of 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 при входе. Для этого нам поможет

встроенная в ubuntu система альтернатив

.

Добавляем в систему альтернативу. Смотрим, где располагается текущий 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...

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

Просмотров: 4439Комментарии: 0
Linux

Меня что-то торкнуло в сторону тайлинговых WM (windows manager, менеджер окон). Идея понравилась :) особенно на широкоформатном дисплее ноутбука... правда, есть одно "но": как правило, настройке эти DM подвергаются достаточно сложно. Начать "смотреть" решил с "самого простого" - DWM.

Оказалось, правда, что он самый сложный. Потому что настройка его сводится к измнению заголовочного C-файла, и перекомпиляции. Афигеть! Но "just for fun" попробовать стоит.

В общем, я буду потихоньку описывать тут - что сделано, что как решил...

Итак, первое. Вы установили DWM (ставится из репозиториев Убунты) и зашли в него. Посмотрели. Захотели что-нибудь запустить... а как - непонятно: меню нет, значков нет, ничего нет! Мышка есть - но зачем она, непонятно.

Да, DWM управляется с клавиатуры. И самое первое, что надо запомнить - это Shift-Alt-Enter. Запуск терминала. Кроме того, DWM поддерживает Dmenu - удобная вещь для запуска разных приложений. Вызывается через Alt-P. Alt-Num - переходы по "тегам" (9 областей). Alt-Shift-c - закрыть активное окно.

Второе. Вы захотели выйти из DWM.

Решается двумя путями:

1) Alt-Shift-q - закрыть dwm (штатная возможность DWM, ни за что бы не догадался).

2) Воспользоваться странным, но универсальным способом: killall -u `whoami` (я вообще себе в .bashrc прописал alias logoff='killall -u `whoami`' и использую logoff из консоли).

Пояснение: для Linux Mint (и подозреваю Убунты) - эта команда закрывает все процессы текущего пользователя, то есть выкидывает в окно логина. Потенциально это опасно, т.к. может быть фоном что-то запущено... и не отработано... в общем, на свой страх и риск. Тем не менее - это хороший работающий способ выйти из сеанса пользователя из консоли, для WM, которые этого не поддерждивают явно.

Третье. Обоев тоже нет, а среда графическая.

Ну, тут вроде должно быть просто: есть feh, есть nitrogen (я лично предпочитаю его)... но вот засада: нет в DWM startup скриптов. Никаких. Вообще!

Что в таком случае делают тру-линуксодиды? Правильно, используют .xinitrc (лично я давно не использовал этот как мне казалось - рудимнет, на чём и погорел, но об этом ниже). Так вот, раньше как было: в папке пользователя создаешь .xinitrc - пишешь туда, что нужно, и вуаля, оп! всё работает! Но, как выяснилось .xinitrc - "не работает". Теперь автостарт при старте иксов подхватывает ~/.xsessionrc - беда не велика, будем работать с ним.

Дальше - больше и интереснее. Если просто прописать в .xsessionrc - nitrogen --restore, то обои "из нитрогена" будут "переписывать" обои используемых WM. Для обоев может и не критично, а вот разнести запуск каких-то специфических для WM вещей хотелось бы... В итоге родилось такое вот извращенское решение:

(sleep 5

if [ `ps -aux | grep '0:00 dwm' | wc -l` -eq 2 ] ;

then

  nitrogen --restore

fi;) &

Тут, кстати, надо сделать пару пояснений. Идея в том, чтобы после того, как загрузится DWM (или другой WM) - убедиться что загружен именно DWM, и, если это так - провести нужные нам запуски (в данном примере - только нитроген). Задержка в 5 секунд нужна, чтобы DWM загрузился (на самом деле, это очень быстрая и легкая среда - грузится намного быстрее, секунды за 3. Остальные 2 - страховка).

Ну и для памяти: ps -aux | grep xfce-session - позволяет узнать, запущен ли xfce в данный момент (может, кому пригодится).

Продолжение наверное следует :)