Úvod GNU/Linux Software Ke stažení Odkazy

Vaše IP: 3.147.28.162
Počet návštěv: 1656987
Hledání příkazů operačního systému Linux podle syntaxe nebo popisu.

Nastavení vzhledu stránek
Dark
Silver
Green
Grey

Radek Tříška

E-mail a Jabber :
radek(at)fastlinux(dot)eu
mseed@njs.netlab.cz

Sekce V.I.P. uživatelů


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 awesome 3.4.1 awesome 3.4.1 awesome 3.4.1

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.

| Verze projektu: 1.52 | © 2000 - 2011 | Historie |