Blog the XELFAER

Заметки *NIX

Установка и настройка awesome wm —

Оконных менеджеров сейчас достаточно большое разнообразие. Решил попробовать оконный менеджер awesome. Основные поставленные задачи — это удобство и минималистичность. Так как для установки был выбран netbook и экран на нем небольшой необходимо хорошо продумать, где что разместить для более удобного просмотра информации.
Установка будет производиться на чисто установленный дистрибутив без DE в данном случае это Debian 7 Wheezy. Производя установку и настройку столкнулся с некоторыми проблемами и нюансами, которые опишу в данной статье.

Дистрибутив уже установлен, поэтому приступим к установке и непосредственно настройке WM.

# aptitude install awesome awesome-extra

Далее необходимо поставить дисплейный менеджер. Их выбор немал, но я остановился все таки на LightDM.

# aptitude install lightdm

Файл настроек менеджера расположен стандартно:

/etc/lightdm/lightdm.conf

После логина в систему попадаем на стандартный вид awesome wm, который с настройками по дефолту выглядит весьма печально:

Стандартный вид awesome c темой оформления default

Стандартный вид awesome c темой оформления default

Начнем его пилить по своему вкусу.
Для начала необходимо скопировать все необходимые файлы для работы в домашний каталог, предварительно создав каталог для файлов awesome:

mkdir .config/awesome

переходим в созданный каталог и копируем стандартный файл конфигурации awesome:

cp /etc/xdg/awesome/rc.lua rc.lua

Далее копируем каталог с темами:

cp -R /usr/share/awesome/themes themes

и библиотеки виджетов:

cp -R /usr/share/awesome/lib/awful awful
cp -R /usr/share/awesome/lib/vicious vicious

Все изменения мы будем проводить с файлами скопированными в домашний каталог. Если будет допущена ошибка в конфигурационном файле — awesome будет использовать стандартный свой файл конфигурации полностью или частично в зависимости от ситуации.
Файл конфигурации написан на языке Lua.

Для проверки корректности синтаксиса в файле конфигурации можно воспользоваться командой:
awesome -k ~/.config/awesome/rc.lua

Открываем для редактирования файл rc.lua и начинаем вносить наши изменения:

vim .config/awesome/rc.lua

Пропишем сразу использование библиотеки для виджетов:

require("vicious")

Изменим путь к файлу конфигурации используемой темы:

-- Themes define colours, icons, and wallpapers
beautiful.init("/home/user/.config/awesome/themes/default/theme.lua")

Изменим используемые приложения:

terminal = "x-terminal-emulator"
browser = "firefox"
editor = os.getenv("vim") or "vim"
editor_cmd = terminal .. " -e " .. editor

Пропишем автозапуск приложений, которые будут стартовать при запуске/перезапуске awesome. Можно просто прописать(к примеру для запуска network manager applet):

os.execute nm-applet &

но при перезапуске awesome — будет появляться копия nm-applet. Для избежания этого мы сделаем иначе: сперва будет проверяться запущено ли приложение, и если да — то оно его не будет запускать повторно:

-- Autostarting programm
os.execute("pgrep -u $USER -x nm-applet || (nm-applet &)")
os.execute("pgrep -u $USER -x kbdd || (kbdd &)")
os.execute("pgrep -u $USER -x xscreensaver || (xscreensaver -nosplash &)")

Далее изменим теги. По умолчанию их девять и они имеют цифровое обозначение. Тут дело выбора можно оставить как есть, но мне это не понравилось и более удобно сделать сокращения для них, да и поменьше количество, сгруппировав теги:

-- {{{ Tags
-- Define a tag table which hold all screen tags.
tags = {
names = { "main", "www", "im", "media", "other" },
layout = { layouts[2], layouts[1], layouts[2], layouts[2], layouts[2] }
}
for s = 1, screen.count() do
-- Each screen has its own tag table.
tags[s] = awful.tag(tags.names, s, tags.layout)
end
-- }}}

Теперь можно заняться виджетами. В сети их достаточно много, и можно выбрать тот который придется по вкусу, подпилив то что не понравиться.
Так как интерфейс и функционал затачивается под netbook, необходим определенный набор виджетов.
Виджет для разделения отображаемой информации:

Separator Widget
separator = widget({type = "textbox"})
separator.text = "::"

Виджет для отображения загрузки процессора:

cpuicon = widget ({type = "imagebox" })
cpuicon.image = image(beautiful.widget_cpu)
cpuwidget = widget({type = "textbox"})
vicious.register(cpuwidget, vicious.widgets.cpu, "Cpu: $2%|$3%")

где: $2 и $3 — загрузка каждого ядра процессора. Если необходима общая загрузка — тогда необходимо использовать параметр $1.
Виджет отображения температуры процессора:

therm_cpuicon = widget ({type = "imagebox" })
therm_cpuicon.image = image(beautiful.widget_therm_cpu)
cputhermalwidget = widget({type = "textbox"})
vicious.register(cputhermalwidget, vicious.widgets.thermal, "CPU: $1 °C", 20, {"coretemp.0", "core"})

Виджет отображения температуры жесткого диска:

therm_hddicon = widget ({type = "imagebox" })
therm_hddicon.image = image(beautiful.widget_therm_hdd)
hddtempwidget = widget({ type = "textbox" })
vicious.register(hddtempwidget, vicious.widgets.hddtemp, "HDD: ${/dev/sda} °C", 19)

Для этого виджета необходима утилита hddtemp. Температура считывается путем посылки запроса на TCP-сервис висящий по умолчанию на 7634 порту. Данный вариант наиболее безопасен так как не требует запуска утилиты с правами root.
Виджет отображения загрузки ОЗУ:

memicon = widget ({type = "imagebox" })
memicon.image = image(beautiful.widget_mem)
memwidget = widget({type = "textbox"})
vicious.register(memwidget, vicious.widgets.mem, "Ram: $2Mb", 13)

Виджет отображения статуса аккумулятора:

baticon = widget ({type = "imagebox" })
baticon.image = image(beautiful.widget_bat)
batwidget = widget({type = "textbox"})
function battery_status_text(widget, args)
local batstat = args[2]
if batstat < 15 then
return 'Bat: ' .. '<span>' .. batstat .. '%'
elseif batstat &lt; 50 then
return 'Bat: ' .. '<span>' .. batstat .. '%'
end
return 'Bat: ' .. '<span>' .. batstat .. '%</span>'
end
vicious.register(batwidget, vicious.widgets.bat, battery_status_text, 120, "BAT1")

В зависимости от уровня заряда — меняется цвет отображения шрифта. Также необходимо изменить идентификатор аккумулятора на свой.
Виджет отображения звука:

volicon = widget ({type = "imagebox" })
volicon.image = image(beautiful.widget_vol)
volumewidget = widget({ type = "textbox" })
vicious.register(volumewidget, vicious.widgets.volume,
function(widget, args)
local label = { ["♫"] = "O", ["♩"] = "M" }
return " " .. args[1] .. "% State: " .. label[args[2]]
end, 2, "PCM")

Если необходимо изменить канал который будет регулироваться — то нужно вместо «PCM» указать требуемый канал, глянуть который можно в alsamixer.
Виджет раскладки клавиатуры:

kbdwidget = widget({type = "textbox", name = "kbdwidget"})
kbdwidget.border_color = beautiful.fg_normal
kbdwidget.text = "En"
dbus.request_name("session", "ru.gentoo.kbdd")
dbus.add_match("session", "interface='ru.gentoo.kbdd',member='layoutChanged'")
dbus.add_signal("ru.gentoo.kbdd", function(...)
local data = {...}
local layout = data[2]
lts = {[0] = "En", [1] = "Ru"}
kbdwidget.text = " "..lts[layout].." "
end
)

Для этого виджета требуется программа kbdd.
Виджет часов:
Так как по умолчанию виджет часов на английском — его необходимо локализировать. Для этого отредактируем файл конфигурации виджета:

vim .config/awesome/awful/widget/textclock.lua

в нем ищем строку os.setlocale и меняем ее содержимое на:

os.setlocale("ru_RU.utf8")

Для придания более законченного вида, красоты и удобства можно добавить отображения календаря, который будет отображаться при наведении указателя мыши на виджет часов(исходный код виджета и измененный который мне более понравился).
Выбираем что больше понравиться. Содержимое сохраняем в файл к примеру с именем «calendar2.lua». Этот файл необходимо скопировать в каталог awesome(~/.config/awesome/) и для подключения его нужно:
добавить в начало конфига rc.lua:

require("calendar2")

и добавить после строки инициализации виджета часов:

calendar2.addCalendarToWidget(mytextclock, "<span>%s</span>")

В начале описания виджета можно увидеть две строки с похожим содержимым:

memicon = widget ({type = "imagebox" })
memicon.image = image(beautiful.widget_mem)

эти строки необходимы для отображения иконок виджета. Содержимое меняется для каждого виджета отдельно. Но просто добавить текст к каждому виджету недостаточно, нужны еще и сами иконки.
Я использовал найденные в сети иконки и немного некоторые отредактировал по своему вкусу. Размер иконок взят 24×24.
Когда иконки подготовлены необходимо их поместить в каталог c темой:

~/.config/awesome/themes/default/icons

Расположение каталога можно выбрать и другое, но мне не нравиться когда с файлами беспорядок.
После этих манипуляций необходимо в файле конфигурации темы прописать эти иконки:

vim .config/awesome/themes/default/theme.lua

строка описания имеет вид:

theme.widget_cpu = "/home/user/.config/awesome/themes/default/icons/cpu.png"

каждый файл иконок необходимо прописать по аналогии. Но и это еще не все: что бы они появились на панели — необходимо их добавить в раздел wibox второй панели(или первой если решено было использовать только одну панель) и по аналогии добавить для остальных:

volumewidget,
volicon,

Для удобной работы и просмотра статуса виджетов решено было использовать дополнительную панель. На одной панели останутся стандартные виджеты: часы с календарем, раскладка клавиатуры, меню awesome, теги и запускаемые приложения, а на втором все остальные виджеты.
В файле конфигурации rc.lua ищем раздел стандартного wibox и после него добавляем новый:

statwibox = {}
for s = 1, screen.count() do
-- Create the Wibox
statwibox[s] = awful.wibox({ position = "bottom", screen = s })
-- Add widgets to the wibox - order matters
statwibox[s].widgets = {
{
cpuicon,
cpuwidget,
separator,
memicon,
memwidget,
separator,
therm_cpuicon,
cputhermalwidget,
separator,
therm_hddicon,
hddtempwidget,
layout = awful.widget.layout.horizontal.leftright
},
volumewidget,
volicon,
separator,
batwidget,
baticon,
layout = awful.widget.layout.horizontal.rightleft
}
end

Теперь настроим горячие клавиши. Ищем в файле конфига раздел Key bindings, где и добавляем те комбинации которые нам нужны. В моем случае добавлены сочетания для блокирования экрана, вызова файлового менеджера регулирования громкости:

awful.key({ modkey, }, "F12", function () awful.util.spawn('xscreensaver-command -lock') end),
awful.key({ modkey, }, "e", function () awful.util.spawn("rox-filer") end),
-- Volume key
awful.key({}, "#122", function () awful.util.spawn("amixer set PCM 5%-") end),
awful.key({}, "#123", function () awful.util.spawn("amixer set PCM 5%+") end),

Для того чтобы узнать сканкоды клавиш можно воспользоваться программой xbindkeys:

xbindkeys -mk

нажимаем комбинацию клавиш и получаем результат.

Так как теги я для удобства я выделил по категориям, то будет удобно привязать запуск определенных программ в свое теге. Ищем раздел Rules и добавляем наши правила:

{ rule = { class = "Firefox" },
properties = { tag = tags[1][2] } },

запускаемая программа Firefox будет отображаться на втором теге с именем «www». По аналогии добавляем свои приложения по желанию.

Для включения плавающего режима для определенного приложения необходимо добавить на каждое приложение запись вида:

{ rule = { instance = "Pidgin" }, properties = { floating = true } },

указав необходимое имя приложения.
Для того чтобы узнать как правильно записать имя приложения для правил необходимо воспользоваться программой xprop:

xprop |grep "CLASS"

далее необходимо щелкнуть по окну требуемой программы и нам будет выведено имя приложения вида:

WM_CLASS(STRING) = "nm-applet", "Nm-applet"

нам необходим второй параметр «Nm-applet».

Теперь перейдем к настройке меню awesome. Для редактирования главного меню ищем в конфиге строку «mymainmenu» и начинаем править под свои потребности. Мне удобно чтобы были видны те приложения которые чаще всего используются:

mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
{ "Debian", debian.menu.Debian_menu.Debian },
{ "open terminal", terminal },
{ "Firefox", "firefox" },
{ "Pidgin", "pidgin" },
{ "XChat", "xchat" },
{ "Skype", "skype" },
{ "Audacious", "audacious" }
}
})

Синтаксис в принципе прост: с лева указываются названия отображаемые в списке, а с права — команда для запуска.

Так как у нас по сути чистая WM, необходимо поставить программы. Выбора много и я остановился на следующих:

MC - консольный файловый менеджер
ROX-Filer - файловый менеджер
Mirage - программа просмотра изображений
Evince - программа просмотра документов(pdf, djvu и др.)
LeafPad - текстовый редактор GTK+
Xarchiver - интерфейс к различным архиваторам командной строки
Firefox - Веб-браузер
Lynx - консольный текстовый браузер
Pidgin - модульный клиент мгновенного обмена сообщениями
XChat - клиент IRC
Scrot - утилита командной строки для захвата изображения экрана
XScreenSaver - модульная экранная заставка и блокировщик экрана для X11
LilyTerm - эмулятор терминала.
Итоговый скриншот настройки awesome wm

Итоговый скриншот настройки awesome wm

На этом по сути настройка awesome закончена, Что то может понравится в созданной настройке, а что то нет — можно экспериментировать и затачивать то или иное как будет удобно.

Скачать архив конфигурации: awesome

© 2013 — 2015, XELFAER. Все права защищены.

Print Friendly, PDF & Email

Рубрики: Linux | Soft



Добавить комментарий