FastLinux modifikace awesome wm 3.4.1
Upravená konfigurace tohoto výborného window manageru.
Stručný popis změn oproti defaultnímu konfiguračnímu souboru awesome wm (rc.lua) a další informace.
Syntaxe konfiguračních souborů se oproti starším verzím trochu změnila a přidal jsem několik vylepšení, proto jsem se rozhodl napsat tento článek a neupravovat starší verzi. .
Původní článek doporučuji projít též - awesome 3.3
Screenshoty (IBM R61, rozlišení 1680*1050, Gentoo Linux):
Awesome 3.4.1 - Upravené konfigurační soubory a nové téma ke stažení.
Konfigurace je rozdělena do více souborů oproti defaultní verzi.
ls ~/.config/awesome/
autostart.sh - pro automatické spouštění aplikací awesome.lua - konfigurace awesome help.txt - popis nových klávesových zkratek (zobrazí se na ploše pomocí Mod4 + F1) menu_conf.lua - konfigurace menu rc.lua - slouží k nahrání defaultního konfigu při chybě uživatelova konfigu (zabrání zamrznutí awesome) scripts - adresář pomocných skriptů themes - adresář s tématem a ikonama vicious - adresář s knihovnou pro widgety
Konfigurace (awesome.lua).
Tady postupně ukážu pouze změny oproti defaultnímu konfiguráku rc.lua, i když jsou dobře okomentované v kódu.
Načtení knihovny s widgety.
-- widget library
require("vicious")
Přidána proměnná pro pozdější použití v menu a theme.
-- {{{ Variable definitions
-- path to home directory (cesta k domovskemu adresari uzivatele)
homepath = os.getenv("HOME")
Změněna cesta k tématu vzhledu. Téma je předěláno a na nastavení pozadí plochy je v něm použit program nitrogen, jestli ho nepoužíváte upravte soubor s tématem.
-- Themes define colours, icons, and wallpapers
-- beautiful.init("/usr/share/awesome/themes/default/theme.lua")
beautiful.init(homepath .. "/.config/awesome/themes/mseed/theme.lua")
Upraven defaultní terminál a editor. Vzhled xtermu je zadán ručně pomocí parametrů. Tyto proměnné se použijí dále...
-- This is used later as the default terminal and editor to run.
terminal = "xterm -bg black -fg white -fa terminus -fs 9"
editor = "geany" or os.getenv("EDITOR")
editor_cmd = terminal .. " -e " .. editor
Z layouts odebrán fullscreen mode. Na fullscreen používám klávesové zkratky Mod4 + f a Mod4 + m
-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
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,
awful.layout.suit.floating
}
-- }}}
Změna logiky a pojmenování tagů. Můžete modifikovat podle vašich potřeb.
-- {{{ Tags
tags = {}
tags.settings = {
{ name = "term", layout = layouts[1] },
{ name = "work1", layout = layouts[1] },
{ name = "work2", layout = layouts[1] },
{ name = "web", layout = layouts[1] },
{ name = "mail/im", layout = layouts[1], mwfact = 0.30 },
{ name = "grafx", layout = layouts[11] },
{ name = "media", layout = layouts[1] },
{ name = "office", layout = layouts[11] },
{ name = "temp", layout = layouts[11] }
}
for s = 1, screen.count() do
tags[s] = {}
for i, v in ipairs(tags.settings) do
tags[s][i] = tag({ name = v.name })
tags[s][i].screen = s
awful.tag.setproperty(tags[s][i], "layout", v.layout)
awful.tag.setproperty(tags[s][i], "mwfact", v.mwfact)
awful.tag.setproperty(tags[s][i], "hide", v.hide)
end
tags[s][1].selected = true
end
-- }}}
Oddělení definice menu do samostatného souboru pro lepší přehlednost .
-- {{{ Load menu - vlozi externi soubor s menu
-- Create a laucher widget and a main menu
require("menu_conf")
-- }}}
Potřeboval jsem mít možnost vypisovat různé informace pomocí popup oken na ploše. Napsal jsem malinkou funkci která to zařídí. Použití je definováno níž pomocí klávesových zkratek.
-- {{{
-- Function that show command output on screen
-- Funkce pro vypsani vystupu prikazu na obrazovku
local function notify_cmd(title, cmd, spawn)
-- Get data from command
local out = awful.util.pread(cmd)
-- Escape output
out = awful.util.escape(out)
naughty.notify{text = title .. "\n" .. out, timeout = spawn}
end
-- }}}
Přidány proměnné pro oddělovače použité v liště (wiboxu).
-- {{{ Reusable separators
spacer = widget({ type = "textbox", name = "spacer" })
separator = widget({ type = "textbox", name = "separator" })
spacer.text = " "
separator.text = "|"
-- }}}
Přidána funkce pro zobrazení widgetu na ovládání hlasitosti zvuku. Je použita knihovna vicious. Tuto funkci můžete upravit podle vašich potřeb (Kanál PCM/MASTER, příkazy pro ovládání zvuku "amixer -q sset PCM 2dB+", ...)
Tato funkce může způsobovat problémy, jestliže je špatně nastavena.
Při problémech s nastartováním awesome ji můžete smazat, ale nezapomenout smazat i spouštění této funkce, které je definováno níže v konfiguračním souboru. Je to řádek 234, stačí zakomentovat.
-- {{{ Volume level widget
-- Widget icon
-- volicon = widget({ type = "imagebox", name = "volicon" })
-- volicon.image = image(beautiful.widget_vol)
-- Initialize widgets
volwidget = widget({ type = "textbox", name = "volwidget" })
volbarwidget = awful.widget.progressbar({ layout = awful.widget.layout.horizontal.rightleft })
-- Progressbar properties
volbarwidget:set_width(8)
volbarwidget:set_height(18)
volbarwidget:set_vertical(true)
volbarwidget:set_background_color(beautiful.fg_off_widget)
volbarwidget:set_border_color(nil)
volbarwidget:set_color(beautiful.fg_widget)
volbarwidget:set_gradient_colors({
beautiful.fg_widget,
beautiful.fg_center_widget,
beautiful.fg_end_widget })
awful.widget.layout.margins[volbarwidget.widget] = { top = 2, bottom = 2 }
-- Register widgets
vicious.enable_caching(vicious.widgets.volume)
vicious.register(volwidget, vicious.widgets.volume, "$1%", 2, "PCM")
vicious.register(volbarwidget, vicious.widgets.volume, "$1", 2, "PCM")
-- Register buttons
volbarwidget.widget:buttons(awful.util.table.join(
awful.button({ }, 1, function () awful.util.spawn(terminal .. " -e alsamixer", false) end),
awful.button({ }, 2, function () awful.util.spawn("amixer -q sset Master toggle", false) end),
awful.button({ }, 4, function () awful.util.spawn("amixer -q sset PCM 2dB+", false) end),
awful.button({ }, 5, function () awful.util.spawn("amixer -q sset PCM 2dB-", false) end)
)) volwidget:buttons( volbarwidget.widget:buttons() )
-- }}}
Přidána funkce pro zobrazení widgetu baterie. Je použita knihovna vicious.
Spouštění této funkce je definováno na řádku 235. V případě problémů zakomentovat nebo smazat.
-- {{{ Battery state
-- Widget icon
-- baticon = widget({ type = "imagebox", name = "baticon" })
-- baticon.image = image(beautiful.widget_bat)
-- Initialize widget
batwidget = widget({ type = "textbox", name = "batwidget" })
-- Register widget
vicious.register(batwidget, vicious.widgets.bat, "$1$2%", 61, "BAT0")
-- }}}
Upravil jsem formát zobrazování času a data na liště.
-- Create a textclock widget - (datum a cas)
mytextclock = awful.widget.textclock({ align = "right" }, "%d.%m.%Y %H:%M" )
Upravena velikost, rozložení a obsah lišty.
Je zde i spouštění widgetů hlasitosti a baterie.
-- Create the wibox
mywibox[s] = awful.wibox({ position = "top", screen = s, height = "25" })
-- Add widgets to the wibox - order matters
mywibox[s].widgets = {
{
mylauncher,
mytaglist[s],
mypromptbox[s],
mylayoutbox[s],
layout = awful.widget.layout.horizontal.leftright
},
spacer,
s == 1 and mysystray or nil, separator,
mytextclock,spacer,separator,
spacer,volwidget, spacer, volbarwidget.widget, separator,
spacer, batwidget, separator,
mytasklist[s],
layout = awful.widget.layout.horizontal.rightleft
}
Základní klávesové zkratky jsou zachované, ale přidal jsem mnoho dalších.
Klávesové zkratky volají mnoho externích programů, proto je dobré si je upravit podle svých potřeb.
-- terminal
awful.key({ "Mod1" }, "F1", function () awful.util.spawn(terminal) end),
-- gmrun
awful.key({ "Mod1" }, "F2", function () awful.util.spawn("gmrun") end),
-- dmenu
awful.key({ "Mod1" }, "F3", function () awful.util.spawn(homepath .. "/.config/awesome/scripts/dmenu.sh") end),
-- vypnuti aplikace
awful.key({ "Mod1" }, "F4", function () if client.focus then client.focus:kill() end end),
-- Web search
awful.key({ "Mod1" }, "F5", function ()
awful.prompt.run({ prompt = "Web search: " }, mypromptbox[mouse.screen].widget,
function (command)
awful.util.spawn("firefox 'http://www.google.cz/search?q="..command.."'", false)
if tags[mouse.screen][4] then awful.tag.viewonly(tags[mouse.screen][4]) end
end)
end),
-- SSH connect
awful.key({ "Mod1" }, "F6", function ()
awful.prompt.run({ prompt = "SSH Connect: " }, mypromptbox[mouse.screen].widget,
function (host) awful.util.spawn(terminal .. " -e ssh " .. host, false) end)
end),
-- Rdesktop connect
awful.key({ "Mod1" }, "F7", function ()
awful.prompt.run({ prompt = "Remote: " }, mypromptbox[mouse.screen].widget,
function (host) awful.util.spawn(terminal .. " -e rdesktop -g 1024*762 -k cs_cz -u" .. host, false) end)
end),
-- OpenVPN connect
-- awful.key({ "Mod1" }, "F8", function () awful.util.spawn(homepath .. "/.config/awesome/scripts/openvpn_start.sh") end),
awful.key({ "Mod1" }, "F8", function () awful.util.spawn(terminal .. "-hold -e '" .. homepath .. "/.config/awesome/scripts/openvpn_start.sh'") end),
-- screenshot
awful.key({ modkey }, "Print", function () awful.util.spawn("scrot 'shot_%d.%m.%Y_%H.%M.%S.png' -e 'mv $f ~/shots/ & mirage ~/shots/$f'") end),
-- hlasitost
awful.key({ modkey }, "#115", function () awful.util.spawn(homepath .. "/.config/awesome/scripts/pvol.py -m", false) end),
awful.key({ modkey }, "#117", function () awful.util.spawn(homepath .. "/.config/awesome/scripts/pvol.py -p -c -5", false) end),
awful.key({ modkey }, "#112", function () awful.util.spawn(homepath .. "/.config/awesome/scripts/pvol.py -p -c 5", false) end),
-- hlasitost - multimedialni tlacitka (thinkpad r61)
awful.key({ } , "#122", function () awful.util.spawn("amixer -q set Master 2- unmute") end),
awful.key({ } , "#123", function () awful.util.spawn("amixer -q set Master 2+ unmute") end),
awful.key({ modkey }, "#122", function () awful.util.spawn("amixer -q set PCM 2- unmute") end),
awful.key({ modkey }, "#123", function () awful.util.spawn("amixer -q set PCM 2+ unmute") end),
-- zamknuti pc (lock)
awful.key({ modkey }, "e", function () awful.util.spawn("xscreensaver-command -lock") end),
-- plovouci okno na vsechny plochy
awful.key({ modkey }, "s", function () client.focus.sticky = not client.focus.sticky end),
-- plovouci okno vzdy navrchu
awful.key({ modkey }, "a", function () client.focus.ontop = not client.focus.ontop end),
-- schova okno
awful.key({ modkey }, "d", function () client.focus.hide = not client.focus.hide end),
-- Notifikace - HELP
awful.key({ modkey }, "F1", function ()
notify_cmd("Přidané klávesové zkratky: \n", "cat " .. homepath .. "/.config/awesome/help.txt", 20)
end),
-- Notifikace - main info
awful.key({ modkey }, "F2", function ()
notify_cmd("Volné místo", "df -hT", 10)
end),
-- Notifikace - logs
awful.key({ modkey }, "F3", function ()
notify_cmd("dmesg", "dmesg | tail -n 30", 10)
-- notify_cmd("/var/log/Xorg.0.log", "cat /var/log/Xorg.0.log | tail", 5)
end),
-- Notifikace - net info
awful.key({ modkey }, "F4", function ()
notify_cmd("Netstat ", "netstat -nat", 0)
end),
-- Notifikace - proc
awful.key({ modkey }, "F5", function ()
notify_cmd("Procesy", "ps -u | tail -n 30", 10)
end),
-- vertikalni a horzontalni resaiz oken
awful.key({ modkey, "Mod1" }, "Down", function () awful.client.incwfact(0.05) end),
awful.key({ modkey, "Mod1" }, "Up", function () awful.client.incwfact(-0.05) end),
awful.key({ modkey, "Mod1" }, "Right", function () awful.tag.incmwfact( 0.05) end),
awful.key({ modkey, "Mod1" }, "Left", function () awful.tag.incmwfact(-0.05) end),
-- Zobrazí / schová titlebar (20px vysoky).
awful.key({ modkey }, "q", function () if client.focus.titlebar then awful.titlebar.remove(client.focus, { modkey = modkey, height = "20" }) else awful.titlebar.add(client.focus, { modkey = modkey, height = "20" }) end end)
Přidána pravidla pro spouštění definovaných aplikací (umístění na plochu, layout)
-- {{{ Rules
-- pravidla pro ruzne aplikace (v jakem tagu a na jakem screenu)
awful.rules.rules = {
-- All clients will match this rule.
{ rule = { },
properties = { border_width = beautiful.border_width,
border_color = beautiful.border_normal,
focus = true,
keys = clientkeys,
buttons = clientbuttons } },
{ rule = { class = "pinentry" },
properties = { floating = true } },
{ rule = { class = "gimp" },
properties = { floating = true,
tag = tags[1][6] } },
{ rule = { class = "Firefox" },
properties = { tag = tags[1][4] } },
{ rule = { class = "Liferea" },
properties = { tag = tags[1][4] } },
{ rule = { class = "Claws-mail" },
properties = { tag = tags[1][5] } },
{ rule = { class = "Xchat" },
properties = { tag = tags[1][5] } },
{ rule = { class = "soffice" },
properties = { tag = tags[1][8] } },
{ rule = { class = "Inkscape" },
properties = { tag = tags[1][6] } },
{ rule = { class = "Blender" },
properties = { tag = tags[1][6] } },
{ rule = { class = "Gajim.py" },
properties = { tag = tags[1][5] } },
}
-- }}}
Nastavení titlebaru oken. Nastavil jsem výšku, ale momentálně nepoužívám, proto jsem nechal zakomentováno.
Pro zobrazování titlebarů oken můžete odkomentovat jako v tomto příkladu. Vzhled panelu (ikony, ..) je definován v souboru s tématem vzhledu.
-- Add a titlebar (zapne titlebar a nastavi mu vysku - height = "25")
awful.titlebar.add(c, { modkey = modkey , height = "24"})
Zakomentoval jsem funkci pro udělění fokusu okna po najetí myší. Radši mám klasické kliknutí nebo klávesovou zkratku.
-- Enable sloppy focus (fokus pri najeti mysi - bez nutnosti kliknout)
--c:add_signal("mouse::enter", function(c)
-- if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
-- and awful.client.focus.filter(c) then
-- client.focus = c
-- end
--end)
Menu (menu_conf.lua).
Menu je oproti defaultímu odděleno do samostatného souboru menu_conf.lua a rozsáhle rozšířeno. Individuální úprava je nutností, každý používá jiné programy.

























