Чем можно заняться линуксоиду, у которого в системе всё, решительно всё работает? Конечно же, довести до ума свой оконный менеджер. Или попробовать но вый.
К примеру, dwm — динамический фреймовый оконный менеджер. Написан на языке C. Настройка производится посредством правки заголовочного файла, для чего необходимо иметь исходники dwm. Если вас не пугает перспектива потратить час-другой на настройку этой штуки под свои нужды, то давайте приступим.
Где взять?
Если ваш дистрибутив — ArchLinux, ставьте вместе с автором сего
поста abs
— это наилучшее решение, так вы будете иметь возможность внести свои правки в конфигурационный файл dwm - сделать всё по-своему, а затем установить то, что получилось. Обладатели других дистрибутивов могут найти исходники dwm и загрузить их. Например, с сайта dwm.suckless - вкладка downloads
.
Метода арча:
$ sudo pacman -S abs
$ sudo vim /etc/abs.conf
Здесь поменяем каталог /var/abs
на какой-нибудь другой. Можно оставить по-умолчанию, но тогда все исходники лягут в директорию /var
, что не есть хорошо, если под содержащий её раздел выделено мало места.
Пример настройки:
# /etc/abs.conf
# the top-level directory of all your PKGBUILDs
[ "$ABSROOT" = "" ] && ABSROOT="/home/user/abs/"
Синхронизируем дерево abs:
$ sudo abs
==> Starting ABS sync...
receiving file list ... done
./
community/python-memcached/PKGBUILD
core/
multilib/
multilib/binutils-multilib/
multilib/binutils-multilib/PKGBUILD
multilib/binutils-multilib/binutils.install
Если вам не нужна вся коллекция abs
, можно получить только dwm:
$ sudo abs community/dwm/
Отлично. Теперь находим dwm и начинаем разбираться с его настройкой. Перейдите в нужную директорию
$ cd /home/user/abs/community/dwm
Вносим нужные правки (об этом ниже) и собираем пакет для установки. Но постойте-ка! Мы ведь нарушим целостность файла, изменив его, соответственно, не пройдём проверку на контрольные суммы. Что ж, давайте отключим эту проверку. Итак, установка:
$ sudo makepkg --skipchecksums --asroot
Добавьте в ваш .xinitrc
запись
# .xinitrc
exec dwm
И входите по startx - добро пожаловать!
Можно приступать к настройке, но... прежде позвольте разжечь ваш аппетит. Давайте посмотрим, что мы можем получить в итоге. Прежде всего тайловые wm проповедуют принцип "ничего лишнего":
Как настроить ?
Посмотрим, что можно изменить в файле config.h
В первую очередь это шрифт. Здесь нужно чуть изменить настройки, поскольку в противном случае в статус-баре будут забавные "кракозябры" вместо кириллицы.
Для определения поддержки тем или иным шрифтом кириллицы, используйте утилиту xfontsel
.
static const char font[]= "-*-dejavu sans-medium-r-*-*-8-*-*-*-*-*-*-ru";
Вам может потребоваться явно указать пути к шрифтам в файле /etc/X11/xorg.conf
:
Section "Files"
FontPath "/usr/share/fonts/local"
FontPath "/usr/share/fonts/misc"
FontPath "/usr/share/fonts/cyrillic"
EndSection
Далее идёт настройка цветов статус-бара:
static const char normbordercolor[] = "#8181ff";
static const char normbgcolor[] = "#222222";
static const char normfgcolor[] = "#bbbbbb";
static const char selbordercolor[] = "#4e4eff";
static const char selbgcolor[] = "#606060";
static const char selfgcolor[] = "#eeeeee";
static const unsigned int borderpx = 1;
static const unsigned int snap = 32;
static const Bool showbar = True;
static const Bool topbar = True;
- normbordercolorp[] = цвет границ окна
- normbgcolor[] = цвет фона
- normfgcolor[] = цвет текста в статус-баре
- selbordercolor[] = цвет границ активного окна
- selbgcolor[] = цвет фона заголовка окна
- selfgcolor[] = цвет текста заголовка окна
- borderpx = ширина границ окна
Настроим как нам нравится наши теги (это что-то вроде рабочих столов в других менеджерах окон)
static const char *tags[] = { "term", "chat", "www", "media", "work" };
Теперь вместо цифр мы имеем человекопонятные обозначения для каждого тега.
Как и во всех — мне известных — оконных менеджерах, dwm использует клавишу-модификатор. По умолчанию это Mod1Mask
— то есть клавиша Alt
. Чтобы изменить её на клавишу super
(там, где лого windows) — изменим запись #define MODKEY
:
/* key definitions */
#define MODKEY Mod4Mask
#define TAGKEYS(KEY,TAG)
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
Настройка горячих клавиш. Из приведённого ниже кода ясно, что нажатие клавиши-модификатора + p
вызовет dmenu
, нажатие клавиши-модификатора + Return
(Enter) вызовет эмулятор терминала, ну и так далее. В принципе, стандартные обозначения вполне даже удобны и вряд ли вам захочется их менять. Мы вернёмся к этому чуть позже, далее будет приведён более полный перечень горячих клавиш.
static Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
}
Настройка правил для приложений
static const Rule rules[] = {
/* class instance title tags mask isfloating monitor */
{ "Gimp", NULL, NULL, 0, True, -1 },
{ "Firefox", NULL, NULL, 1 << 2, False, -1 },
};
~0
- приложение будет запускаться сразу на всех тегах. Это может быть удобно для какого-нибудь док-бара, трея и прочих
1 << 0
— запуск на первом теге1 << 2
— запуск на третьем теге1 << 3
— запуск на четвертом теге и так далее
isfloating
указывает на то, будут ли окна приложения плавающими
Расположение окон. Горячие клавиши
По умолчанию DWM поддерживает три режима расположения окон:
- плиточный
[]=
, - монокль
[M]
, - плавающий
><>
.
Как правило, этого достаточно.
По умолчанию при запуске dwm отображается плиточный режим окон. Чтобы поставить вместо него свой любимый режим, просто найдите нижеуказанные строки и поставьте нужный режим на первое место:
static const Layout layouts[] = {
/* symbol arrange function */
{ "><>", NULL },
{ "[]=", tile },
{ "[M]", monocle },
};
Сочетание горячих клавиш с модификацией MODKEY у нас получилось таким:
Super + M
- монокльSuper + T
- плиткаSuper + F
- плавающие окнаSuper + N
- перейти на тег, N - номер тегаSuper + p
- dmenu, если установленоSuper + Shift + q
- выход из dwmSuper + Shift + N
- перенести окно на соответствующий тегSuper + Shift + C
- закрыть окноSuper + K
- переход на неактивное окноSuper + J
- то же самое, в общем перемещение между окнамиAlt + Tab
- переход на следующий/предыдущий тег
Дополнительные плюшки и запуск
У dwm нет каких-либо специальных настроек для запуска приложений.
Всё, что запускает openbox из файла autostart
, прописывается просто в .xinitrc
Например:
nitrogen --restore
xmodmap ~/.xmodmaprc
conky | while read -r; do xsetroot -name "$REPLY"; done &
# и прочее...
Естественно, если вы пожелаете отображать информацию из conky, нужно будет сделать его покороче ;) Так, чтобы он вмещался в статус-бар dwm.
# .conkyrc
out_to_x no
out_to_console yes
background no
update_interval 100
total_run_times 0
TEXT
CPU ${cpu cpu0}% :: Mem $mem :: HDD ${fs_used} :: ${totaldown eth0} / ${totalup eth0} :: ${time %d:%m:%H:%M}
Вот, пожалуй, и всё. Пусть dwm принесёт вам немало радостных минут, позволит забыть о мыши и в целом сделает вашу работу за компьютером удобнее. Настройки wdm автора можно найти на github вместе с инструкцией по применению ;)