Configuring Awesome with Gnome on Ubuntu

The default installation of Awesome for Ubuntu (via sudo apt-get install awesome) will create a new X session from which you can run the window manager as a stand-alone. You can then select the entry "awesome" rather than "Unity" at login time. This is fine to get started, but you will find that a number of features coming up with GNOME are then missing:

  • GTK+ theme and configuration (font sizes, etc.) are not applied. This is visible when you run e.g. Firefox or Thunderbird.
  • Without the GNOME Keyring, you will have to either type your password every time or run your SSH/GPG agents separately in each terminal.
  • Awesome's wallpaper overrides the GNOME/Unity one, with the latter only showing up when you run e.g. nautilus.

You can avoid this by loading both Awesome and a GNOME Session (without GNOME's window manager and panels) in parallel. Instructions can be found on the page Quickly Setting up Awesome with Gnome of the official Awesome wiki, however it is a bit crowded now so let me summarize below the steps that work for Ubuntu (tested on 14.04 and 16.04).

First, you will need to create three system-wide files:

/usr/share/xsessions/awesome-gnome.desktop

[Desktop Entry]
Name=Awesome GNOME
Comment=Dynamic window manager
Exec=gnome-session --session=awesome
TryExec=awesome
Type=Application
X-LightDM-DesktopName=Awesome GNOME
X-Ubuntu-Gettext-Domain=gnome-session-3.0

/usr/share/gnome-session/sessions/awesome.session

[GNOME Session]
Name=Awesome session
RequiredComponents=awesome;gnome-settings-daemon;
DesktopName=Awesome

/usr/share/applications/awesome.desktop

[Desktop Entry]
Version=1.0
Type=Application
Name=Awesome
Comment=The awesome launcher!
TryExec=awesome
Exec=awesome

The second file describes the components that GNOME Session should load to start up the session (we told it the name of the file via the option --session=awesome). Note that gnome-settings-daemon is not installed by default on Ubuntu, so you will also have to run:

sudo apt-get install gnome-settings-daemon

At this point, GNOME Session will be started along with Awesome, but it will not load all of its components at startup. These components are described by the files /etc/xdg/autostart/*.desktop, but some of them contain the OnlyShowIn parameter:

OnlyShowIn=GNOME;Unity;

When this parameter is set, the behavior of GNOME Session is to load the component only for GNOME or Unity. As we will be running Awesome, we need to update it to:

OnlyShowIn=GNOME;Unity;Awesome;

Go to /etc/xdg/autostart/, open the file gnome-settings-daemon.desktop and apply this modification. Then, open the .desktop files for the other services that you which to run at startup and apply the same modification. In my case, I ended up editting:

  • gnome-keyring-*.desktop for the session-wide password keyring
  • gnome-screensaver.desktop for the screensaver
  • gnome-settings-daemon.desktop (this one needs to be edited)
  • nautilus-autostart.desktop to load the GNOME wallpaper at startup

Finally, you will notice that the session does not close when you quit Awesome: GNOME Session keeps running, even if there is no window manager left. To quit it properly, one needs to run gnome-session-quit. The awesome wiki proposes a hook of the quit function to remediate this. First, go to your rc.lua configuration file. It should be located in ~/.config/awesome/rc.lua. If you don't have it yet, copy it from the default configuration by:

mkdir -p ~/.config/awesome
cp /etc/xdg/awesome/rc.lua ~/.config/awesome/

Then, add the following at the beginning of the file:

-- Override awesome.quit when we're using GNOME
_awesome_quit = awesome.quit
awesome.quit = function()
    if os.getenv("DESKTOP_SESSION") == "awesome-gnome" then
       os.execute("/usr/bin/gnome-session-quit") -- for Ubuntu 14.04
       os.execute("pkill -9 gnome-session") -- I use this on Ubuntu 16.04
    else
    _awesome_quit()
    end
end

And voilà, you should now have Awesome and GNOME Session living in bonne entente ;-)

Content on this website is under the CC-BY 4.0 license.