Awesome - это динамический оконный менеджер для X Window System (C) Wikipedia.
Долгое время я использовал в качестве оконного менеджера и графической рабочей среды на своей убунте - Gnome. В процессе использования гнома пробовал все "рюшечки и цветочки" типа Compiz, Screenlets, GDesklets и прочее, которые очень быстро надоели. Конечно, красивая система - это хорошо. Но для того ли она стоит у меня чтобы играться с интерфейсом? Со временем удалил компиз и проче, описанное выше, из системы за ненадобностью. Хотелось как-то улучшить юзабельность своей системы и уменьшить объем занимаемой оперативной памяти, да и вообще - оптимизации системы для более быстрой работы. Начал пробовать различные оконные менеджеры - BlackBox, IceWM, Openbox. В итоге остановился на Openbox. Удалил гнома. Некоторое время жил на опенбоксе, после чего заметил за собой тенденцию к расположению окон мозайкой - это был следующий шаг в моем пути к тайлинговым(или, как их еще называют, мозаечным) оконным менеджерам. Прелесть таких WM в том, что все управление производится с клавиатуры и окна распологаются "мозайкой", т.е. не перекрывают друг друга. Тайлинговых WM огромное множество: XMonad, Ion, DWM, Awesome. И это только наиболее известные. Испробовал я все из них, и больше всех мне поравился Awesome.
Конфигурация Awesome происходит путем правки одного единственного файла конфига:
~/.config/awesome/rc.lua.
Конфигурационный файл написан на скриптовом языке программирования Lua. Многие считают этот язык крайне не понятным и невменяемым, как и самого автора, который "заставляет" своих пользователей учить этот язык. На мой взгляд, этот язык очень удобне и прост в освоении. Более того, произвести базовую конфигурацию Awesome можно и без знания языка, поскольку в конфигурационном файле все описано.
Устанавливается Awesome в Ubuntu просто:
sudo apt-get install awesome
Итак, приступаем к конфигурации данного WM.
Первым делом создадим папку(если ее не существует):
mkdir -p ~/.config/awesome/
Далее надо скопировать готовый файл конфигурации(делаем это от простого пользователя, что очень важно):
cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
Итак, мы создали файл конфигурации, который будем редактировать дальше.
Стоит отметить следующие понятия в языке Lua и терминологии Awesome в целом:
- Screen -- это не объект, а реальный монитор, подключенный к Вашему компьютеру. Нумерация идет не с 0, а с 1.
- Client -- это окно приложения
- Tag -- Тэги - это что-то подобное рабочим столам, но это понятие менее жесткое. Каждый клиент имеет по крайней мере один тэг, ему соответсвующий. Каждый экран также содержит как минимум один тэг. В любой момент на экране вы можете просматривать любое количество тэгов. Отображение без тэгов скроет все клиенты. Просмотр одного и более тэгов отобразит на экране все приложения с этими тэгами.
- Widget -- объект, выводящий информацию на экран
- Titlebar -- заголовок окна - это полоса вокруг приложения, присоединенная к нему. На нее можно добавлять виджеты
- Statusbar -- строка состояния. Это полоса, закрепленная на границе экрана. На нее можно добавлять виджеты.
Открываем файл конфигурации Awesome используя свой любимый текстовый редактор:
emacs ~/.config/awesome/rc.lua
Описывать всю грамматику языка я не буду. Опишу только основные моменты по ходу дела.
Первое, что мы видим, это то, что комментарии здесь выделяются "--" в начале строки.
Далее идет объявление используемых модулей:
require("awful")
Следующим шагом явлется присвоение переменной theme_path пути к папке с установленными темами. Точно так же можно скопировать папку со стандартной темой и модифицировать ее в соответствии со своими вкусами. Не лишним будет сказать, что с Awesome идут 2 темы: dark и sky. Для выбора одной из них просто нужно откомментировать/закомментировать нужную строку.
terminal = "x-terminal-emulator" -- дефолтный терминал, который будет использоваться для открытия из меню.
editor = os.getenv("EDITOR") or "editor" -- дефолтный редактор. Назначается как дефолтный по всей системе, но можно указать и свой, не затрагивая общесистемные настрйоки.
editor_cmd = terminal .. " -e " .. editor -- параметры запуска редактора в терминале.
modkey = "Mod4" -- кнопка-модификатор. По умолчанию это Winkey. Да-да. Это та самая кнопка с флажком Windows. Ее можно изменить на удобную Вам.
layouts =
{
"tile",
"tileleft",
"tilebottom",
"tiletop",
"fairh",
"fairv",
"magnifier",
"max",
"fullscreen",
"spiral",
"dwindle",
"floating"
}
список раскладок. Их всего 12. Описывать каждую не имеет смысла. Как говорится, лучше 1 раз увидеть, чем 100 раз услышать.
floatapps =
{
["MPlayer"] = true,
["gimp"] = true,
}
список приложений, которые будут запущены в режиме float, т.е. не будут прикреплены к сетке мозайки
apptags =
{
["Firefox"] = { screen = 1, tag = 2 },
["sonata"] = { screen = 2, tag = 4 },
}
список приложений, которые будут помещены на определенные места при запуске. Так, в данном примере браузер Firefox будем помещен на 2 тэг 1 экрана. Sonata будет помещена на 4 таг 2 монитора. Все просто и понятно. Не так ли? =)
use_titlebar = false -- отказываемся от использования заголовка окна. Что это такое -- смотрите выше. Для его включения надо, естественн, установить значение в true.
Данный кусок кода создает 9 тэгов для каждого мониторов
tags = {} -- массив тэгов
for s = 1, screen.count() do -- простой цикл от 1 до количества мониторов
-- Каждый монитор имеет свои собственные тэги
tags[s] = {}
-- Создаем 9 тэгов на монитор
for tagnumber = 1, 9 do -- опять таки, цикл от 1 до 9
tags[s][tagnumber] = tag({ name = tagnumber, layout = layouts[1] }) -- создаем тэг с номеров в качестве имени и 1 вариантом расположения
-- Add tags to screen one by one
tags[s][tagnumber].screen = s -- добавляем тэг на монитор
end
-- выбираем первый тэг чтобы видеть его содержимое
tags[s][1].selected = true
end
Конечно, можно создать n своих собственных тэгов со своими именами. Для этого используем код следующего содержания:
tags[1][1] = tag({name = "one", layout = layouts[2]}) -- 1 тэг на 1 мониторе с именем one и 2 вариантом расположения клиентов.
tags[1][2] = tag({name = "two", layout = layouts[1]}) -- 2 тэг на 1 мониторе с именем two и 1 вариантом расположения клиентов.
Следующий за этим код не представляет нам никакого интереса, ибо описывает размещение элементов на верхней панели. Если кому интересно, то опишу этот момент в следующей статье.
Дошли до секции "
Mouse bindings":
awesome.buttons({
button({ }, 3, function () mymainmenu:toggle() end), -- 3 кнопка (т.е. правая кнопка) мыши вызывает меню
button({ }, 4, awful.tag.viewnext), -- 4 кнопка (т.е. прокручивание колесика вверх) переключается на следующий тэг
button({ }, 5, awful.tag.viewprev) -- 5 кнопка (т.е. прокручивание колесика вниз) переключается на предыдущий тэг
})
Секция "
Key bindings" описывается просто:
Каждая команда назначается функцией языка Lua: keybinding(<сочетание клавиш>, вызываемая_функция).
На этом пункте стоит остановиться подробнее, поскольку можно заметить 2 варианта вызова этой функции:
- keybinding({ modkey }, "m", awful.client.maximize):add()
- keybinding({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end):add()
Функция вызывается с 3 параметрами. Рассмотрим на приведенных выше примерах.
Первый параметр - это те клавиши, которые будут постоянно удерживаться в данной комбинации. В 1 примере это только лишь клавиша Mod4, а во 2 примере это Mod4+Control.
Второй параметр - это клавиша, которая будет финальной в комбинации. В первом примере это клавиша m, а во втором - k.
Третий параметр - функция, которая выполнится в случае нажатия комбинации.
Получается, что первым параметром указывается клавиша-модификатор+дополнительные клавиши(Alt, Control). Вторым параметром - клавиша комбинации - любая клавиша кроме тех, которые задействованы в первом параметре. И третьим параметром - испольняемая функция (их можно найти в справочнике по Lua).
Наверно, Вы заметили, что часы показывают время в каком-то нестандартном и непонятном для нас формате. Найдем самый последний блок в конфиге:
-- Hook called every second
awful.hooks.timer.register(1, function ()
-- For unix time_t lovers
-- mytextbox.text = " " .. os.time() .. " time_t "
-- Otherwise use:
mytextbox.text = " " .. os.date() .. " " -- вот это та строка, которую нужно раскомментировать и закомментировать другую.
--mytextbox.text = "" .. os.date(" %R ") .. .. os.date("%m-%d") .. ""
end)
-- }}}
После такого действия мы получим время в формате "
День Месяц Число чч::мм::сс Год".
Вот и весь краткий обзор настройки Awesome в Linux. Как оказалось, не такое уж это и сложное дело - чтение комментариев и манов. =) Удачи в настройке.