Awesome

From Gentoo Wiki
Revision as of 00:06, 30 April 2012 by Pckt (Talk | contribs)

Jump to: navigation, search

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

Keyboard 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.lua

After 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 :1

This will open an 800x600 window. To run awesome within it open a new terminal and run the following

user $ DISPLAY=:1.0
user $
awesome

This 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:

File~/.xinitrc

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:

File~/.xinitrc

synclient HorizEdgeScroll=1
synclient TapButton1=1
exec ck-launch-session dbus-launch awesome
Note
synclient belongs to x11-drivers/xf86-input-synaptics

Tags

Example of four tags with custom number symbols.

Filerc.conf

-- {{{ Tags
tags = {}
for s = 1, screen.count() do
    tags[s] = awful.tag({ "➊", "➋", "➌", "➍" }, s, layouts[1])
end
-- }}}

Menu

Example of custom awesome menu.

Filerc.conf

-- {{{ 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.

Filerc.conf

-- {{{ 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/volumeicon

Autostart volumeicon from .xinitrc.

File~/.xinitrc

volumeicon &
exec ck-launch-session dbus-launch awesome

With awesome
Lightweight method is to add volume keys straight to awesome config.

Filerc.confVolume keys

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
Filerc.confVolume keybindings

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
Filerc.confVolume keybindings

-- {{{ 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),


External Reference

Personal tools
Namespaces

Variants
Actions
Gentoo Websites logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Navigation
Toolbox
Categories