Awesome
awesome is a highly configurable, next generation framework window manager for X. It is primarly targeted at power users, developers and any people dealing with every day computing tasks and who want to have fine-grained control on theirs graphical environment.
Contents |
Installation
root # emerge --ask x11-wm/awesomeKeyboard shortcuts
These are the most useful default shortcuts.
mod4 + mouse1 = move client with mouse mod4 + mouse2 = resize client with mouse mod4 + enter = open terminal mod4 + r = run command mod4 + shift + c = kill mod4 + m = maximize mod4 + n = minimize mod4 + ctrl + n = restore minimized clients mod4 + f = fullscreen mod4 + tab = switch to previous client mod4 + ctrl + space = float mod4 + j = hilight left client mod4 + k = hilight right client mod4 + shift + j = move client right mod4 + shift + k = move client left mod4 + l = resize tiled client mod4 + h = resize tiled client mod4 + left / right = change tag mod4 + 1-9 = change tag mod4 + shift + 1-9 = send client to tag
Creating the configuration file
The default configuration file of Awesome is located in ~/.config/awesome/rc.lua. If such a directory or file does not exist we will need to create them. A default, out of the box, configuration is distributed with Awesome and can be found at /etc/xdg/awesome/rc.lua. We would need to copy that configuration file to the users home directory.
First we create the awesome directory with the following command:
user $ mkdir -p ~/.config/awesome/Then we copy the lua configuration file with the following command:
user $ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.luaAfter making changes its useful to check the configuration file for errors.
user $ awesome -k
✔ Configuration file syntax OK.Debugging config with Xephyr
Xephyr is useful tool for debugging new config files as it creates an instance of an X server within a client window.
user $ Xephyr -ac -br -noreset -screen 800x600 :1This will open an 800x600 window. To run awesome within it open a new terminal and run the following
user $ DISPLAY=:1.0
user $ awesomeThis will run awesome within a window
Launch
If awesome is going to be launched from terminal through startx a configuration similar to the following is needed:
exec ck-launch-session dbus-launch awesome
If a Touchpad hardware is present and scrolling does not work .xinitrc should look similar to the following:
synclient HorizEdgeScroll=1 synclient TapButton1=1 exec ck-launch-session dbus-launch awesome
Tags
Example of four tags with custom number symbols.
-- {{{ Tags
tags = {}
for s = 1, screen.count() do
tags[s] = awful.tag({ "➊", "➋", "➌", "➍" }, s, layouts[1])
end
-- }}}
Menu
Example of custom awesome menu.
-- {{{ Menu
myawesomemenu = {
{ "manual", terminal .. " -e man awesome" },
{ "edit config", editor_cmd .. " " .. awesome.conffile },
{ "reload", awesome.restart },
{ "quit", awesome.quit },
{ "reboot", "reboot" },
{ "shutdown", "shutdown" }
}
appsmenu = {
{ "urxvt", "urxvt" },
{ "sakura", "sakura" },
{ "ncmpcpp", terminal .. " -e ncmpcpp" },
{ "luakit", "luakit" },
{ "uzbl", "uzbl-browser" },
{ "firefox", "firefox" },
{ "chromium", "chromium" },
{ "thunar", "thunar" },
{ "ranger", terminal .. " -e ranger" },
{ "gvim", "gvim" },
{ "leafpad", "leafpad" },
{ "htop", terminal .. " -e htop" },
{ "sysmonitor", "gnome-system-monitor" }
}
gamesmenu = {
{ "warsow", "warsow" },
{ "nexuiz", "nexuiz" },
{ "xonotic", "xonotic" },
{ "openarena", "openarena" },
{ "alienarena", "alienarena" },
{ "teeworlds", "teeworlds" },
{ "frozen-bubble", "frozen-bubble" },
{ "warzone2100", "warzone2100" },
{ "wesnoth", "wesnoth" },
{ "supertuxkart", "supertuxkart" },
{ "xmoto" , "xmoto" },
{ "flightgear", "flightgear" },
{ "snes9x" , "snes9x" },
}
mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu },
{ "apps", appsmenu },
{ "games", gamesmenu },
{ "terminal", terminal },
{ "web browser", browser },
{ "text editor", geditor }
}
})
mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
menu = mymainmenu })
-- }}}
Date
Example of custom date format. %d.%m %H:%M = the format, 60 is the update interval in seconds. You can get the format options with date --help.
-- {{{ Wibox
-- Create a textclock widget
mytextclock = awful.widget.textclock({ align = "right" }," %d.%m %H:%M ", 60)
Volume control
With standalone volume trayicon
Handles volume keys automaticly. Shows volume level in tray icon.
root # emerge --ask media-sound/volumeiconAutostart volumeicon from .xinitrc.
volumeicon & exec ck-launch-session dbus-launch awesome
With awesome
Lightweight method is to add volume keys straight to awesome config.
awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer -q sset Master 2dB-") end),
awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer -q sset Master 2dB+") end),
MPD multimedia keys
Add multimedia keybindigs for music player daemon.
root # emerge --ask media-sound/mpc
awful.key({ }, "XF86AudioNext",function () awful.util.spawn( "mpc next" ) end),
awful.key({ }, "XF86AudioPrev",function () awful.util.spawn( "mpc prev" ) end),
awful.key({ }, "XF86AudioPlay",function () awful.util.spawn( "mpc play" ) end),
awful.key({ }, "XF86AudioStop",function () awful.util.spawn( "mpc pause" ) end),
Custom keybindings
Add Alt+Tab shortcut to switch to previous window.
root # emerge --ask media-sound/mpc
-- {{{ Key bindings
globalkeys = awful.util.table.join(
...
-- alt + tab
awful.key({ "Mod1", }, "Tab",
function ()
awful.client.focus.history.previous()
if client.focus then
client.focus:raise()
end
end),