Как я познакомился с 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 по умолчанию:

pkg_add -r xorg hs-xmonad ghc gmrun dmenu

Xmonad — это всего лишь оконный менеджер, а не среда рабочего стола, потому всякие текстовые редакторы и иже с ними устанавливаются отдельно:

pkg_add -r mc Terminal mousepad gpicview opera

Также вы можете просто поставить какой-нибудь Gnome или Xfce. Далее настраиваем иксы, как обычно. Под рутом говорим:

X -configure
cp xorg.conf.new xorg.conf

Дописываем в начало xorg.conf:

Section "ServerFlags"
        Option "AllowEmptyInput" "off"
EndSection

Далее:

cp xorg.conf /etc/X11/xorg.conf

Теперь от имени пользователя находим конфиг Xmonad по умолчанию и компилируем его:

mkdir ~/.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 LANG=ru_RU.UTF-8
export MM_CHARSET=UTF-8

# настраиваем переключение раскладки
setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle'

# используем _нормальный_ курсор, а не крестик
xsetroot -cursor_name left_ptr

exec xmonad

Наконец, говорим:

startx

Должны увидеть черный экран с мышкой. Поздравляю, вы установили 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 = "xterm"
myTerminal = "Terminal"

После правки конфига его нужно скомпилировать:

xmonad --recompile

Примечание: На самом деле Xmonad представляет собой библиотеку на языке Haskell, а «конфиг» в действительности является исходным кодом приложения, которое использует библиотеку Xmonad. Каждый раз, «компилируя конфиг» мы создаете полноценное приложение!

Установить обои можно с помощью утилиты qiv или feh. В случае с feh:

feh --bg-fill wallpaper.jpg

После чего прописываем в ~/.xinitrc следующее:

eval $(cat ~/.fehbg)

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

pkg_add -r hs-xmobar hs-xmonad-contrib

В начало xmonad.hs дописываем:

import XMonad.Hooks.DynamicLog

И меняем функцию main следующим образом:

-- main = xmonad defaults
main = xmonad =<< xmobar defaults

Не забываем про:

xmonad --recompile

Для блокировки экрана я использую утилиту xflock4. Для ее работы нужно дописать в .xinitrc:

xscreensaver &

Последний штрих — отключаем выделение границ при просмотре видео в mplayer:

import XMonad.Layout.NoBorders

Правим функцию main:

main = xmonad =<< xmobar defaults {
    layoutHook = smartBorders $ layoutHook defaults
  }

Не забываем пересобрать конфиг Xmoand!

Скриншоты

Заметка была бы неполной без пары скриншотов. Оба приведенных скриношота кликабельны.

Xmonad и пять экземпляров Terminal

Здесь вы видите xmobar и пять экземпляров Terminal. Используется компоновка Tall с двумя главными окнами. Ширина главной области немного уменьшена.

Xmonad и Gimp

Gimp выглядит, как ему положено, сразу после запуска. То есть вручную я ничего не перетаскивал. Экран используется чуть более экономно, чем в случае с Xfce, за счет отсутствия у окон заголовков.

Ссылки по теме

В качестве источников дополнительной информации я бы рекомендовал следующие:

Если вы жаждите больше информации на русском языке, поищите на ЖЖ с помощью Google.

Продолжение следует?

Xmonad можно долго допиливать «под себя». Например, можно сделать трей (пока, вроде, и без него неплохо), настроить вывод информации о нагрузке системы в xmobar, дать имя каждому десктопу и тп. Но такая тонкая настройка требует экспериментов и, следовательно, времени. Думаю, в этом блоге будет по крайней мере еще один пост о Xmonad, но не сегодня.

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

Дополнение: В продолжение темы — Поставил оконный менеджер i3.

Метки: , , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.