Разговор пойдёт о моём первом знакомстве с таким оконным менеджером, как Awesome. Долгое время я использовал Gnome2, потом пробовал Gnome3, решил испробовать kde, но ничего из этого не удовлетворило меня. Да, к слову, у меня Gentoo. Да, статья ориентирована на таких же как и я новичков — дабы упростить жизнь.
В официальной ветке портажа стабильной является версия 3.4.15, но я решил поставить последнюю доступную — 3.5.2-r1, с USE флагом «dbus». В качество логин менеджера я выбрал SLiM. После сборки всех необходимых пакетов открываем /etc/conf.d/xdm и устанавливаем SLiM в качестве менеджера по умолчанию:
Далее необходимо сделать небольшие изменение я /etc/slim.conf
В этом конфиге также можете выбрать понравившуюся тему, которые лежат в /usr/share/slim/themes. Я обхожусь дефолтной. Так же там есть ещё пару интересных параметров, но я их не трогал — нет необходимости.
Терминал я решил использовать urxvt. У меня он собран:
Чтобы, собственно, запустился наш wm нужно вмести изменения в файл ~/.xinitrc (если его нету — то создать), ниже привожу свой:
Первая строка — запускаю демон urxvt (в дальнейшем клиент вызывается urxvtc), ну, во второй понятно запускаем pulseaudio, и в последней запускаем сам awesome. Стоит отметить, что если у вас systemd, а не consolekit — то у вас вызов awesome вроде как отличается, но я не использую systemd, поэтому не берусь утверждать.
Запускаем xdm:
Логинимся и наблюдаем вот такую вот картину:

Я долго лазил по разным форумам в поисках красивых темок, конфигов, виджетов для awesome. Наткулся на такого пользователя unligic (у него много статей и интересных вещей на github)

И более новая версия его темы:

Меня это очень впечатлило и я решил поставить себе его тему — но это не увенчалось успехом. Тема просто не работало. При исправлении одной ошибки появлялась новая и т.д. Позже я увидел его пост, содержание примерно такое «ставить новичку не советую, так как там много костылей, потратите кучу времени и не факт, что заработает». Собственно так и получилось. Тогда я решил писать конфиг сам. Знаний в Lua у меня не было вообще, но гугл всегда помогает.
Конфигурационный файл лежит в /etc/xdg/awesome/rc.lua — но его я трогать не советую, просто скопируем его
(У кого-то директории .config может не оказаться, не пугайтесь — просто создайте.
Начнём конфигурацию. (Да, я, пользуясь многими статьями, просто переписал его)
Отступы ужасно съехали, но в редакторе оно всё красиво. Клавиша модификатор — её ещё называет супер, клавиша с логотипом шиндоуса. Чаще всего это Mod4, но может и отличаться. И далее коды кнопок мыши и нужных в конфиге клавиш. Для проверки кодов мыши:
Для клавиши модификатора и остальных клавиш:
Имена тегов могут быть абсолютно любыми — я выбрал греческие буквы — как на скрине unlogic. Каждому отдельному тегу я присваиваю своё макет, которые мы определили выше.
Статья вышла очень большой, поэтому пришлось разбить на части, продолжение тут
В официальной ветке портажа стабильной является версия 3.4.15, но я решил поставить последнюю доступную — 3.5.2-r1, с USE флагом «dbus». В качество логин менеджера я выбрал SLiM. После сборки всех необходимых пакетов открываем /etc/conf.d/xdm и устанавливаем SLiM в качестве менеджера по умолчанию:
DISPLAYMANAGER="slim"Далее необходимо сделать небольшие изменение я /etc/slim.conf
# login_cmd exec /bin/sh - ~/.xinitrc %sessionlogin_cmd exec /bin/bash -login ~/.xinitrc %session# login_cmd exec /bin/bash -login /usr/share/slim/Xsession %sessionВ этом конфиге также можете выбрать понравившуюся тему, которые лежат в /usr/share/slim/themes. Я обхожусь дефолтной. Так же там есть ещё пару интересных параметров, но я их не трогал — нет необходимости.
Терминал я решил использовать urxvt. У меня он собран:
rxvt USE="xgetdefaults"rxvt-unicode USE="256-color focused-urgency font-styles mousewheel perl startup-notification vanilla xft"Чтобы, собственно, запустился наш wm нужно вмести изменения в файл ~/.xinitrc (если его нету — то создать), ниже привожу свой:
urxvtd --quiet --opendisplay --fork &pulseaudio --start &exec ck-launch-session dbus-launch awesomeПервая строка — запускаю демон urxvt (в дальнейшем клиент вызывается urxvtc), ну, во второй понятно запускаем pulseaudio, и в последней запускаем сам awesome. Стоит отметить, что если у вас systemd, а не consolekit — то у вас вызов awesome вроде как отличается, но я не использую systemd, поэтому не берусь утверждать.
Запускаем xdm:
sudo /etc/init.d/xdm startЛогинимся и наблюдаем вот такую вот картину:

Я долго лазил по разным форумам в поисках красивых темок, конфигов, виджетов для awesome. Наткулся на такого пользователя unligic (у него много статей и интересных вещей на github)

И более новая версия его темы:

Меня это очень впечатлило и я решил поставить себе его тему — но это не увенчалось успехом. Тема просто не работало. При исправлении одной ошибки появлялась новая и т.д. Позже я увидел его пост, содержание примерно такое «ставить новичку не советую, так как там много костылей, потратите кучу времени и не факт, что заработает». Собственно так и получилось. Тогда я решил писать конфиг сам. Знаний в Lua у меня не было вообще, но гугл всегда помогает.
Конфигурационный файл лежит в /etc/xdg/awesome/rc.lua — но его я трогать не советую, просто скопируем его
cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua(У кого-то директории .config может не оказаться, не пугайтесь — просто создайте.
mkdir ~/.configmkdir ~/.config/awesomeНачнём конфигурацию. (Да, я, пользуясь многими статьями, просто переписал его)
Тут мы перечисляем все подключаемые библиотеки
--------------------------------------------- --- Стандартные библиотеки --- --------------------------------------------- local gears = require("gears") local awful = require("awful") local vicious = require("vicious") awful.rules = require("awful.rules") require("awful.autofocus") local wibox = require("wibox") local beautiful = require("beautiful") local naughty = require("naughty") local menubar = require("menubar") local dbus = require("dbus")
Вроде всё понятно :)
--------------------------------------------------------- --- Устанавливаем системную локаль --- --------------------------------------------------------- os.setlocale("ru_RU.UTF-8")
Эту часть оставляем без изменений - это обработчик ошибок
-- {{{ Error handling -- Check if awesome encountered an error during startup and fell back to -- another config (This code will only ever execute for the fallback config) if awesome.startup_errors then naughty.notify({ preset = naughty.config.presets.critical, title = "Oops, there were errors during startup!", text = awesome.startup_errors }) end -- Handle runtime errors after startup do local in_error = false awesome.connect_signal("debug::error", function (err) -- Make sure we don't go into an endless error loop if in_error then return end in_error = true naughty.notify({ preset = naughty.config.presets.critical, title = "Oops, an error happened!", text = err }) in_error = false end) end -- }}}
Я взял за основу тему zenburn (лежит в /usr/share/awesome/themes/zenburn). И решил её немного поменять под себя (практически не значительно, пока что)
------------------------------------- --- Устанавливаем тему --- ------------------------------------- beautiful.init("/home/worm2fed/.config/awesome/themes/worm2fed/theme.lua")
Параметр -nw в последней строчке позволяет запускать emacs в терминале
---------------------------------------------------------------------- --- Устанавливаем приложения по умолчанию --- ---------------------------------------------------------------------- terminal = "urxvtc" -- Терминал по умолчанию browser = "google-chrome-stable" -- Браузер по умолчанию editor = os.getenv("EDITOR") or "emacs" -- Редактор по умолчанию editor_cmd = terminal .. " -nw" .. editor -- Команда запуска консольного редактора
Отступы ужасно съехали, но в редакторе оно всё красиво. Клавиша модификатор — её ещё называет супер, клавиша с логотипом шиндоуса. Чаще всего это Mod4, но может и отличаться. И далее коды кнопок мыши и нужных в конфиге клавиш. Для проверки кодов мыши:
xev | grep 'button'Для клавиши модификатора и остальных клавиш:
xev | grep 'keycode'Коды кнопок и клавиш
----------------------------------------- --- Клавиша-модификатор --- ----------------------------------------- modkey = "Mod4" --------------------------- --- Кнопки мыши --- --------------------------- left_button = 1 wheel_button = 2 right_button = 3 plus_button = 4 minus_button = 5 wheel_left_button = 6 wheel_write_button = 7 ----------------------------------- --- Скан-коды клавиш --- ----------------------------------- key_V = "#55" key_Z = "#52" key_Y = "#29" key_J = "#44" key_K = "#45" key_N = "#57" key_M = "#58" key_F = "#41" key_R = "#27" key_L = "#46" key_C = "#54" key_W = "#25" key_X = "#53" key_Q = "#24" key_H = "#43" key_Tab = "#23" key_Tilda = "#49" key_U = "#30" key_E = "#26" key_T = "#28" key_P = "#33" key_O = "#32" key_Return = "#36" key_Left = "#113" key_Right = "#114" key_Esc = "#9" key_Print = "#107" key_Alt_R = "#108" key_Alt_L = "#64" key_Space = "#65" key_Ctrl_R = "#105" key_Ctrl_L = "#37" key_Home = "#110" key_F1 = "#67" key_Mute = "#121" key_Vol_Down = "#122" key_Vol_Up = "#123"
Здесь я выбрал нужные мне разметки окон
------------------------------------------------------------------------------ --- Layouts - способы расположения окон на экране --- ----------------------------------------------------------------------------- local layouts = { awful.layout.suit.floating, -- 1 awful.layout.suit.tile, -- 2 Главное окно слева, справа второстепенные (мелкие) --awful.layout.suit.tile.left, -- * Слева второстепенные окна awful.layout.suit.tile.bottom, -- 3 Внизу второстепенные окна --awful.layout.suit.tile.top, -- * Второстепенные окна вверху awful.layout.suit.fair, -- 4 --awful.layout.suit.fair.horizontal, --awful.layout.suit.spiral, awful.layout.suit.spiral.dwindle, -- 5 awful.layout.suit.max, -- 6 --awful.layout.suit.max.fullscreen, awful.layout.suit.magnifier -- 7 }
Тут всё ясно
-------------------------------------- --- Обои рабочего стола --- -------------------------------------- -- Если в теме заданы обои if beautiful.wallpaper then -- Перебираем все экраны for s = 1, screen.count() do -- На каждый экран кладем обои (можно в принципе на каждый экран свои) gears.wallpaper.maximized(beautiful.wallpaper, s, true) end end
Имена тегов могут быть абсолютно любыми — я выбрал греческие буквы — как на скрине unlogic. Каждому отдельному тегу я присваиваю своё макет, которые мы определили выше.
Тэги
--------------------------------------------------------- --- Тэги - виртуальные рабочие столы --- --------------------------------------------------------- -- Список тэгов tags = { -- Имена тэгов names = { " α ", " β ", " ζ ", " Θ ", " Ξ ", " ς ", " ψ "}, -- Макеты тэгов layout = { layouts[1], layouts[2], layouts[3], layouts[4], layouts[5], layouts[6], layouts[7] }} -- Перебираем все экраны for s = 1, screen.count() do -- На каждом создаем список тэгов, устанавливая макет отображения окон tags[s] = awful.tag(tags.names, s, tags.layout) end
Собираем менюшку (не знаю зачем она нужна, так ни разу и не использовал)
------------------------------ --- Главное меню --- ------------------------------ --- Интернет-приложения internet_menu = { -- Формат описания пункта меню -- {<Назавание пункта меню>, <Команда запуска>, <Иконка>} {" Firefox", "firefox-bin", beautiful.firefox_icon}, {" Chrome", "google-chrome-stable", beautiful.chrome_icon}, {" Pidgin", "pidgin"} } --- editors_menu = { {" Eclipse", "eclipse-bin-4.2"}, {" Emacs", "emacs"} } --- office_menu = { {" Word", "libreoffice --writer"}, {" Exel", "libreoffice --calc"} } main_menu = awful.menu({ -- Таблица пунктов главного меню items = { {" Интернет", internet_menu}, {" Редакторы", editors_menu}, {" LibreOffice", office_menu}, {" "}, {" Перезагрузка", "reboot", beautiful.reboot_icon}, {" Выключение", "halt", beautiful.poweroff_icon}, {" Выход", awesome.quit, beautiful.logout_icon} } }) ------------------------------------------------------------------ --- Лаунчер - та кнопка что на панели слева --- ------------------------------------------------------------------ launcher = awful.widget.launcher({ image = beautiful.gentoo_icon, menu = main_menu })
А вот это так и не понял для чего
-- Menubar configuration menubar.utils.terminal = terminal -- Set the terminal for applications that require it -- }}}
Статья вышла очень большой, поэтому пришлось разбить на части, продолжение тут
