Installing i3 wm 4.2 on Slackware

Update: I’ve taken over the maintenance of i3 and i3status on SlackBuilds.org so the scripts there have been updated and ready for you to use.

Everybody knows that tiling window managers are the cure to all the world’s problems. Not everybody knows, though, that i3 windows manager offers much more than that. It additionally offers a highly customisable working environment that lets you effectively do your work without any distractions. Both happiness and a productive working environment are just a few keystrokes away. Follow the next few paragraphs to reach the state of programming nirvana.

As SlackBuilds.org still offers version 3.x of i3 window manager, I decided to write a SlackBuild for version 4.2. Despite the fact that there are some fundamental configuration differences between versions 3.x and 4.x, the installation processes are almost identical. For that reason I decided to adapt the official i3 slackbuild to work with 4.2 (the latest stable release as of the moment of writing.)

i3wm Installation Process

The installation process is pretty straightforward. First of all, you need to install necessary dependencies: libev, yajl and dmenu (all of them available on slackbuilds.org). There are also optional dependencies that will greatly improve i3’s functionality (I’ll cover them in a separate section as they can be installed later.)

Having installed the required dependencies, you can either download my updated installation scripts and i3 source code or a precompiled binary package (x86_64 only):

Update: Please do not use the scripts below. They are only here for archival reasons. Please visit the SlackBuilds website for the latest versions of the scripts.
i3-4.2 source
i3 slackbuild
i3 package (64-bit)

Optional dependencies (highly recommended – especially i3status)

Optional dependencies include i3lock (a screen locker) and i3status (a status bar generator.)

i3lock

As far as i3lock is concerned, I didn’t bother even trying to install it as it requires PAM which is not included in Slackware. Instead I use slock (available from slackbuilds). The usage of slock is amazingly simple: run it (through dmenu, terminal or previously assigned keybindings) to lock the screen, and type your password to unlock it (if you mistype your password, press Esc to clear it and type the password again.)

i3status

i3status is a status bar generator which will help you display all sorts of information. You could stick to version 2.1 which is available from slackbuilds.org.
In that case you might need to set the option: output_format = none. Otherwise I’d recommend installing i3status 2.5.1. Regardless of the version you choose, you need to install ‘confuse’ (available from slackbuilds.org). Please note that you don’t have to install dzen2 with the latest versions of i3/i3status. If you decide to install v. 2.5.1, you can use my slackbuild scripts or a precompiled package (64-bit only):

Update: Please do not use the scripts below. They are only here for archival reasons. Please visit the SlackBuilds website for the latest versions of the scripts.
i3status source
i3status slackbuild
i3status slackware package (64-bit)

Once you’ve installed all the packages, you can set up the default X environment by issuing xwconfig as a standard user and run startx. If no previous i3 configuration is present, you’ll go through a short configuration wizard. You can accept the default settings. They are reasonable and a great starting point for your customisations. The project website offers great documentation (link), as well as a recently opened stackexchange-like FAQ section.

You should see a status bar at the bottom of the screen. To start your modifications, copy /etc/i3status.conf to ~/.i3status.conf where you can place your changes.

Awesome 3.4.8 on Slackware

Update April 2012: It has been brought to my attention (Thanks to wildwizard and idnotcrae from LQ) that due to the split of xcb-util into the base package and xcb-util-wm as of version 0.3.8, the tutorial below does NOT work for Awesome 3.4.11. Unfortunately, upgrading the stock xcb-utils on 13.37 breaks a few things and as I no longer run AwesomeWM, I am afraid I am not going to update this tutorial. If someone would like to run Awesome 3.4.11 on Slackware 13.37, please have a look at this thread.

[This tutorial has been tested on Slackware64 13.1, Slackware64 13.37 and Slackware64-current as of 20/06/2011]

Ever since I started using the i3 window manager, I’ve really become a fan of tiling WMs. They are quick, efficient and make good use of your screen space. Having used i3 for a few months, I decided to give AwesomeWM a try. I followed the steps from this guide. What turned out was that things have changed since the publication of the above mentioned guide and now it’s much easier to install Awesome 3.x on Slackware64 13.1 (and -current).

First of all you need to grab the cairo’s slackbuild and source from Slackware’s source/l and recompile it with xcb. In order to achieve it you need to edit cairo.Slackbuild and add the line in bold:

CFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--mandir=/usr/man \
--sysconfdir=/etc \
--disable-gtk-doc \
--disable-glitz \
--disable-quartz \
--disable-static \
--enable-xcb \
--disable-win32

Dependencies:

Afterwards, you need to install all the dependencies needed by AwesomeWM: lua, imlib2, libev. They are available from www.slackbuilds.org. Finally, you can grab the source of libxdg form here and create a Slack package. You can either do it manually, or use src2pkg. Once a libxdg package is created in /tmp, you can install it with the following command:

# installpkg /tmp/libxdg-basedir*.tgz

Awesome

The only thing that’s left is to grab the latest Awesome source, build a package and install it on the system.  There’s, however, one thing you might want to change. The default Awesome source code installs config files to /usr/etc which is against Slackware’s standard filesystem policy.  Normally all the config files in Slackware go to /etc.  We need to make some slight modifications of the code:

1. Untar the source:

tar xvjf  awesome-3.4.8.tar.bz2
cd awesome-3.4.8

2. Open awesomeConfig.cmake with you favourite editor

3. Change the following:

if(DEFINED SYSCONFDIR)
set(SYSCONFDIR ${SYSCONFDIR} CACHE PATH "config directory")
else()
set(SYSCONFDIR ${PREFIX}/etc CACHE PATH "config directory")
endif()

To

if(DEFINED SYSCONFDIR)
set(SYSCONFDIR /etc CACHE PATH "config directory")
else()
set(SYSCONFDIR /etc CACHE PATH "config directory")
endif()

4. Run ‘make’
5. As root:

mkdir /tmp/awesome-3.4.8
make install DESTDIR=/tmp/awesome-3.4.8
cd /tmp/awesome-3.4.8
makepkg -l y -c n /tmp/awesome-3.4.8.tgz
installpkg /tmp/awesome-3.4.8.tgz

The Awesome Window Manager is now installed on your system.
This is an example of Awesome’s xinitrc (taken from the Awesome Slackbuild for 13.0). To add it to xwconfig you need to create xinitrc.awesome and copy it to /etc/X11/xinit/

#!/bin/sh
# $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap

# merge in defaults and keymaps

if [ -f $sysresources ]; then
    /usr/bin/xrdb -merge $sysresources
fi

if [ -f $sysmodmap ]; then
    /usr/bin/xmodmap $sysmodmap
fi

if [ -f $userresources ]; then
    /usr/bin/xrdb -merge $userresources
fi

if [ -f $usermodmap ]; then
    /usr/bin/xmodmap $usermodmap
fi

exec awesome

That’s it! You can start the Awesome Window Manager.

I shall discuss its configuration in a separate post.

have fun.