Это старая версия документа.
Содержание
Awesome – гибкоконфигурирумый динамический тайлинговый оконный менеджер. Очень легкий и расширяемый за счет использования языка программирования Lua. Awesome нацелен на опытных пользователей, разработчиков и людей, желающих использовать гибкий инструмент в повседневной работе.
Распространено мнение, что тайлинговые оконные менеджеры- для больших экранов, хочется заметить, что это не так, тайлинговый оконный менеджер отлично себя чувствует на нетбуке, где, чаще всего, работать приходится без мыши, а в работе с клавиатуры тайлинговым менеджерам нет равных. Естественно ни о каком толковом тайлинге окон на нэтбуке нельзя говорить, на всех тэгах установлена максимизация окна приложения.
Установка
Перед установкой настоятельно рекомендуется ознакомиться с языком программирования Lua, так как весь процесс настройки будет происходить с использованием этого языка.
sudo apt-get install awesome awesome-extra
После этого при логине в меню выбора сессии можно указать Awesome и начать знакомство с этим удивительным оконным менеджером (на рисунке ниже видно, что данный оконный менеджер полностью оправдывает свое название). Как и во всех тайлинговых оконных менеджерах окна (клиенты) занимают все свободное пространство рабочего стола.
mod4- по умолчанию клавиша Windows
Команда | Сочетание |
---|---|
Вызов терминала | mod4+Enter |
Вызов меню | mod4+w |
Запуск приложения | mod4+r |
Перезапуск Awesome | mod4+Control+r |
Выход Awesome | mod4+Shift+q |
Больше см. man awesome
По умолчанию Awesome использует стандартные файлы конфигурации, поэтому для применения изменений после установки необходимо скопировать стандартный файл конфигурации, в папку ~/.config/awesome. В последствии, если Вы нарушите работоспособность своего конфигурационного файла, оконный менеджер запустится с настройками по умолчанию.
cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
Настройка
awesome -k ~/.config/awesome/rc.lua
Но данная команда проверяет только синтаксис, поэтому, при не правильной адресации и многих других ошибках она не поможет.
Если вы не сильны в Lua и не очень хотите его подробно изучать, то в любом месте конфигурационного файла можно указать выполнение собственного скрипта, написанного на вашем любимом языке. Например так:
-- Create a textclock widget mytextclock = awful.widget.textclock({ align = "right" }) mytextclock:buttons(awful.util.table.join( awful.button({ }, 1, function () awful.util.spawn_with_shell("/home/pupizoid/bin/dairy.sh") end) ))
Данный код будет при нажатии на виджет часов на панели awesome вызывать скрипт dairy.sh.
Раскладка клавиатуры
При загрузке в голый AwesomeWM (без сессии GNOME) перестает работать переключение раскладки клавиатуры1)) Для настройки необходимо добавить в автозапуск команду
setxkbmap -layout 'us,ru' -variant ',winkeys,winkeys' -option grp:caps_toggle -option grp_led:caps -option terminate:ctrl_alt_bksp
Ниже описан способ добавления комады в автозагрузку awesome и способ отображения раскладки на панели
Тэги
Отличительная особенность Awesome (и большинства тайлинговых оконных менеджеров)- система тэгов, вместо привычных виртуальных рабочих столов. Система тэгов более гибка и конфигуриуема. Например можно назначит несколько тэгов для одного приложения (клиента) или настроить отображение приложений с несколькими тэгами одновременно.
mod4- по умолчанию клавиша Windows
Команда | Сочетание |
---|---|
Переключиться на следующий тэг | mod4+Right |
Переключиться на предыдущий тэг | mod4+left |
Переключиться на тэг по номеру (1-9) | mod4+(1-9) |
Включить/выключить отображение тэга по номеру (1-9) | mod4+Control+(1-9) |
Пометить приложение тэгом по номеру (1-9) | mod4+Shift+(1-9) |
Пометить/снять пометку приложения тэгом по номеру (1-9) | mod4+Shift+Control+(1-9) |
Больше см. man awesome
Настройка тэгов и схем (layouts).
Тэги и схемы расположения клиентов- основное с чем придется работать повседневно при использовании оконного менеджера Awesome, поэтому целесообразно уделить повышенное внимание их настройке.
Кусок кода rc.lua, отвечающий за работу схем расположения клинетов:
layouts = { awful.layout.suit.floating, awful.layout.suit.tile, awful.layout.suit.tile.left, awful.layout.suit.tile.bottom, awful.layout.suit.tile.top, awful.layout.suit.fair, awful.layout.suit.fair.horizontal, awful.layout.suit.spiral, awful.layout.suit.spiral.dwindle, awful.layout.suit.max, awful.layout.suit.max.fullscreen, awful.layout.suit.magnifier }
Здесь наглядно показана работа основного инструмента языка Lua- таблица. Создается таблица с именем layouts и в ячейки [1]-[9] записываются различные значения схем.
Настройка схем расположения клиентов сводится к исключению (комментированию) не используемых.
layouts
, это необходимо учитывать и при редактировании следить за назначением схемы для тэгов.
Кусок кода rc.lua, отвечающий за формирование списка тэгов и отображение их на экране:
-- {{{ Tags -- Define a tag table which hold all screen tags. tags = {} for s = 1, screen.count() do -- Each screen has its own tag table. tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1]) end -- }}}
Данный код формирует для каждого экрана (s) 9 тэгов с именами от 1 до 9 и выставляет для всех схему, записанную в первой ячейке таблицы layout
(по умолчанию float).
Настройка тэгов, как правило, заключается в:
- Изменении имен тэгов;
- Указание для тэгов определенных схем тайлинга;
- Настройка выбранной схемы для определенного тэга.
Как правило при настройке тэгов в именах вместо цифр используют графические символы или буквы греческого алфавита. Нецелесообразно в имени тэга использовать слова (www, office, и т.д.), потому что они будут расходовать ценное место на панели, которое можно занять полезными виджетами, а назначение тэгов в процессе использования закрепятся в памяти сами собой.
Для настройки тэгов, введем дополнительную таблицу с именем tags
, в которой будут две ячейки, представляющие собой так же таблицы, это names
и layout
, в которые, в свою очередь, уже будут записываться значения для каждого тэга.
-- {{{ Tags -- Define a tag table which hold all screen tags. tags = { names = {"⠐", "⠡", "⠪", "⠵", "⠻", "⠿",}, layout = {layouts[2], layouts[2], layouts[4], layouts[2], layouts[4], 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 -- }}}
Так же вместо символов в именах тэгов можно использовать любые иконки, для этого код будет выглядеть следующим образом:
-- {{{ Tags -- Define a tag table which hold all screen tags. tags = { names = {"","","","","",""}, layout = {layouts[2], layouts[2], layouts[4], layouts[2], layouts[4], layouts[2]} } for s = 1, screen.count() do -- Each screen has its own tag table. tags[s] = awful.tag(tags.names, s, tags.layout) awful.tag.seticon(beautiful.homeicon, tags[s][1]) awful.tag.seticon(beautiful.wwwicon, tags[s][2]) awful.tag.seticon(beautiful.officeicon, tags[s][3]) awful.tag.seticon(beautiful.chaticon, tags[s][4]) awful.tag.seticon(beautiful.wineicon, tags[s][5]) awful.tag.seticon(beautiful.mediaicon, tags[s][6]) end -- }}}
в строке awful.tag.seticon(beautiful.homeicon, tags[s][1])
происходит обращение к файлу иконки в формате beautiful.homeicon
, это возможно при указании пути к иконке в файле темы awesome theme.lua
для редактирования необходимо скопировать его в домашний каталог из стандартной папки:
mkdir ~/.config/awesome/themes cp /usr/share/awesome/themes/default/* ~/.config/awesome/themes
И создать в нем иконку с именем homeicon
, указав путь к файлу изображения:
--MyIcons theme.mediaicon = "/usr/share/icons/Faenza-Dark/status/16/rhythmbox-panel.png" theme.chaticon = "/usr/share/icons/Faenza-Dark/status/16/user-available-panel.png" theme.homeicon = "/usr/share/icons/Faenza-Darkest/actions/16/go-home.png" theme.wineicon = "/usr/share/icons/Faenza-Darkest/actions/16/window-new.png" theme.officeicon = "/usr/share/icons/Faenza-Darkest/actions/16/gtk-edit.png" theme.wwwicon = "/usr/share/icons/Faenza-Darker/actions/16/find.png" --EndMyIcons
Одновременно с изменением имени в примерах, приведенных выше, для каждого тэга указывается схема расположения клиентов, в ячейка layout
таблицы tags
. В квадратных скобках указывается номер ячейки таблицы layouts
.
Для настройки схемы расположения клиентов внутри определенного тэга кусок кода Tags
должен выглядить следующим образом:
-- {{{ Tags -- Define a tag table which hold all screen tags. tags = { names = {"⠐", "⠡", "⠪", "⠵", "⠻", "⠿",}, layout = {layouts[2], layouts[2], layouts[4], layouts[2], layouts[4], layouts[2]} } for s = 1, screen.count() do -- Each screen has its own tag table. tags[s] = awful.tag(tags.names, s, tags.layout) awful.tag.setncol(2, tags[s][4]) awful.tag.setproperty(tags[s][4], "mwfact", 0.20) end -- }}}
Здесь нас интересуют строки с функциями awful.tag.setncol
и awful.tag.setproperty
, первая функция устанавливает число колонок стэк-зоны в значение 2 для четвертого тэга, вторая функция устанавливает значение ширины мастер-зоны -20% от ширины экрана.
tile
и означает:- мастер-зона- область схемы
tile
куда по умолчанию открываются новые клиенты; - стек-зона- область схемы
tile
куда сдвигаются уже открытые клиенты при запуске нового.
Полный перечень доступных функций приведен в официальном описании API(eng).
Использование виджетов
Ещё одна особенность Awesome- гибкоконфигурируемые виджеты, позволяющие отказаться от использования conky
.
Blingbling
Замечательные виджеты blingbling. Основное отличие- ориентированность на графику.
Установка
Для корректной работы blingbling необходимы пакеты liblua5.1-oocairo-1.4-1.2 и liblua5.1-oocairo-dev 1.4-1.2
Установка blingbling из git:
cd ~/.config/awesome git clone git://github.com/cedlemo/blingbling.git
Использование
В начало файла rc.lua необходимо добавить
require("blingbling")
Описание конфигурации виджетов приведено в файле
~/.config/awesome/blingbling/README
Погода
Виджет найден здесь в крайне заброшенном состоянии и реабилитирован. Данный виджет работает от Яндекс.Погода, снабжен набором иконок.
Установка
Необходимо скачать архив и распаковать его содержимое в папку ~/.config/awesome/, так что бы получилось следующее дерево каталогов:
├── awesome ├── awful ├── debian ├── rc.lua ├── README ├── themes ├── vicious ├── weather_icons └── weather.lua
В начале вашего rc.lua необходимо добавить строку:
require("weather")
После этого необходимо создать text или image- виджет:
weatherwidget = widget({ type = "textbox" }) weather.addWeather(weatherwidget, "moscow", 3600)
где:
moscow- получаем перейдя по ссылке Яндекс.Погода и выбрав на странице свой город, искомое значение параметра будет в адресной строке:
http://pogoda.yandex.ru/<параметр_для_вставки>/?ncrnd=1423
(по умолчанию данный параметр- moscow);
3600-время обновления в секундах (по умолчанию- 907)
- Поместить виджет в любое удобное место wibox.
Использование
При наведении на виджет на панели будет отображаться всплывающее уведомление awesome с иконкой и основной информацией. Можно установить сколько угодно виджетов на панель, но нельзя установить несколько городов в один виджет. На скриншоте на панель добавлено два виджета одновременно: один- imagebox, второй- textbox.
Часы
По умолчанию в awesome на панель добавлены часы (mytextclock). При наведении красоты вам захочется изменить формат отображения и добавить в них календарь.
Формат вывода
В вашем файле rc.lua редактируем строку инициализации виджета textclock, дописывая параметры:
mytextclock = awful.widget.textclock({ align = "right" }, "%a %d %b, %H:%M")
здесь:
- %a– день недели;
- %d– дата;
- %b– месяц;
- %H– часы;
- %M– минуты.
полный перечень параметров можно посмотреть в man date
mytextclock = awful.widget.textclock({ align = "right" }, "%a %d %b, %H:%M", 1)
Локализация
Добавив к часам дату и день недели, вы обнаружите их не локализованными. Это нормально, потому что локализация системы и локализация в языке Lua- разные вещи. Конфигурационный файл виджета textclock хранится по пути
/usr/share/awesome/lib/awful/widget/textclock.lua
Хорошим тоном является копирование дефолтных конфигурационных файлов в домашнюю папку, что бы в случае возникновения проблем система могла работать на дефолтной конфигурации, поэтому копируем:
mkdir -p ~/.config/awesome/awful/widget cp /usr/share/awesome/lib/awful/widget/textclock.lua ~/.config/awesome/awful/widget/textclock.lua
Для корректного отображения необходимо в файл
~/.config/awesome/awful/widget/textclock.lua
перед командой запроса даты добавить команду установки локализаци. Файл textclock.lua примет вид:
- textclock.lua
--------------------------------------------------------------------------- -- @author Julien Danjou <julien@danjou.info> -- @copyright 2009 Julien Danjou -- @release v3.4.11 --------------------------------------------------------------------------- local setmetatable = setmetatable local os = os local capi = { widget = widget, timer = timer } --- Text clock widget. module("awful.widget.textclock") --- Create a textclock widget. It draws the time it is in a textbox. -- @param args Standard arguments for textbox widget. -- @param format The time format. Default is " %a %b %d, %H:%M ". -- @param timeout How often update the time. Default is 60. -- @return A textbox widget. function new(args, format, timeout) local args = args or {} local format = format or "%a %d %b %H:%M" local timeout = timeout or 60 args.type = "textbox" local w = capi.widget(args) local timer = capi.timer { timeout = timeout } os.setlocale("ru_RU.utf8") w.text = os.date(format) timer:add_signal("timeout", function() w.text = os.date(format) end) timer:start() return w end setmetatable(_M, { __call = function(_, ...) return new(...) end })
Календарь
Для того, что бы при наведении указателя мыши на часы появлялся простой календарик необходимо подключить дополнительный модуль calendar2, код взят из вики awesome и немного исправлен2)
- calendar2.lua
-- original code made by Bzed and published on http://awesome.naquadah.org/wiki/Calendar_widget -- modified by Marc Dequènes (Duck) <Duck@DuckCorp.org> (2009-12-29), under the same licence, -- and with the following changes: -- + transformed to module -- + the current day formating is customizable local string = string --local print = print local tostring = tostring local os = os local capi = { mouse = mouse, screen = screen } local awful = require("awful") local naughty = require("naughty") module("calendar2") local calendar = {} local current_day_format = "<u>%s</u>" function displayMonth(month,year,weekStart) local t,wkSt=os.time{year=year, month=month+1, day=0},weekStart or 1 local d=os.date("*t",t) local mthDays,stDay=d.day,(d.wday-d.day-wkSt+1)%7 --print(mthDays .."\n" .. stDay) local lines = " " --интервал перед днями неделями os.setlocale("ru_RU.utf8") for x=0,6 do lines = lines .. os.date("%a ",os.time{year=2006,month=1,day=x+wkSt}) end lines = lines .. "\n"-- .. os.date(" %V",os.time{year=year,month=month,day=1}) --Убираем номер недели local writeLine = 1 while writeLine < (stDay + 1) do lines = lines .. " " --интервал перед первым числом, если оно не в начале недели writeLine = writeLine + 1 end for d=1,mthDays do local x = d local t = os.time{year=year,month=month,day=d} if writeLine == 8 then writeLine = 1 lines = lines .. "\n"-- .. os.date(" %V",t) --убираем номер недели end if os.date("%Y-%m-%d") == os.date("%Y-%m-%d", t) then x = string.format(current_day_format, d) end if (#(tostring(d)) == 1) then x = " " .. x --выравнивание между одно и двухзначными цифрами end lines = lines .. " " .. x --интервал между числами writeLine = writeLine + 1 end local header = os.date("%B %Y\n",os.time{year=year,month=month,day=1}) header = " " .. header --выравниваем месяц и год по центру return header .. "\n" .. lines end function switchNaughtyMonth(switchMonths) if (#calendar < 3) then return end local swMonths = switchMonths or 1 calendar[1] = calendar[1] + swMonths calendar[3].box.widgets[2].text = string.format('<span font_desc="%s">%s</span>', "monospace", displayMonth(calendar[1], calendar[2], 2)) end function switchNaughtyGoToToday() if (#calendar < 3) then return end local swMonths = switchMonths or 1 calendar[1] = os.date("*t").month calendar[2] = os.date("*t").year switchNaughtyMonth(0) end function addCalendarToWidget(mywidget, custom_current_day_format) if custom_current_day_format then current_day_format = custom_current_day_format end mywidget:add_signal('mouse::enter', function () local month, year = os.date('%m'), os.date('%Y') calendar = { month, year, naughty.notify({ text = string.format('<span font_desc="%s">%s</span>', "monospace", displayMonth(month, year, 2)), timeout = 0, hover_timeout = 0.5, screen = capi.mouse.screen }) } end) mywidget:add_signal('mouse::leave', function () naughty.destroy(calendar[3]) end) mywidget:buttons(awful.util.table.join( awful.button({ }, 1, function() switchNaughtyMonth(-1) end), awful.button({ }, 2, switchNaughtyGoToToday), awful.button({ }, 3, function() switchNaughtyMonth(1) end), awful.button({ }, 4, function() switchNaughtyMonth(-1) end), awful.button({ }, 5, function() switchNaughtyMonth(1) end), awful.button({ 'Shift' }, 1, function() switchNaughtyMonth(-12) end), awful.button({ 'Shift' }, 3, function() switchNaughtyMonth(12) end), awful.button({ 'Shift' }, 4, function() switchNaughtyMonth(-12) end), awful.button({ 'Shift' }, 5, function() switchNaughtyMonth(12) end) )) end
Для установки необходимо:
сохранить приведенный выше файл в папку ~/.config/awesome/
добавить вверху файла rc.lua строку
require("calendar2")
добавить после строки инициализации виджета часов строку вида
calendar2.addCalendarToWidget(mytextclock, "<span color='green'>%s</span>")
Выглядит это следующим образом: нажатием левой или правой кнопкой мыши (или кручением колесика) переключаются месяцы, нажатием средней кнопки мыши- устанавливается текущий месяц.
Меню
Настройка внешнего вида
Темы
Вид GTK приложений
lxappearance
Для того, что бы настраивать темы GTK, темы иконок и т.д. можно воспользоваться легким редактором внешнего вида из проекта LXDE lxappearance
sudo apt-get install lxappearance
gnome-settings-daemon
Оптимальным решением будет добавление в автозагрузку awesome службы gnome-settings-daemon, данная служба будет применять все настройки gnome-control-center включая управление питанием, назначением горячих клавиш, переключением раскладки и т.д. Единственный минус его использования- в трее появляется значок клавиатуры, но его можно легко убрать.
Вид Qt приложений
Работа с сессиями пользователей
Использование с рабочим окружением (Desktop Environment)
Так как Awesome является всего лишь оконным менеджером, то после запуска сессии Awesome не будет запущено никаких служб и сервисов, что с одной стороны хорошо, с точки зрения быстродействия и легкости, а с другой стороны- не очень, с точки зрения удобства использования. В данном разделе будет рассмотрена возможность запуска сессии основных рабочих окружений с Awesome в качестве оконного менеджера.
GNOME
Запуск
Устанавливаем панель GNOME
sudo apt-get install gnome-panel
Создаем файл сессии Gnome+AwesomeWM
/usr/share/xsessions/gnome-awesome.desktop
[Desktop Entry] Name=Gnome with Awesome Comment=Gnome with Awesome as window manager TryExec=gnome-session Exec=gnome-session --session=awesome Type=Application
Создаем файл GNOME сессии
/usr/share/gnome-session/sessions/awesome.session
[GNOME Session] Name=Awesome RequiredComponents=gnome-panel;gnome-settings-daemon; RequiredProviders=windowmanager; DefaultProvider-windowmanager=awesome
RequiredComponents
можно использовать как автозагрузку, все приложения, записанные через точку с запятой выполняются при запуске сессии.
Создаем .desktop файл для Awesome
/usr/share/applications/awesome.desktop
[Desktop Entry] Version=1.0 Type=Application Name=Awesome Comment=The awesome launcher! TryExec=awesome Exec=awesome NoDisplay=true
Завершаем сессию пользователя и логинимся в сессию Gnome with Awesome.
Настройка
При загрузке сессии можно заметить, что под gnome-panel отрисовывается панель awesome, для наведения порядка необходимо её отключить. Для этого в файле ~/.config/awesome/rc.lua
закомментируем строки (в языке Lua комментарий начинается с символов «–», относящиеся к wibox:
-- {{{ Wibox -- Create a textclock widget --mytextclock = awful.widget.textclock({ align = "right" }) -- -- Create a systray --mysystray = widget({ type = "systray" }) -- -- Create a wibox for each screen and add it --mywibox = {} --mypromptbox = {} --mylayoutbox = {} --mytaglist = {} --mytaglist.buttons = awful.util.table.join( -- awful.button({ }, 1, awful.tag.viewonly), -- awful.button({ modkey }, 1, awful.client.movetotag), -- awful.button({ }, 3, awful.tag.viewtoggle), -- awful.button({ modkey }, 3, awful.client.toggletag), -- awful.button({ }, 4, awful.tag.viewnext), -- awful.button({ }, 5, awful.tag.viewprev) -- ) --mytasklist = {} --mytasklist.buttons = awful.util.table.join( -- awful.button({ }, 1, function (c) -- if c == client.focus then -- c.minimized = true -- else -- if not c:isvisible() then -- awful.tag.viewonly(c:tags()[1]) -- end -- -- This will also un-minimize -- -- the client, if needed -- client.focus = c -- c:raise() -- end -- end), -- awful.button({ }, 3, function () -- if instance then -- instance:hide() -- instance = nil -- else -- instance = awful.menu.clients({ width=250 }) -- end -- end), -- awful.button({ }, 4, function () -- awful.client.focus.byidx(1) -- if client.focus then client.focus:raise() end -- end), -- awful.button({ }, 5, function () -- awful.client.focus.byidx(-1) -- if client.focus then client.focus:raise() end -- end)) -- --for s = 1, screen.count() do -- -- Create a promptbox for each screen -- mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright }) -- -- Create an imagebox widget which will contains an icon indicating which layout we're using. -- -- We need one layoutbox per screen. -- mylayoutbox[s] = awful.widget.layoutbox(s) -- mylayoutbox[s]:buttons(awful.util.table.join( -- awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), -- awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), -- awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), -- awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) -- -- Create a taglist widget -- mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons) -- -- -- Create a tasklist widget -- mytasklist[s] = awful.widget.tasklist(function(c) -- return awful.widget.tasklist.label.currenttags(c, s) -- end, mytasklist.buttons) -- -- -- Create the wibox -- mywibox[s] = awful.wibox({ position = "top", screen = s }) -- -- Add widgets to the wibox - order matters -- mywibox[s].widgets = { -- { -- mylauncher, -- mytaglist[s], -- mypromptbox[s], -- layout = awful.widget.layout.horizontal.leftright -- }, -- mylayoutbox[s], -- mytextclock, -- s == 1 and mysystray or nil, -- mytasklist[s], -- layout = awful.widget.layout.horizontal.rightleft -- } --end -- }}}
Для применения изменений необходимо перезагрузить Awesome нажав Mod4+Control+r
Приложения и Awesome
Автозагрузка
В Awesome отсутствует поддержка автозапуска приложений, поэтому что бы настроить автозапуск необходимо добавить в ваш rc.lua следующий код:
function run_once(prg) if not prg then do return nil end end awful.util.spawn_with_shell("x=" .. prg .. "; pgrep -u $USERNAME -x " .. prg .. " || (" .. prg .. ")") end run_once("dropbox start")
Данный код выполняется каждый раз при старте или перезапуске Awesome (в том числе по горячим клавишам), он проверяет состояние каждого приложения и если оно не запущено- выполняет его.
Присвоение приложению тэг по умолчанию
Еще одной удобной особенностью Awesome является возможность назначить приложению определенный тэг, для этого в конфигурационном файле необходимо добавить следующий код:
{ rule = { class = "Vlc" }, properties = { tag = tags[1][6]} },
class
значение чувствительно к регистру. Что бы узнать class необходимого приложения, нужно ввести команду
xprop | grep -i class
и ткнуть мышью в окно приложения. В консоли отобразится значение поля class для этого приложения, как правило необходимо использовать имя, начинающееся с большой буквы, но бывают и исключения.
Здесь в значении tags[1][6]
первая цифра указывает номер дисплея, вторая- номер тэга. После этого плеер Vlc будет всегда запускаться с шестым тэгом на первом дисплее.
Pidgin в Awesome
Тайлинг
В Awesome работа с одним из самых распространенных мессенджером станет удивительно приятной и удобной! Для этого нам нужно:
- Настроить схему отображения клиентов на выбранном тэге;
- Назначить Pidgn выбранный тэг по умолчанию;
- Присвоить окнам чатов статус slave по умолчанию (что позволит списку контактов оставаться всегда в мастер-зоне).
Для настройки схемы отображения клиентов тэга №4 воспользуемся куском кода, приведенным выше:
-- {{{ Tags -- Define a tag table which hold all screen tags. tags = { names = {"⠐", "⠡", "⠪", "⠵", "⠻", "⠿",}, layout = {layouts[2], layouts[2], layouts[4], layouts[2], layouts[4], layouts[2]} } for s = 1, screen.count() do -- Each screen has its own tag table. tags[s] = awful.tag(tags.names, s, tags.layout) awful.tag.setncol(2, tags[s][4]) awful.tag.setproperty(tags[s][4], "mwfact", 0.20) end -- }}}
Назначаем клиенту Pidgin тэг по умолчанию (в данном случае №4). Дополнительно к метке class
клиенты могут отличаться меткой role
, который так же можно посмотреть запустив:
xprop | grep -i role
Для окна списка контактов Pidgin эта метка имеет значение buddy_list
, для окон чатов- conversation
. Добавляя приведенный ниже код в ваш rc.lua, вы определяете открытие окна списка контактов с тэгом 4, а открытие окна чата с тэгом 4 и пометкой его как slave
, что будет переносить его сразу в стэк-зону.
{ rule = { class = "Pidgin", role = "buddy_list"}, properties = { tag = tags[1][4] } }, { rule = { class = "Pidgin", role = "conversation"}, properties = { tag = tags[1][4]}, callback = awful.client.setslave },
Советы по настройке
В Pidgin рекомендуется влкючить модуль «Уведомление о сообщении» и в его настройках отметить пункт «Установить подсказку СРОЧНО для оконного менеджера». В этом случае при наличии непрочитанного сообщения тэг, которым помечен Pidgin будет выделятся цветом.
Сделать клиент плавающим (floating)
Часто нужно, чтобы некоторые клиенты всегда открывались в плавающем режиме, при котором они свободно перемещаются поверх общей схемы расположения клиентов (перемещение таких окон производится при помощи Mod4+LMB, изменение размера окна- Mod4+RBM), например KeePassx. Для этого необходимо создать правило для клиента KeePassx с установкой ему режима floating.
{ rule = { class = "Keepassx" }, properties = { floating = true } },
Отображение раскладки клавиатуры
По умолчанию в Awesome не реализована возможность отображения раскладки клавиатуры. Но это часто является необходимым, мало того, нужно что бы система отслеживала установленную раскладку для каждого открытого окна. Для этого воспользуемся пакетом kbdd
.
Установка:
sudo apt-get install kbdd
Конфигурация rc.lua.
Создаем виджет kbdwidget
:
kbdwidget = widget({type = "textbox", name = "kbdwidget"}) kbdwidget.border_color = beautiful.fg_normal kbdwidget.text = "Eng"
Конфигурируем на прослушивание DBus:
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] = "Eng", [1] = "Рус"} kbdwidget.text = " "..lts[layout].." " end )
Добавляем виджет на панель.
-- Add widgets to the wibox - order matters mywibox[s].widgets = { { mylauncher, mytaglist[s], mypromptbox[s], layout = awful.widget.layout.horizontal.leftright }, mylayoutbox[s], kbdwidget, mytextclock, s == 1 and mysystray or nil, mytasklist[s], layout = awful.widget.layout.horizontal.rightleft } end -- }}}
Добавляем kbdd
в автозагрузку
function run_once(prg) if not prg then do return nil end end awful.util.spawn_with_shell("x=" .. prg .. "; pgrep -u $USERNAME -x " .. prg .. " || (" .. prg .. ")") end run_once("kbdd")
Включение numlock при загрузки
Для этого будет использоваться программа numlockx
sudo apt-get install numlockx
В любое место rc.lua необходимо добавить строку
awful.util.spawn("numlockx on")
Проблемы
Если вы используете chromium, то обнаружите неприятную вещь: все ссылки mailto3) открываются новым окном браузера chromium, вместо положенного thunderbird. Эта проблема касается не только AwesomeWM, но и всех других нестандартных окружений рабочего стола. Возникает она в следствии того, что chromium для открытия ссылок использует команду xdg-email, которая как раз и не признает никакие другие DE кроме GNOME, KDE и LXDE, и все ссылки начинает открывать в браузере по умолчанию. Для решения данной проблемы выполняем следующие команды:
mkdir -p ~/.gconf/desktop/gnome/url-handlers/mailto gconftool-2 --set /desktop/gnome/url-handlers/mailto/command -t string 'thunderbird %s' gconftool-2 --set /desktop/gnome/url-handlers/mailto/enabled -t bool true sudo sed 's/open_generic "${mailto}"/open_gnome "${mailto}"/' -i /usr/bin/xdg-email