Как я познакомился с Xmonad
6 марта 2012
Решил попробовать Xmonad. До этого я никогда не пользовался Awesome, dwm или каким-либо другим тайловым (мозаичным, фреймовым) оконным менеджером. Зато теперь я прекрасно понимаю, чем они так цепляют людей.
Чем удобен Xmonad?
Последние несколько лет я пользовался Xfce. После перехода на Xmonad мною были отмечены следующие преимущества этого оконного менеджера:
- Место на экране используется более экономно, так как экран всегда заполнен окнами на 100% (попробуйте добиться этого в Xfce);
- … а также, потому что место не занимают таскбар и шапки окон;
- Вы экономите время, так как не занимаетесь постоянным перемещением окон;
- … присвоением им имен (в Xfce, чтобы различать терминалы, мне приходилось менять их заголовки);
- … а также, потому что большинство операций с окнами выполняются с помощью клавиатуры;
- … что особенно ценно, если вам приходится часто работать с точпадом и вы находите его плохой альтернативой мышке;
- По моим ощущениям, после установки Xmonad система стала работать чуточку быстрее, а также исчез баг с кривой прорисовкой в qBitTorrent;
- Xmonad написан на «очень декларативном», а также быстром и кроссплатформенном Haskell, что, бесспорно, облегчает разработку и поддержку этого менеджера окон;
- Xmonad может использоваться совместно со средами рабочего стола KDE, Gnome и Xfce;
- Рискну предположить, что более гибкого в настройке приложения мне еще не встречалось;
- Это единственный оконный менеджер, дающий +100 к ЧСВ (+50 за тайловость и +50 за Haskell);
Конечно, не обошлось и без минусов, а именно:
- Чтобы пользоваться Xmonad, нужно запомнить десяток сочетаний клавиш;
- Поскольку в хоткеях по умолчанию используются Alt и Shift, мне пришлось переучиться на переключение раскладки с помощью Ctr+Shift вместо Alt+Shift;
- Для редактирования конфигов желательно, хотя и совсем не обязательно, знать Haskell;
Как по мне, преимущества перевешивают недостатки.
Установка Xmonad под FreeBSD
Возьмем только что установленную FreeBSD. Тянем иксы, Xmonad, GHC (конфиги у Xmonad компилируемые), а также пару утилит, используемых Xmonad по умолчанию:
Xmonad — это всего лишь оконный менеджер, а не среда рабочего стола, потому всякие текстовые редакторы и иже с ними устанавливаются отдельно:
Также вы можете просто поставить какой-нибудь Gnome или Xfce. Далее настраиваем иксы, как обычно. Под рутом говорим:
cp xorg.conf.new xorg.conf
Дописываем в начало xorg.conf:
Option "AllowEmptyInput" "off"
EndSection
Далее:
Теперь от имени пользователя находим конфиг Xmonad по умолчанию и компилируем его:
find /usr/local/share -type f -name xmonad.hs
cp /usr/local/share/ghc-7.0.3/cabal/xmonad-0.10/man/xmonad.hs ~/.xmonad
xmonad --recompile
В файл .xinitrc пишем:
export MM_CHARSET=UTF-8
# настраиваем переключение раскладки
setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle'
# используем _нормальный_ курсор, а не крестик
xsetroot -cursor_name left_ptr
exec xmonad
Наконец, говорим:
Должны увидеть черный экран с мышкой. Поздравляю, вы установили Xmonad!
Рабочие столы и компоновки
Скорее всего, черный экран быстро вам надоест. Для управления Xmonad используются горячие клавиши. Но прежде, чем начать ими пользоваться, требуется немного разобраться в работе Xmonad.
Как и положено фреймовому оконному менеджеру, Xmonad сам решает, как разместить окна на экране, по крайней мере, пока мы не вмешаемся в его работу. Очевидно, можно придумать много разных алгоритмов размещения окон. Так вот, эти «алгоритмы размещения» правильно называются «компоновки», и Xmonad позволяет переключаться между ними.
По умолчанию доступно три вида компоновки:
- Full — текущее окно занимает весь рабочий стол, при этом остальные окна не видны;
- Tall — рабочий стол делится на две части по вертикали. Слева находятся N главных окон, справа — все остальные. Изменяя N, ширину главной части и количество окон, можно получить много разных компоновок;
- Mirror Tall — аналогично Tall, только разбиение происходит по горизонтали;
Xmonad позволяет одновременно использовать 9 рабочих столов, каждый из которых может иметь свою компоновку.
Основные сочетания клавиш
Теперь, зная мат часть, можно и покомандовать:
- Alt+Shift+Enter — запустить новый терминал;
- Alt+Число — переключиться на N’ый рабочий стол;
- Alt+Shift+Число — перенести окно на N’ый рабочий стол;
- Alt+C — закрыть текущее окно;
- Alt+Пробел — переключение между компоновками окон;
- Alt+Shift+Пробел — использовать компоновку по умолчанию;
- Alt+Enter — поменять местами текущее окно и первое (всегда главное);
- Alt+Запятая — увеличить количество главных окон;
- Alt+Точка — уменьшить количество главных окон;
- Alt+H — уменьшить размер главной части;
- Alt+L — увеличить размер главной части;
- Alt+P — dmenu (удобный запуск программ);
- Alt+Shift+P — gmrun (менее удобная альтернатива dmenu);
- Alt+Tab или Alt+J — сделать активным следующее окно;
- Alt+K — сделать активным предыдущее окно;
- Alt+Shift+J — поменять местами текущее окно и следующее;
- Alt+Shift+K — поменять местами текущее окно и предыдущее;
- Alt+ЛКМ — перемещение окна с помощью мыши;
- Alt+ПКМ — изменение размера окна с помощью мыши;
- Alt+T — вернуть плавающее окно в мозаику;
- Alt+Q — перезапустить Xmonad;
- Alt+Shift+Q — закрыть Xmonad;
Возможно, сейчас вам кажется, что это все сложновато, но поверьте, к этим сочетаниям клавиш вполне реально привыкнуть за пару часов. Особенно, если обратить внимание, что все основные клавиши расположены оптимальным для людей, владеющих десятипальцевым набором, образом.
Небольшая донастройка
Чтобы изменить терминал, используемый Xmonad, открываем ~/.xmonad/xmonad.hs и делаем следующее изменение:
myTerminal = "Terminal"
После правки конфига его нужно скомпилировать:
Примечание: На самом деле Xmonad представляет собой библиотеку на языке Haskell, а «конфиг» в действительности является исходным кодом приложения, которое использует библиотеку Xmonad. Каждый раз, «компилируя конфиг» мы создаете полноценное приложение!
Установить обои можно с помощью утилиты qiv или feh. В случае с feh:
После чего прописываем в ~/.xinitrc следующее:
Пользоваться Xmonad станет чуточку удобнее, если прикрутить к нему панельку, отображающую номер рабочего стола, текущее время и тп. В качестве таких панелек можно использовать dzen или xmobar. Последний создавался специально для Xmonad, в связи с чем я выбрал его:
В начало xmonad.hs дописываем:
И меняем функцию main следующим образом:
main = xmonad =<< xmobar defaults
Не забываем про:
Для блокировки экрана я использую утилиту xflock4. Для ее работы нужно дописать в .xinitrc:
Последний штрих — отключаем выделение границ при просмотре видео в mplayer:
Правим функцию main:
layoutHook = smartBorders $ layoutHook defaults
}
Не забываем пересобрать конфиг Xmoand!
Скриншоты
Заметка была бы неполной без пары скриншотов. Оба приведенных скриношота кликабельны.
Здесь вы видите xmobar и пять экземпляров Terminal. Используется компоновка Tall с двумя главными окнами. Ширина главной области немного уменьшена.
Gimp выглядит, как ему положено, сразу после запуска. То есть вручную я ничего не перетаскивал. Экран используется чуть более экономно, чем в случае с Xfce, за счет отсутствия у окон заголовков.
Ссылки по теме
В качестве источников дополнительной информации я бы рекомендовал следующие:
- Страница на haskell.org, посвященная Xmonad;
- Статья «Xmonad: функциональный оконный менеджер»;
- Часто задаваемые вопросы;
- Шпаргалка по горячим клавишам Xmonad;
- Подборка готовых конфигов;
- Dzen — альтернатива Xmobar;
- Заметка «Некоторые хитрости в использовании Xmonad»;
Если вы жаждите больше информации на русском языке, поищите на ЖЖ с помощью Google.
Продолжение следует?
Xmonad можно долго допиливать «под себя». Например, можно сделать трей (пока, вроде, и без него неплохо), настроить вывод информации о нагрузке системы в xmobar, дать имя каждому десктопу и тп. Но такая тонкая настройка требует экспериментов и, следовательно, времени. Думаю, в этом блоге будет по крайней мере еще один пост о Xmonad, но не сегодня.
Дополнение: В продолжение темы — Поставил оконный менеджер i3.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.