- Download
- Packages
- Distributions using Awesome as the default window manager
- Building from Source
- Stable
- Old stable
- Development
- History
- The awesome windows manager
- New features
- Better DPI handling
- Extendable awful.rules providers and better awful.spawn functions
- A brand new keygrabber API
- A new GTK color palette based theme
- The awesome windows manager
- awesome(1)
- SYNOPSIS
- DESCRIPTION
- OPTIONS
- DEFAULT MOUSE BINDINGS
- Navigation
- Layout modification
- awesome
- Contents
- Installation
- Starting
- With GNOME
- Configuration
- Creating the configuration file
- Examples
- Extensions
- Autostart
- Changing keyboard layout
- Theming
- Wallpaper
- Tips and tricks
- Hide / show wibox
- Screenshot
- Removing window gaps
- Transparency
- Conky
- wiboxes
- ImageMagick
- Passing content to widgets with awesome-client
- Using a different panel with awesome
- Application directories in menubar
- Pop-up menus
- Applications menu
- Titlebars
- Battery notification
- Media Controls
- Steam Keyboard
- Troubleshooting
- Debugging rc.lua
- awmtt
- Log Files
- Mod4 key
- Fix Java (GUI appears gray only)
- Eclipse: cannot resize/move main window
- Netbeans: code-prediction appears on wrong screen
- IntelliJ: menus appear on incorrect position, some windows do not open
- scrot: Cannot take a mouse selected screenshot with keyboard shortcuts
- YouTube: fullscreen appears in background
- Prevent the mouse scroll wheel from changing tags
- Starting console clients on specific tags
- Duplicate menu-entries generated by Xdg-menu
- Some Shortcuts not Working in Xfce4 overlapping Keys
Download
Packages
awesome is currently available in:
Repology provides a comprehensive overview of which version of awesome is included in which distribution.
Distributions using Awesome as the default window manager
Building from Source
We strongly recommend using the awesome package of your distribution.
This is because many people who tried to build from source had problems. LGI, one of awesome’s dependencies, currently hardcodes the package search path used by Lua 5.1. Part of the reason for this is that Lua upstream intends Lua to be embedded, which means that detecting an installed Lua version properly is not easy.
After installing awesome, you can check if you are affected by this problem by running awesome -v . If an error message is displayed instead of LGI version’s number, you are likely affected.
Stable
Latest stable version of awesome is version 4.3 (Too long) released on 28 January 2019.
Old stable
This branch of awesome is deprecated.
Latest old stable version of awesome is version 3.5.9 (Mighty Ravendark) released on 6 March 2016.
Development
The Git repository can be cloned from Github:
git clone https://github.com/awesomeWM/awesome.git
Alternatively, development versions can be downloaded as ZIP files through the Github web interface.
History
A list of of old releases is available here.
The awesome windows manager
psychon released this Jan 28, 2019
Awesome v4.3 is the third release of the 4.x API. It comes after one and a half years of little fixes and improvements. Awesome v4.2 was very stable thanks to everybody’s effort to unit test everything. Given no major bug warranted a new release, this one adds a few large features while preserving full compatibility with existing user configurations.
New features
- gears.string now has a endswith and startswith functions
- luarocks modules are now automatically available in Awesome
- A generic way to create or use widgets has been added ( wibox.widget.base.make_widget_from_value )
- It is now possible to connect to signals from all instances of a widget at once
- The calendar widget now supports margins
- The documentation has a new theme
- Wiboxes now have to_widget() and save_to_svg() methods.
- The client objects now have a immobilized_horizontal and immobilized_vertical property to know if they can currently be moved or resized (for example, it is set to false when maximized)
- gears.timer objects now have a call_now method.
- The hotkey popup now supports termite keybindings
- The menubar loads faster
- Wiboxes have an input_passthrough property to send mouse clicks to the object below.
- The taglist and tasklist now support the declarative constructor syntax
- There is now an awesome.pixbuf_to_surface to convert a GdkPixbuf to a cairo surface.
- The notifications icon can now be resized and limited with notification_icon_size
- A gears.sort module has been added with graph resolution
- awesome-client now runs code in a protected context
- The widget documentation has been extended to be more friendly to new users.
- There is a new beautiful.maximized_hide_border theme option to hide the border for maximized clients.
- The client startup_id field is now writable. This is useful when the client native implementation is not present or too buggy to be used.
- The awful.widget.prompt now has a with_shell option to allow Bash/ZSH aliases, function and environment variables to be used in commands.
- The awful.titlebar s now have a fallback_name when a client has no name property.
- Clients now have a motif_wm_hints property to reflect some hints using the Motif X11 property extension. This is used by some modern toolkits including GTK.
- Clients now have a requests_no_titlebar property to expose when a client has client side titlebars (also known as decorations and CSD)
- The hotkey popup now has a show_awesome_keys option.
- The awful.widget.prompt now has more of the awful.prompt constructor arguments.
- It is now possible to set a list of layouts per tag instead of a single global one.
- There is now a awful.layout.get_tag_layout_index() function to get the index of the current layout in the global layout list ( awful.layout..layouts )
- The wibox.layout.manual layout now has an :insert() method.
Better DPI handling
The screen now has a read/write dpi property and awful.screen.set_auto_dpi_enabled(true) can be used to automatically set the DPI for many Awesome elements. Please note that it is not backward compatible and breaks many widget. As AwesomeWM always used pixels as the de-facto metric for sizes, enabling auto_dpi will break most existing configs. However, for people who use such setup, it might be worth speding some time to fix their config.
Extendable awful.rules providers and better awful.spawn functions
There is two new functions called awful.rules.add_rule_source and awful.rules.remove_rule_source . They allow to create a dependency graph for where a rule comes from and which provider has the priority when setting it.
Previously, there were the normal properties, awful.rules.high_priority_properties and awful.rules.delayed_properties . This didn’t scale and could not represent all corner cases. Those table still exist and are still honored, but there is now a system that can handle the full complexity of the property priority graph.
This is used by default in awful.spawn . The reliability of attaching properties to spawn calls has been improved. On top of this, three new functions were added
- awful.spawn.once
- awful.spawn.single_instance
- awful.spawn.raise_or_spawn
They allow to specify that a command should only have one running instance. This works across restart too, so all hacks to handle restarting Awesome are no longer required.
Note that the client.startup_id isn’t supported by all applications and a Linux-specific workaround is recommended to improve the reliability of the awful.spawn functions.
A brand new keygrabber API
The keygrabber module API was rebuilt from scratch to make it more usable. The previous API was very low level, very close to how it actually work, but was disconnected from how keygrabbers are used in a window manager. Getting anything done with the previous API required a lot of boilerplate code and had many corner cases to handle. The new API has built-in support for the most common use cases and is fully declarative.
A new GTK color palette based theme
A new theme has been added. It reads the GTK theme colors and use them in the wibar , menu and titlebar . It helps create an uniform look and feel between the window manager and client applications with minimal efforts.
The awesome windows manager
Awesome is a highly configurable, next generation framework window manager for X.
Building and installation
After extracting the dist tarball or cloning the repository, run:
- create a build directory at ./build ,
- run cmake ,
- build Awesome and
- install it to the default prefix path /usr/local .
Alternatively to the above, you can generate a .deb or .rpm package, for easy installation management:
Advanced options and testing
A full list of dependencies, more advanced build options, as well as instructions on how to use the test suite can be found here.
Installing current git master as a package receipts
You can directly select Awesome from your display manager. If not, you can add the following line to your .xinitrc to start Awesome using startx or to .xsession to start Awesome using your display manager:
In order to connect Awesome to a specific display, make sure that the DISPLAY environment variable is set correctly, e.g.:
(This will start Awesome on display :1 of the host foo.bar.)
The configuration of Awesome is done by creating a $XDG_CONFIG_HOME/awesome/rc.lua file, typically
An example configuration named awesomerc.lua is provided in the source.
On most systems any message printed by Awesome (including warnings and errors) is written to
If Awesome does not start or the configuration file is not producing the desired results the user should examine this file to gain insight into the problem.
You can call awesome with gdb like this:
Then in gdb set any arguments and run it:
You can join us in the #awesome channel on the OFTC IRC network.
You can ask questions on Stack Overflow.
We also have a awesome subreddit where you can share your work and ask questions.
Please report any issues you may find on our bugtracker.
You can submit pull requests on the github repository. Please read the contributing guide for any coding, documentation or patch guidelines.
Online documentation is available here.
The project is licensed under GNU General Public License v2 or later. You can read it online at (v2 or v3).
awesome(1)
awesome — awesome window manager
SYNOPSIS
awesome [-v | —version] [-h | —help] [-c | —config FILE] [-k | —check] [—search DIRECTORY] [-a | —no-argb] [-r | *—replace]
DESCRIPTION
awesome is a window manager for X. It manages windows in different layouts, like floating or tiled. Any layout can be applied dynamically, optimizing the environment for the application in use and the task currently being performed.
In a tiled layout, windows are managed in a master and stacking area. The master area contains the windows which currently need the most attention, whereas the stacking area contains all other windows. In a floating layout windows can be resized and moved freely. Dialog windows are always managed as floating, regardless of the layout currently applied. The spiral and dwindle layouts are special cases of the tiled layout where the stacking area is arranged in a spiral for the former or as a rectangular fractal for the later.
Windows are grouped by tags in awesome. Each window can be tagged with one or more tags. Selecting certain tags displays all windows with these tags.
awesome can contain small wiboxes which can display anything you want: all available tags, the current layout, the title of the visible windows, text, etc.
OPTIONS
Print version information to standard output, then exit.
-h, —help
Print help information, then exit.
-c, —config FILE
Use an alternate configuration file instead of $XDG_CONFIG_HOME/awesome/rc.lua.
-k, —check
Check configuration file syntax.
—search
Add a directory to the library search path.
-a, —no-argb
Don’t use ARGB visuals.
-r, —replace
Replace an existing window manager.
DEFAULT MOUSE BINDINGS
Navigation
Button4, Button5 on tag name
Switch to previous or next tag.
Button4, Button5 on root window
Switch to previous or next tag.
Button1, Button3, Button4, Button5 on layout symbol
Switch to previous or next layout.
Layout modification
Tag current client with this tag only.
Mod4 + Button3 on tag name
Toggle this tag for client.
Button3 on tag name
Add this tag to current view.
Mod4 + Button1 on client window
Mod4 + Button3 on client window
awesome
awesome is a highly configurable, next generation framework window manager for Xorg. It is very fast and extensible [..]. 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 its graphical environment.
Contents
Installation
Install the awesome package. The development version is awesome-git AUR , which is considered unstable and may have a different configuration API.
Starting
Run awesome with xinit. To use the included xsession file, see Display manager.
With GNOME
You can set up GNOME to use awesome as the visual interface, but have GNOME work in the background. See awesome-gnome AUR .
Configuration
The lua based configuration file is at
Creating the configuration file
First, run the following to create the directory needed in the next step:
Whenever compiled, awesome will attempt to use whatever custom settings are contained in
/.config/awesome/rc.lua. This file is not created by default, so we must copy the template file first:
The API for the configuration often changes when awesome updates. So, remember to repeat the command above when you get something strange with awesome, or you want to modify the configuration.
For more information about configuring awesome, check out the configuration section at awesome docs
Examples
Some good examples of rc.lua would be as follows:
Extensions
Several extensions are available for awesome:
Extension | Functionality | Version |
---|---|---|
| Bring up a view of all opened clients | Awesome 3.5+ |
| Dynamic tagging | Awesome 3.5 |
| Pop-up notifications | Awesome 3.5+ |
| Additional widgets | Awesome 3.5 |
Autostart
To implement the XDG autostart specification, add the following lines to
Alternatively, create a shell script via
and make it executable by
Open autorun.sh in an editor and insert the following:
To add programs to autostart, simply append run program [some arguments] to autorun.sh . The run function checks whether there already is an instance of program running and only runs program if there is none. You can check your autorun.sh by running it:
If everything is fine, add the following line to your rc.lua :
Changing keyboard layout
There are multiple ways to configure keyboard layers. In the default config awesome already has the layout widget activated — but it will not show up until there is a choice. To set multiple layers temporary, run
The awesome keyboard widget should appear, clicking on it should toggle the layout. If you want a keycombo to change the layout, you may append -option «grp:alt_shift_toggle» . This for example will let you change the layout by pressing Shift+Alt . So the complete command would be:
Or you can use awesome itself to switch (from v.4). Add the following line in the keybindings section of rc.lua:
This requires you to set up the keyboard layouts you want to be able to switch between either by the setxkbmap command or in X configuration files.
Once you have found the appropriate command to setup your layouts, add it to #Autostart.
Theming
Beautiful is a Lua library that allows you to theme awesome using an external file, it becomes very easy to dynamically change your whole awesome colours and wallpaper without changing your rc.lua .
The default theme is at /usr/share/awesome/themes/default . Copy it to
/.config/awesome/themes/default (optionally copy them all) and change rc.lua :
If you also copied the other themes you can replace «default» with e.g. «sky», «gtk», «zenburn» etc to change themes easily and the local copy of the themes can be studied, modified and used for testing. See also [1] for additional theming options. To add a useless gap for example, add
At the bottom of the theming section in your rc.lua .
Wallpaper
Beautiful can handle your wallpaper, thus you do not need to set it up in your .xinitrc or .xsession files. This allows you to have a specific wallpaper for each theme.
With version 3.5 Awesome no longer provides a awsetbg command, instead it has a gears module. You can set your wallpaper inside theme.lua with
To load the wallpaper, make sure your rc.lua contains
For a random background image, add [2] to rc.lua (v3.5+). To automatically fetch images from a given directory use [3] instead.
To simply specify the wallpaper in your rc.lua , add the following line to the theming section:
The optional awful.util.get_configuration_dir() simply returns the path to your rc.lua .
Tips and tricks
Hide / show wibox
To show the wibox (or perform other actions) only while the ModKey is pressed is not possible from within awesome, but there is a python script that does that: autohidewibox.
Screenshot
See Extra keyboard keys to ensure the PrtSc button is assigned correctly. Then install a screen capturing program such as scrot
Add to the globalkeys array:
This function saves screenshots inside
/screenshots/ , edit as needed.
Removing window gaps
As of awesome 3.4, it is possible to remove the small gaps between windows; in the awful.rules.rules table there is a properties section, add to it
Transparency
In awesome 3.5, window transparency can be set dynamically using signals. For example, rc.lua could contain the following:
Conky
This article or section is a candidate for merging with Conky.
If using conky, you must set it to create its own window instead of using the desktop. To do so, edit
/.conkyrc to contain
Otherwise strange behavior may be observed, such as all windows becoming fully transparent. Note also that since conky will be creating a transparent window on your desktop, any actions defined in awesome’s rc.lua for the desktop will not work where conky is.
wiboxes
As of Awesome 3.1, there is built-in pseudo-transparency for wiboxes. To enable it, append 2 hexadecimal digits to the colors in your theme file (
/.config/awesome/themes/default , which is usually a copy of /usr/share/awesome/themes/default ), like shown here:
where «AA» is the transparency value.
To change transparency for the actual selected window by pressing Modkey + PgUp/PgDown you can also use transset-df AUR and the following modification to your rc.lua :
ImageMagick
This article or section is a candidate for merging with Composite manager.
You may have problems if you set your wallpaper with imagemagick’s display command. It does not work well with xcompmgr. Please note that awsetbg may be using display if it does not have any other options. Installing habak, feh, hsetroot or whatever should fix the problem (grep -A 1 wpsetters /usr/bin/awsetbg to see your options).
Passing content to widgets with awesome-client
You can easily send text to an awesome widget. Just create a new widget:
To update the text from an external source, use awesome-client:
Do not forget to add the widget to your wibox.
Using a different panel with awesome
If you like awesome’s lightweightness and functionality but do not like the way its default panel looks, you can install a different panel, for example xfce4-panel .
Then add it to the autorun section of your rc.lua . You may also comment out the section which creates wiboxes for each screen (starting from mywibox[s] = awful.wibox(< position = "top", screen = s >) ) but it is not necessary. Do not forget to check your rc.lua for errors by typing:
You should also change your modkey+R keybinding, in order to start some other application launcher instead of built in awesome. See List of applications#Application launchers for examples. Do not forget to add:
Application directories in menubar
awesome includes menubar. By default, pressing Mod+p will open a dmenu-like applications menu at the top of the screen. However, this menu only searches for .desktop files in /usr/share/applications and /usr/local/share/applications .
To change this, add the following line to rc.lua , ideally, under Menubar configuration:
Note that the .desktop files are re-read each time awesome starts, thereby slowing down the startup. If you prefer other means of launching programs, the menubar can be disabled in rc.lua by removing local menubar = require(«menubar») and other references to the menubar variable.
Pop-up menus
This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.
There is a simple menu by default in awesome 3, simplifying custom menus. [4] If you want a freedesktop.org menu, you could take a look at awesome-freedesktop.
Applications menu
If you prefer to see a more traditional applications menu when you click on the Awesome icon, or right-click on an empty area of the desktop, you can follow the instructions in Xdg-menu#Awesome. However this menu is not updated when you add or remove programs. So, be sure to run the command to update your menu. It may look something like:
Titlebars
It is easy to enable titlebars in awesome by simply setting the variable titlebars_enabled to true in the config file. (in rules area)
However, you may want to be able to toggle the titlebar on or off. You can do this by simply adding something like this to your key bindings: (in clientkeys of Key bindings. And do not put the code to the end of the clientkeys area)
Then you may want to initially hide the titlebars. To do that just add this immediately after the title bar is created:
Battery notification
See this blog post for a simple battery notification to add to rc.lua . Note that it needs naughty for the notifications (installed by default in version 3.5). Other examples are available at awesome wiki.
4/10/2018: The above mentioned wiki no longer exists. (Reddit comment: What happened to the wiki?)
From the linked Reddit comment:
For those still interested in it’s content: https://github.com/gutierri/awesomewm-wiki-dump/tree/master/markdown has a partial markdown conversion of the old wiki (and the raw dump in xml format too).
Here is the only Battery widget from the partial wiki. It is based on ACPI and written for version 3.5. I am not reproducing it here b/c there may be additional steps to get it working.
NOTE: This partial wiki only covers versions up to 3.x
Media Controls
It is possible to control both volume and media playback via a combination of amixer (available via the alsa-utils package) and playerctl . The following can be added to the relevant key binding section of your rc.lua configuration file:
Steam Keyboard
The on screen Steam Keyboard that can be activated by the Steam Controller appears to freeze after trying to type one character. This is because the client that is supposed to receive the input has to be focussed to receive it and the keyboard will wait until this input is successfully send. Manually focussing another client will send the input to this client and unfreeze the keyboard again until the next character is entered.
The trick to getting the keyboard to work correctly is to prevent it ever receiving focus. Add the following signal to your config (or merge with an existing client focus signal):
This will return the focus to the last client whenever the keyboard receives focus. As the input to the keyboard is handled by the Steam client and as such does not need focus, inputting text will now work correctly.
Troubleshooting
Debugging rc.lua
xorg-server-xephyr allows you to run X nested in another X’s client window. This allows you to debug rc.lua without breaking your current desktop. Start by copying rc.lua into a new file (e.g. rc.lua.new), and modify it as needed. Then run new instance of awesome in Xephyr, supplying rc.lua.new as a config file like this:
The advantage of this approach is that if you introduce bugs you do not break your current awesome desktop, potentially crashing X apps and losing work. Once you are happy with the new configuration, copy rc.lua.new to rc.lua and restart awesome.
awmtt
awmtt AUR (Awesome WM Testing Tool) is an easy to use wrapper script around Xephyr. By default, it will use
/.config/awesome/rc.lua.test. If it cannot find that test file, it will use your actual rc.lua. You can also specify the location of the configuration file you want to test:
When you are done testing, close the window with:
Or immediately see the changes you are doing to the configuration file by issuing:
Log Files
If you are using LightDM, awesome will log errors to `$HOME/.xsession-errors`. If you use .xinitrc to start awesome, the entry «Where are logs, error messages or something?» in the FAQ may be a helpful resource.
Mod4 key
This article or section is a candidate for merging with Configuring_keyboard_layouts_in_X.
Awesome recommends to remap mod4 , which by default should be the Super or «Windows» key. If for some reason it is not mapped to mod4 , use xmodmap to find out what is. To change the mapping, use xev to find the keycode and name of the key to be mapped. Then add something like the following to
The problem in this case is that some xorg installations recognize keycode 115, but incorrectly as the ‘Select’ key. The above command explictly remaps keycode 115 to the correct ‘Super_L’ key.
To remap mod4 with setxkbmap (conflict with xmodmap ) see:
To set the caps lock key as mod4 add the following to
Fix Java (GUI appears gray only)
Eclipse: cannot resize/move main window
If you get stuck and cannot move or resize the main window (using mod4 + left/right mouse button) edit the workbench.xml and set fullscreen/maximized to false (if set) and reduce the width and height to numbers smaller than your single screen desktop area.
workbench.xml can be found in eclipse_workspace/.metadata/.plugins/org.eclipse.ui.workbench/ . Edit the line:
Netbeans: code-prediction appears on wrong screen
If you have two displays and use code-prediction (Ctrl + Space) in Netbeans, the code-predictions might appear on the wrong screen. This fixed it for me:
IntelliJ: menus appear on incorrect position, some windows do not open
This fixed it for me:
scrot: Cannot take a mouse selected screenshot with keyboard shortcuts
When using scrot, you may have problems at assigning a keyboard shortcut to the mouse selection option (formally scrot -s ). To fix it, add the following line to your rc.lua :
Note that nil is passed to the press argument of awful.key . Instead, the callback function is passed as fourth argument, which is the argument named release .
YouTube: fullscreen appears in background
If YouTube videos appear underneath your web browser when in fullscreen mode, or underneath the panel with controls hidden, add this to rc.lua
With Chromium add
Prevent the mouse scroll wheel from changing tags
In your rc.lua, change the Mouse Bindings section to the following;
Starting console clients on specific tags
The factual accuracy of this article or section is disputed.
It does not work when the console application is invoked from a GTK terminal (e.g. LXTerminal). URxvt is known to work.
Duplicate menu-entries generated by Xdg-menu
Xdg-menu will generate duplicate entries if you copy desktop-files from /usr/share/applications to
/.local/share/applications even though it might be preferable to simply override the originals, for example using a different theme for a specific application. One solution to the problem is to filter the generated output trough awk to remove entries with a name identical to the previous entry.
Some Shortcuts not Working in Xfce4 overlapping Keys
for Overlapping keys like «Super L» or Key Combinations which should be run by Awesome