awesome

From Gentoo Wiki
Jump to: navigation, search
Other languages:
English • ‎日本語 • ‎한국어 • ‎中文(中国大陆)‎

External resources

awesome is a highly configurable, next generation framework window manager for X. It is primarily targeted at power users, developers and any people dealing with every day computing tasks and who want to have fine-grained control on their graphical environment.

Installation

Install x11-wm/awesome:

root #emerge --ask awesome

Configuration

Starting

To start awesome use a display manager or startx.

To use startx with ConsoleKit support, setup ConsoleKit and create the following file:

FILE ~/.xinitrc
exec ck-launch-session dbus-launch --sh-syntax --exit-with-session awesome

Configuration file

The default configuration file of awesome is located in ~/.config/awesome/rc.lua. If such a directory or file does not exist then it needs to be created. A default, out of the box, configuration is distributed with awesome and can be found at /etc/xdg/awesome/rc.lua. Copy that configuration file to the user's home directory.

First create the awesome/ directory:

user $mkdir -p ~/.config/awesome/

Next copy the rc.lua configuration file:

user $cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua

If x11-terms/xterm is not installed, either install it or change the default terminal emulator to the terminal emulator available on the system. Below, the default terminal emulator is set to konsole, part of kde-base/konsole.

FILE ~/.config/awesome/rc.lua
-- This is used later as the default terminal and editor to run.
terminal = "konsole"

After making changes it is useful to check the configuration file for errors:

user $awesome -k
✔ Configuration file syntax OK

Add wallpaper support through the media-gfx/feh package:

root #emerge --ask feh

For instance, to use awsetbg to set the wallpaper, edit ~/.config/awesome/theme/theme.lua:

FILE ~/.config/awesome/theme/theme.lua Setting a specific background using awsetbg
theme.wallpaper_cmd = { "awsetbg -f .config/awesome/themes/awesome-wallpaper.png" }

Tags

In awesome, tags are the name given to virtual desktops under which one or more applications are running. It is possible to assign custom symbols to these tags:

FILE ~/.config/awesome/rc.lua
-- {{{ Tags
tags = {}
for s = 1, screen.count() do
    tags[s] = awful.tag({ "➊", "➋", "➌", "➍" }, s, layouts[1])
end
-- }}}

Menu

Below is an example of a custom awesome menu:

FILE ~/.config/awesome/rc.lua
-- {{{ 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

Below is an example use of a custom date format. The format syntax used is %d.%m %H:%M. The second option, 60, is the update interval in seconds.

FILE ~/.config/awesome/rc.lua Creating a text-clock widget
-- {{{ Wibox
-- Create a text-clock widget
mytextclock = awful.widget.textclock({ align = "right" }," %d.%m %H:%M ", 60)
-- }}}
Note
For more information about the format options run date --help.

Volume control

media-sound/volumeicon can be used to handle volume keys automatically, and to show the volume level through a tray icon.

root #emerge --ask volumeicon

Autostart volumeicon from within ~/.xinitrc:

FILE ~/.xinitrc Launching volumeicon in the background when starting X
volumeicon &
exec ck-launch-session dbus-launch awesome

Alternatively, a lightweight method is to add volume keys straight into the awesome configuration:

FILE ~/.config/awesome/rc.lua Volume 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

Install media-sound/mpc to add multimedia key bindings for MPD:

root #emerge --ask mpc

Next update the awesome configuration to assign the multimedia keys to the proper command:

FILE ~/.config/awesome/rc.lua Volume key bindings
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),

Debugging the configuration with Xephyr

Xephyr is a useful tool for debugging new configuration files as it creates an instance of an X server within a client window.

user $Xephyr -ac -nolisten tcp -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 awesome

This will run awesome within a window.

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 = full screen
  • mod4+tab = switch to previous client
  • mod4+ctrl+space = float
  • mod4+j = highlight left client
  • mod4+k = highlight 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

Custom key bindings, like Alt+Tab, can be mapped to make the awesome experience even better. For instance, to use Alt+Tab to switch to the previous window:

FILE ~/.config/awesome/rc.lua Alt-TAB key binding
-- {{{ 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 resources