Разговор пойдёт о моём первом знакомстве с таким оконным менеджером, как Awesome. Долгое время я использовал Gnome2, потом пробовал Gnome3, решил испробовать kde, но ничего из этого не удовлетворило меня. Да, к слову, у меня Gentoo. Да, статья ориентирована на таких же как и я новичков — дабы упростить жизнь.
В официальной ветке портажа стабильной является версия 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 %session
login_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 ~/.config
mkdir ~/.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
-- }}}
-------------------------------------
--- Устанавливаем тему ---
-------------------------------------
beautiful.init("/home/worm2fed/.config/awesome/themes/worm2fed/theme.lua")
----------------------------------------------------------------------
--- Устанавливаем приложения по умолчанию ---
----------------------------------------------------------------------
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
Имена тегов могут быть абсолютно любыми — я выбрал греческие буквы — как на скрине unligic. Каждому отдельному тегу я присваиваю своё макет, которые мы определили выше.
---------------------------------------------------------
--- Тэги - виртуальные рабочие столы ---
---------------------------------------------------------
-- Список тэгов
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
-- }}}
Статья вышла очень большой, поэтому пришлось разбить на части, продолжение тут
Автор: worm2fed