- How to Install and Use i3 Window Manager on Linux
- Benefits of i3 Windows Manager
- 1. Resource Friendly
- 2. Flexibility
- 3. Easy to Navigate Between Workspaces
- Installing i3 Window Manager on Linux
- How to Use i3 Window Manager in Linux
- Manipulating Windows
- i3 Status Bar
- i3 Basic Configurations
- Comparison of tiling window managers
- Comparison table
- Management style
- Layouts
- Key bindings
- See also
How to Install and Use i3 Window Manager on Linux
Written in C language, the i3wm ( i3 Windows Manager ) is a lightweight, easy-to-configure, and hugely popular tiling windows manager. Unlike the conventional desktop environment, a tiling manager provides just sufficient functionality to arrange windows on your screen in an easy and appealing manner suited for your workflow.
i3 is a minimalist tiling manager that intelligently arranges the windows on your screen in a seamless non-overlapping manner. Other tiling managers include xmonad and wmii.
In this guide, we will explain how to install and use the i3 Windows manager on Linux desktop systems.
Benefits of i3 Windows Manager
Unlike X windows managers such as Fluxbox, KWin, and enlightenment, i3 comes with a bag of goodies that we have listed below for a smooth desktop experience.
1. Resource Friendly
Unlike the fully-featured desktop environments such as GNOME, i3 windows manager is quite minimalistic and is designed for simplicity and efficiency. With low resource utilization, it makes up for a fast tiling Windows manager and leaves your system with plenty of RAM and CPU for other applications.
2. Flexibility
Apart from having the ability to automatically arrange windows in a neat and organized manner, i3 is fully configurable and you can tweak a few settings to match your preferred screen layout. Using external tools, you can enhance the appearance by selecting the background image, adjusting the transparency and window fading effect, and enabling desktop notifications.
3. Easy to Navigate Between Workspaces
The i3 tiling manager provides an easy and quick way to switch between workspaces thanks to a wide array of keyboard shortcuts that you can easily configure. You can seamlessly group Windows to suit your workflow, which enhances your productivity.
Installing i3 Window Manager on Linux
The i3 tiling manager is available in Debian, Ubuntu, and Linux Mint repositories and can be installed using the apt package manager as follows.
$ sudo apt update $ sudo apt install i3
On Fedora distribution, you can install i3 using dnf package manager as shown.
$ sudo apt update $ sudo dnf install i3
Once installed, you will need to restart your system and click on the small gear wheel at the login window and select the ‘i3’ option as shown.
Once logged in, you will be prompted to either generate the config file which will be saved in your home directory ~/.config/i3/config, or use the defaults which will save the file in the /etc/i3 directory.
In this guide, we will go with the first option so we are going to hit ENTER to place the configuration file in our home directory.
Next, you will be required to define the i3 wm modifier key also known as the $mod key which can either be the Windows Logo key or the Alt Key. Use the arrow up or down keys to select your preferred modifier key.
Once you are done with the initial setup. There isn’t much to do with the default i3 window, it saves as a blank screen with a status bar at the very bottom of the screen.
How to Use i3 Window Manager in Linux
Having installed the i3 tiling manager, here are a few keyboard combinations that you can use to get off the ground and use the tiling manager with ease.
Launch a terminal: $mod + ENTER .
Launching application using the menu: $mod + d – This opens up a menu at the top of your screen that allows you to search a specific application by typing a keyword at the text field provided.
- Enter a fullscreen mode – on and off: $mod + f .
- Exiting an application window; $mod + Shift + q .
- Restarting i3: $mod + Shift + r .
- Exiting i3 windows manager: $mod + Shift + e .
Manipulating Windows
When launching applications, they are usually tiles as shown below. Obviously, the workspace looks so cramped with multiple tiled windows and makes you feel overwhelmed.
For a better experience, you can detach a window and bring it into the foreground to have a ‘floating’ experience. This can be achieved by pressing the $mod + Shift + Space combination.
In the example below, the terminal window is seen in the foreground instead of being tiled.
Additionally, you can make the window go fullscreen by hitting the $mod + f combination and repeating the same to revert to the tiling mode.
i3 Status Bar
This is one of the most important yet overlooked section of the i3 tiling manager. It displays information such as the available disk space, IP address & bandwidth rate, Battery level, date, and time.
i3 Basic Configurations
If you didn’t generate the configuration file in your home directory, you can find it in the /etc/i3/config path. To copy it to your home directory
$ sudo cp /etc/i3/config ~/.config/i3
Then change the ownership to your user
$ sudo chown user:group ~/.config/i3
The configuration file comes with numerous settings that you can tweak to your preference to alter the look and feel of the tiling manager. You can change the colors of workspaces, change the layout of windows, as well as resize windows. We will not dwell so much on that or now. The aim of this guide was to give you a decent introduction to the i3 tiling manager and the basic functionalities to get you started.
Comparison of tiling window managers
This article provides an unbiased comparison of the most popular tiling window managers (as opposed to floating window managers).
Comparison table
The following table lists the most popular tiling window managers alongside notable features, providing readers with a quick overview.
Window Manager | Written in | Configured with | Management style | System tray support | On-the-fly reload | Information bars | Compositing | Default layouts | Pixel usage | External control | Library | Multiple (n) monitor behavior | ICCCM/EWMH compliant | Maintenance |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Awesome | C | Lua | Dynamic | Built-in | Yes | Built-in, images and text | External | max, nh-stack (and invert), nv-stack (and invert), free | Variable borders, optional h-tab titles | dbus (if enabled) | XCB | n-tags (workspaces). Per default 9 are enabled. Example | Yes | Active |
bspwm | C | Anything | Hybrid | None | Yes | Can write internal state to a FIFO | External | v-split, h-split | Variable borders | via bspc | XCB | Monitors hold Desktops | Yes | Active |
dwm | C | C (recompile) | Dynamic | Optional Patch | Optional | Built-in, reads from root window name | External | v-stack, max | via dwmfifo | Xlib | n regions, 9 workspaces fixed to each region | No | Active | |
FrankenWM | C | C (recompile) | Dynamic | None | No | No, outputs information to stdout, which can easily be parsed and displayed by an external monitor or panel (dzen2, conky, etc) | External | v-stack (and invert), h-stack (and invert), dual-v/h-stack, grid, fibonacci (vh-stack), rows, columns, max, free | Variable borders | XCB | No | Active | ||
herbstluftwm | C++ | Anything | Manual | None | Yes | External | vertical, horizontal, grid, max, tabbed | 1-pix borders | commands via herbstclient | Xlib | n regions, 9 workspaces visible in any region | Yes | Active | |
i3 | C | Text | Manual | i3bar | Yes (Layout is preserved) | text piped to i3bar ( i3status / conky and others can be used) | External | tree, v-split, h-split, stacked, tabbed, max, can be nested infinitely | None, 1-pix or 2-pix, optional titlebars, can hide edge borders | commands via ipc (or i3-msg, which uses ipc) | XCB | n regions | Yes | Active |
LeftWM | Rust | RON (user settings) / Anything (themes) | Dynamic | None | Yes | Yes, many options through theme system | External | v-stack, columns, rows | Variable based on theme | supports _NET_ACTIVE_WINDOW and sending commands to a named pipe | Xlib | Workspaces and monitors are not tied. Many workspaces for monitor or many monitors for workspace | Yes | Active |
Notion | C, Lua | Lua, compatible with Ion3 configs | Manual | trayion, stalonetray | Yes | configurable | ? | h-tab, max | Configurable borders and titlebars/tabs | EWMH, arbitrary Lua scripts which have access to the rich internal API | Xlib | n workspaces on each monitor. Supports on-the-fly changes in topology | Active | |
qtile | Python | Python | Dynamic | Yes | Yes | Yes | External | tree, v-split, h-split, stacked, tabbed, max | No borders, although customizable | Hooks, Server mode | XCB | Active | ||
Ratpoison | C | Text | Manual | None | Yes | Yes | External | max | No | Active | ||||
Snapwm | C | Reloadable Text | Dynamic | None | Yes | Built-in, reads from root window name | External | nVertical, Fullscreen, nHorizontal, Grid, Center Stacking | Variable borders, no titles | Xlib | Number of desktops distributed evenly between monitors | Active | ||
Spectrwm | C | Text | Dynamic | None | Yes | Built-in, reads from user script | No | nv-stack, nh-stack, max | 1-pix borders, no titles | XCB | n regions, 10 workspaces visible in any region | No | Active | |
Stumpwm | Common Lisp | Common Lisp | Manual | StumpTray | Yes | Yes | External | max | SLIME server («Swank») | Xlib | No | Active | ||
xmonad | Haskell | Haskell | Dynamic | None | Yes | No | Yes, with xmonad-contrib and an external manager | nv-stack, nh-stack, max | Variable borders, no titles | via XMonad-Hooks-ServerMode | Xlib | n regions, 9 workspaces visible in any region | Yes / via XMonad-Hooks-EwmhDesktops | Active |
Window Manager | Written in | Configured with | Management style | System tray support | On-the-fly reload | Information bars | Compositing | Default layouts | Pixel usage | External control | Library | Multiple (n) monitor behavior | ICCCM/EWMH compliant | Maintenance |
Tip: External control can also be achieved by programs like xdotool which simulate keystrokes.
Management style
Dynamic management emphasizes automatic management of window layouts for speed and simplicity. Manual management emphasizes manual adjustment of layout and sizing with potentially more precise control, at the cost of more time spent moving and sizing windows.
Layouts
A number of common layout types appear in several tiling WMs, although the terminology varies somewhat.
- max: one window shown fullscreen (with or without a status bar, title and borders). Aka: monocle (dwm, monsterwm).
- h-stack: master area in top half, other windows stack up horizontally in the bottom half. The master area may be resizable. May be inverted top-bottom (wmfs). Aka: bottom stack (dwm), bstack(monsterwm).
- v-stack: master area in left half, other windows stack up vertically in the right half. The master area may be resizable. May be inverted left-right (wmfs). Aka: tile (dwm, monsterwm).
- nh-stack: h-stack allowing >=1 windows in master area. Aka: nbstack (dwm)
- nv-stack: v-stack allowing >=1 windows in master area. Aka: ntile (dwm)
- mirror-h: nh-stack with stacks above and below the master area
- mirror-v: nv-stack with stacks to the left and right of the master area
- h-tab: one window shown fullscreen with all window titles shown horizontally (like browser tabs)
- v-tab: one window shown fullscreen with all window titles shown vertically. Aka: stack (wmii).
- h-split: a keybinding splits the current window horizontally creating space for another
- v-split: a keybinding splits the current window vertically creating space for another
- columns: manual layout style which treats windows as belonging to vertical columns
- rows: manual layout style which treats windows as belonging to horizontal rows
- grid: window positions and sizes based on a regular NxM grid. May be automatic (like wmfs, monsterwm) or manual (like Subtle).
Key bindings
Tiling window managers are usually designed to be used entirely with the keyboard or with keyboard & mouse. This is for speed (reaching for and moving a mouse is slow) and ease of use. Sensible key bindings are crucial to making workflow fast and efficient. Some default sets are better than others, but generally the keys can be rebound as desired by the user.