Difference between revisions of "I3"

From ArchWiki
Jump to: navigation, search
m (Undo and extend revision 267863 by Justin8 (talk) Since the change was not actually correct.)
(Systemd unit file: running X11 programs from a service is bad; listening to lock signals (xss-lock) is the right way.)
(32 intermediate revisions by 16 users not shown)
Line 10: Line 10:
  
 
== Installation ==
 
== Installation ==
Install the {{Pkg|i3}} [[Pacman#Installing package groups|package group]] from the [[official repositories]], which includes: {{Pkg|i3-wm}}, the window manager; {{Pkg|i3status}}, a package to write a status line to i3bar through [[Wikipedia:Standard streams#Standard output (stdout)|stdout]]; and {{Pkg|i3lock}}, an improved screenlocker.
+
Install the {{Grp|i3}} [[Pacman#Installing package groups|package group]] from the [[official repositories]], which includes: {{Pkg|i3-wm}}, the window manager; {{Pkg|i3status}}, a package to write a status line to i3bar through [[Wikipedia:Standard streams#Standard output (stdout)|stdout]]; and {{Pkg|i3lock}}, an improved screenlocker.
  
Additional packages are available in the [[Arch User Repository]]. Install {{AUR|i3-git}} for the development version. Install {{AUR|i3-gnome}} to add a [[GNOME]]-session - an Xsession is included in {{Pkg|i3}}.
+
Additional packages are available in the [[Arch User Repository]]. Install {{AUR|i3-git}} for the development version.
 +
 
 +
Install {{AUR|i3-gnome}} to add [[GNOME]] and X-sessions with {{Grp|i3}} running as the window manager. An Xsession starting just the window manager is included in {{Grp|i3}}.
  
 
== Configuration ==
 
== Configuration ==
Line 20: Line 22:
 
If you want i3 to log its output (useful for debugging), add this line to {{ic|~/.xinitrc}}:
 
If you want i3 to log its output (useful for debugging), add this line to {{ic|~/.xinitrc}}:
 
  exec i3 -V >> ~/.i3/i3log 2>&1
 
  exec i3 -V >> ~/.i3/i3log 2>&1
If you use the Nvidia binary driver '''<302.17''' you need to add the --force-xinerama flag to {{ic|~/.xinitrc}}.  A detailed explanation can be found at [http://i3wm.org/docs/multi-monitor.html i3wm.org].
+
If you use the Nvidia binary driver '''<302.17''' you need to add the {{ic|--force-xinerama}} flag to {{ic|~/.xinitrc}}.  A detailed explanation can be found at [http://i3wm.org/docs/multi-monitor.html i3wm.org].
 
  exec i3 --force-xinerama
 
  exec i3 --force-xinerama
 +
If you have trouble with mapping keys (ie ; as semicolon), use {{Pkg|xorg-xev}} or see [[Extra Keyboard Keys]].
 +
$ xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
  
 
=== Status bar ===
 
=== Status bar ===
Line 52: Line 56:
  
 
For further information see the [http://i3wm.org/docs/userguide.html#_configuring_i3bar Configuring i3bar] section of the official User Guide.
 
For further information see the [http://i3wm.org/docs/userguide.html#_configuring_i3bar Configuring i3bar] section of the official User Guide.
 
==== Comparison of i3bar and dzen2 ====
 
This comparison of i3bar and dzen2 only takes into account how well the two programs can handle the input from conky or i3status.
 
{| border="1" cellpadding="5" align="center"
 
! Program !! Color Codes !! Formatting !! Special Fonts !! Dock !! Trayer
 
|-
 
| i3bar  || Yes    || No, right aligned || No (UTF8 only)|| Yes || Yes
 
|-
 
| dzen2  || Yes    || No, left aligned  || Yes || Yes (the svn version) || No
 
|-
 
|}
 
  
 
==== Alternatives to i3status ====
 
==== Alternatives to i3status ====
* [https://github.com/enkore/i3pystatus i3pystatus] - extensible i3status replacement with many modules and very flexible configuration. Multi-threaded and lock-up free.
+
* [https://github.com/HarveyHunt/i3situation i3situation] – a pure python 3 replacement with features provided by multithreaded plugins.
 +
* [https://github.com/enkore/i3pystatus i3pystatus] - extensible i3status replacement with many modules and very flexible configuration. Multi-threaded and lock-up free. (AUR: {{AUR|i3pystatus-git}})
 
* [https://github.com/ultrabug/py3status py3status] – an extensible i3status wrapper written in python
 
* [https://github.com/ultrabug/py3status py3status] – an extensible i3status wrapper written in python
 +
* [[dzen]] – often used with [[conky]] to create completely custom status bars
 +
* [http://j4status.j4tools.org/ j4status] - j4status provides a status line using several plugin to retrieve information from your computer. j4status is a part of the [http://www.j4tools.org/ j4tools] - tools set to use with i3.
 +
 +
==== Panel Alternatives to Status Bar ====
 +
Some users may prefer panels such as those provided by conventional [[Desktop_Environment|Desktop Environments]]. This can be achieved within i3 by launching the panel application of choice during startup.
 +
 +
For the [[Xfce#Panel|XFCE panel]], add the following line to {{ic|~/.i3/config}}:
 +
{{bc|exec --no-startup-id xfce4-panel}}
 +
{{Note|Panel features that are specific to the [[Desktop_Environment|Desktop Environment]] (e.g., widgets for managing workspaces and sessions) will not work, though the normal i3 functionality will be unaffected.}}
 +
Disabling i3bar is as simple as commenting out the {{ic|bar{ &#125;}} section of {{ic|~/.i3/config}}.
  
 
=== Quickly jumping to open window ===
 
=== Quickly jumping to open window ===
Line 73: Line 77:
 
* [https://github.com/ziberna/i3-py/tree/master/examples#winmenupy winmenupy] launches dmenu with a list of clients, sorted after workspaces. Selecting a client jumps to that window.
 
* [https://github.com/ziberna/i3-py/tree/master/examples#winmenupy winmenupy] launches dmenu with a list of clients, sorted after workspaces. Selecting a client jumps to that window.
  
== Suspending with i3lock ==
+
=== i3statusbar ===
You need to add unit file below and enable it with {{ic|# systemctl enable suspend@<user>.service}}.
+
  
{{hc|/etc/systemd/system/suspend@.service|2=<nowiki>
+
First we need to copy over the default configuration files that we will be working with to our home directory.
[Unit]
+
Description=Starts i3lock at suspend time
+
Before=sleep.target
+
  
[Service]
+
cp /etc/i3/config ~/.i3/config
User=%I
+
cp /etc/i3status.conf ~/.i3status.conf
Type=forking
+
Environment=DISPLAY=:0
+
ExecStartPre=
+
ExecStart=/usr/bin/i3lock
+
  
[Install]
+
==== Network Interface Status ====
WantedBy=sleep.target</nowiki>}}
+
 
 +
Now we can fix the status bar (i3status) at the bottom of the screen.  If you recently installed Arch Linux then you will be using the new systemd/udev [http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ Predictable Network Interface Naming scheme]. As a result we need to change the references for eth0 (ethernet) and wlan0 (wireless) to match your system. To view your available network interfaces use the command {{ic|ip link}}
 +
 
 +
Here is an example output of what you will see:
 +
 
 +
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
 +
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 +
2: enp6s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
 +
    link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
 +
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT qlen 1000
 +
    link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
 +
 
 +
From the example we can see that ethernet interface is labelled enp6s0 and the wireless interface is wlp3s0.  Your interface names may vary. Edit the file {{ic|~/.i3status.conf}}
 +
 
 +
Replace the lines:
 +
 
 +
order += "wireless wlan0"
 +
order += "ethernet eth0"
 +
wireless wlan0 {
 +
wireless eth0 {
 +
 
 +
To match your corresponding network interface names:
 +
 
 +
order += "wireless wlp3s0"
 +
order += "ethernet enp6s0"
 +
wireless wlp3s0 {
 +
ethernet enp6s0 {
 +
 
 +
{{Note|wlp3s0 and enp6s0 are only used as examples. Enter your own network interface names here.  If you are using eth0 and wlan0 then you do not need to change them.}}
 +
 
 +
==== Temperature Status ====
 +
 
 +
If you would like to add your CPU temperature to the i3status bar simply add these lines to {{ic|~/.i3status.conf}}
 +
 
 +
order += "cpu_temperature 0"
 +
cpu_temperature 0 {
 +
        format = "T: %degrees °C"
 +
    max_threshold = 65
 +
        path = "/sys/devices/platform/coretemp.0/temp1_input"
 +
}
 +
 
 +
If the temperature column complains that it cannot get the temperature value then change the path line to:
 +
 
 +
path = "/sys/class/thermal/thermal_zone0/temp"
 +
 
 +
=== Volume Manager ===
 +
 
 +
To enable easy management of your system volume, you can install a volume manager applet such as {{AUR|pa-applet-git}} from the [[AUR]].  This should also allow you to use your keyboards volume up, volume down, and mute keys as well as using the applet directly to manage your volume.  Once it is installed add the following line to your {{ic|~/.i3/config}} to auto start the applet:
 +
 
 +
exec /usr/bin/pa-applet
 +
 
 +
=== Network Manager ===
 +
 
 +
If you would like to use {{Pkg|network-manager-applet}} to manage your network connections, follow the instructions in [[NetworkManager]].
 +
 
 +
Then add the the following line to your {{ic|~/.i3/config}} to automatically start the Network Manager applet in your system tray
 +
 
 +
exec /usr/bin/nm-applet
 +
 
 +
=== Workspace Names ===
 +
 
 +
Although it is not required, many people prefer naming frequently used workspaces. First you need to determine which monitor you want the workspace to open to. Simply type {{ic|xrandr}} into a terminal and it will show you the available display ports. Some common ones are LVDS1 for laptops or VGA1, HDMI1, HDMI2, etc for external monitors. If you are using [[Multihead#Xinerama|Xinerama]] instead use the outputs xinerama-0, xinerama-1, etc.  Add your workspace names to {{ic|~/.i3/config}} You also need to modify the corresponding lines to switch to your workspaces as well as moving focused containers to those workspaces.
 +
 
 +
# Workspace names
 +
workspace "1:Web" output LVDS1
 +
workspace "2:Mail" output LVDS1
 +
workspace "3:Irc" output LVDS1
 +
workspace "4:Shell" output LVDS1
 +
 
 +
# switch to workspace
 +
bindsym $mod+1 workspace 1:Web
 +
bindsym $mod+2 workspace 2:Mail
 +
bindsym $mod+3 workspace 3:Irc
 +
bindsym $mod+4 workspace 4:Shell
 +
 
 +
# move focused container to workspace
 +
bindsym $mod+Shift+1 move container to workspace 1:Web
 +
bindsym $mod+Shift+2 move container to workspace 2:Mail
 +
bindsym $mod+Shift+3 move container to workspace 3:Irc
 +
bindsym $mod+Shift+4 move container to workspace 4:Shell
 +
 
 +
=== Launching programs on specific workspaces ===
 +
 
 +
To maximize efficiency you can setup certain programs to automatically launch to a specific workspace.  This can be accomplished one of two ways. You could use the {{ic|assign}} command so when you manually launch a program it is directed to a the workspace you assigned. An example would be:
 +
 
 +
# Assign URxvt terminals to workspace 2
 +
assign [class="URxvt"] 2
 +
 
 +
Or if you have renamed the workspaces like the above examples then you must set the new workspace name instead of the number:
 +
 
 +
# Assign URxvt terminals to workspace 4:Shell
 +
assign [class="URxvt"] 4:Shell
 +
 
 +
{{Note|To be able to determine the class, title, instance, etc of an open window you can use the tool {{ic|xprop}} by installing the package {{Pkg|xorg-xprop}} from the Extra repository.}}
 +
 
 +
Alternatively you can change to your target workspace with {{ic|i3-msg}} then have your frequently used programs start automatically with the {{ic|exec}} command:
 +
 
 +
exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
 +
exec --no-startup-id i3-msg 'workspace 2:Mail; exec urxvt -name Mail -e /usr/bin/mutt'
 +
exec --no-startup-id i3-msg 'workspace 3:Irc; exec /usr/bin/urxvt -name irssi -e /usr/bin/irssi'
 +
exec --no-startup-id i3-msg 'workspace 4:Shell; exec /usr/bin/urxvt'
 +
 
 +
=== Desktop Wallpaper ===
 +
 
 +
To be able to manage the desktop wallpaper, you need a lightweight image viewer like [[Feh]] or [[Nitrogen]].  Install feh with the command {{ic|# pacman -S feh}}. Then you can set your wallpaper with the following command:
 +
 
 +
$ feh --bg-scale /path/to/image.file
 +
 
 +
To have feh set your image to the Desktop Wallpaper add the following line to your {{ic|~/.i3/config}}
 +
 
 +
exec --no-startup-id sh ~/.fehbg
 +
 
 +
=== Terminal Emulator ===
 +
 
 +
By default when you press $mod+Return it launches the i3-sensible-terminal which is a script that invokes a terminal.  It attempts to start one of these terminals in the following order: $TERMINAL urxvt rxvt terminator Eterm aterm xterm gnome-terminal roxterm xfce4-terminal.  You can force it to launch your terminal of choice by modifying the line {{ic|bindsym $mod+Return exec i3-sensible-terminal}}
 +
 
 +
=== Scratchpad ===
 +
 
 +
Having a scratchpad to jot down or paste notes quickly is very handy!  i3 has a feature that allows you to move a window to a scratchpad workspace. Basically it will be hidden from view until you recall it with the {{ic|scratchpad show}} command. To send a focused window to the scratchpad with $mod+Shift+minus or to recall it with $mod+minus enter these lines into your {{ic|~/.i3/config}}
 +
 
 +
# Make the currently focused window a scratchpad
 +
bindsym $mod+Shift+minus move scratchpad
 +
 +
# Show the first scratchpad window
 +
bindsym $mod+minus scratchpad show
 +
 
 +
You can start your favorite editor (ie Gedit, vim, nano, etc) on startup and have it automatically moved to the scratchpad workspace to quickly recall it when needed. The following example when placed in {{ic|~/.i3/config}} shows how you can start the urxvt terminal, have it launch the nano editor, and then move it to the scratchpad:
 +
 
 +
# starting a specially named term automatically
 +
exec --no-startup-id urxvt -name scratchpad -e /usr/bin/nano
 +
# move this to scratchpad, if active
 +
for_window [class="URxvt" instance="scratchpad"] move scratchpad
 +
 
 +
=== Shutdown, Reboot, Lock Screen ===
 +
As there are no Shutdown, Reboot, or Lock Screen buttons, we can add some hotkey combinations to help us out.  First we need to create this script and save it as {{ic|i3exit}}.  Remember to make it executable with {{ic|chmod +x}} and to place it somewhere in your $PATH.
 +
 
 +
#!/bin/sh
 +
lock() {
 +
    i3lock
 +
}
 +
 +
case "$1" in
 +
    lock)
 +
        lock
 +
        ;;
 +
    logout)
 +
        i3-msg exit
 +
        ;;
 +
    suspend)
 +
        lock && systemctl suspend
 +
        ;;
 +
    hibernate)
 +
        lock && systemctl hibernate
 +
        ;;
 +
    reboot)
 +
        systemctl reboot
 +
        ;;
 +
    shutdown)
 +
        systemctl poweroff
 +
        ;;
 +
    *)
 +
        echo "Usage: $0 {lock|logout|suspend|hibernate|reboot|shutdown}"
 +
        exit 2
 +
esac
 +
 +
exit 0
 +
 
 +
Now add the following lines to your {{ic|~/.i3/config}} Once completed you will be presented with a prompt whenever you press $mod+pause.
 +
 
 +
set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown
 +
mode "$mode_system" {
 +
    bindsym l exec --no-startup-id i3exit lock, mode "default"
 +
    bindsym e exec --no-startup-id i3exit logout, mode "default"
 +
    bindsym s exec --no-startup-id i3exit suspend, mode "default"
 +
    bindsym h exec --no-startup-id i3exit hibernate, mode "default"
 +
    bindsym r exec --no-startup-id i3exit reboot, mode "default"
 +
    bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default" 
 +
 +
    # back to normal: Enter or Escape
 +
    bindsym Return mode "default"
 +
    bindsym Escape mode "default"
 +
}
 +
bindsym $mod+Pause mode "$mode_system"
 +
 
 +
=== Screensaver and Power Management ===
 +
 
 +
You can use [[Display_Power_Management_Signaling|DPMS]] to blank your screen or to suspend/poweroff your monitor. Adding the following line to your {{ic|~/.i3/config}} will suspend your monitor after 10 minutes.
 +
 
 +
exec --no-startup-id xset dpms 600
 +
 
 +
== Suspending with i3lock ==
 +
=== xss-lock (has also autolock) ===
 +
{{aur|xss-lock}} manages a screen locker for the current x-session. It reacts to suspend, hibernate, lock-session events and the [[Display Power Management Signaling#xset screen-saver control|X screensaver]]. You need to run it in your desktop autostart like this:
 +
 
 +
{{bc|xss-lock -- i3lock -i /path/to/background.image &}}
  
 
== Usage ==
 
== Usage ==
 
{{Box BLUE||See the [http://i3wm.org/docs official documentation] on this subject for more information: [http://i3wm.org/docs/userguide.html i3 User’s Guide]}}
 
{{Box BLUE||See the [http://i3wm.org/docs official documentation] on this subject for more information: [http://i3wm.org/docs/userguide.html i3 User’s Guide]}}
  
i3 currently uses [[dmenu]] as a application launcher, which is bound by default to {{Keypress|Mod1|background=#FF0}}+{{Keypress|d}}.
+
=== Application launcher ===
 +
 
 +
i3 currently uses [[dmenu]] as a application launcher, which is bound by default to {{ic|Mod1+d}}.
 +
 
 +
By default i3-dmenu-desktop is used as a wrapper for dmenu. i3-dmenu-desktop creates a list of all installed applications via their .desktop files. There is a rewrite of this perl script called {{AUR|j4-dmenu-desktop-git}}, which is a near-drop-in replacement for the script shipped with i3, but much faster.
  
 
=== Clipboard (copy & paste issues) ===
 
=== Clipboard (copy & paste issues) ===
Line 104: Line 298:
 
* [http://i3wm.org Official website]
 
* [http://i3wm.org Official website]
 
* [http://code.stapelberg.de/git/i3 Source code]
 
* [http://code.stapelberg.de/git/i3 Source code]
* [https://wiki.archlinux.org/index.php/Systemd#Suspend.2Fresume_service_files Suspend/resume service files]
 
 
* [https://github.com/ashinkarov/i3-extras Collection of scripts and patches]
 
* [https://github.com/ashinkarov/i3-extras Collection of scripts and patches]
 
'''Arch Linux Forums'''
 
'''Arch Linux Forums'''
 
* [https://bbs.archlinux.org/viewtopic.php?id=99064 ''The i3 thread''] - A general discussion about i3
 
* [https://bbs.archlinux.org/viewtopic.php?id=99064 ''The i3 thread''] - A general discussion about i3
* [https://bbs.archlinux.org/viewtopic.php?pid=1229978 ''i3 desktop screenshots and config sharing'']
+
* [https://bbs.archlinux.org/viewtopic.php?id=103369 ''i3 desktop screenshots and config sharing'']

Revision as of 18:51, 22 November 2013

i3 is a dynamic tiling window manager inspired by wmii that is primarily targeted at developers and advanced users.

Clients (windows) are organized in a tree data structure within containers. The tree branches via horizontal or vertical splits, and containers can also be set to tabbed or stacked layouts. Floating windows are available for corner cases that don't mix well with tiling, and remain on a separate layer above the tiled windows.

Installation

Install the i3 package group from the official repositories, which includes: i3-wm, the window manager; i3status, a package to write a status line to i3bar through stdout; and i3lock, an improved screenlocker.

Additional packages are available in the Arch User Repository. Install i3-gitAUR for the development version.

Install i3-gnomeAUR to add GNOME and X-sessions with i3 running as the window manager. An Xsession starting just the window manager is included in i3.

Configuration

Edit your ~/.xinitrc and add:

exec i3

If you want i3 to log its output (useful for debugging), add this line to ~/.xinitrc:

exec i3 -V >> ~/.i3/i3log 2>&1

If you use the Nvidia binary driver <302.17 you need to add the --force-xinerama flag to ~/.xinitrc. A detailed explanation can be found at i3wm.org.

exec i3 --force-xinerama

If you have trouble with mapping keys (ie ; as semicolon), use xorg-xev or see Extra Keyboard Keys.

$ xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

Status bar

The internal status bar, i3-wsbar, was deprecated and replaced by i3bar in i3 v4.0.

New method: i3bar

Unlike i3-wsbar, which requires dzen2, i3bar does not have any dependencies other than i3-wm. It can be used to view information generated by conky or i3status. For example (as of version 4.1):

~/.i3/config
bar {
    output            LVDS1
    status_command    i3status
    position          top
    mode              hide
    workspace_buttons yes
    tray_output       none
    
    font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1

    colors {
        background #000000
        statusline #ffffff

        focused_workspace  #ffffff #285577
        active_workspace   #ffffff #333333
        inactive_workspace #888888 #222222
        urgent_workspace   #ffffff #900000
    }
}

For further information see the Configuring i3bar section of the official User Guide.

Alternatives to i3status

  • i3situation – a pure python 3 replacement with features provided by multithreaded plugins.
  • i3pystatus - extensible i3status replacement with many modules and very flexible configuration. Multi-threaded and lock-up free. (AUR: i3pystatus-gitAUR)
  • py3status – an extensible i3status wrapper written in python
  • dzen – often used with conky to create completely custom status bars
  • j4status - j4status provides a status line using several plugin to retrieve information from your computer. j4status is a part of the j4tools - tools set to use with i3.

Panel Alternatives to Status Bar

Some users may prefer panels such as those provided by conventional Desktop Environments. This can be achieved within i3 by launching the panel application of choice during startup.

For the XFCE panel, add the following line to ~/.i3/config:

exec --no-startup-id xfce4-panel
Note: Panel features that are specific to the Desktop Environment (e.g., widgets for managing workspaces and sessions) will not work, though the normal i3 functionality will be unaffected.

Disabling i3bar is as simple as commenting out the bar{ } section of ~/.i3/config.

Quickly jumping to open window

  • quickswitch-for-i3 – A Python utility to quickly change to and locate windows in i3
  • i3-wm-scripts – search for and jump to windows with particular names matching regexp
  • winmenupy launches dmenu with a list of clients, sorted after workspaces. Selecting a client jumps to that window.

i3statusbar

First we need to copy over the default configuration files that we will be working with to our home directory.

cp /etc/i3/config ~/.i3/config
cp /etc/i3status.conf ~/.i3status.conf

Network Interface Status

Now we can fix the status bar (i3status) at the bottom of the screen. If you recently installed Arch Linux then you will be using the new systemd/udev Predictable Network Interface Naming scheme. As a result we need to change the references for eth0 (ethernet) and wlan0 (wireless) to match your system. To view your available network interfaces use the command ip link

Here is an example output of what you will see:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp6s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
   link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT qlen 1000
   link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff

From the example we can see that ethernet interface is labelled enp6s0 and the wireless interface is wlp3s0. Your interface names may vary. Edit the file ~/.i3status.conf

Replace the lines:

order += "wireless wlan0"
order += "ethernet eth0"
wireless wlan0 {
wireless eth0 {

To match your corresponding network interface names:

order += "wireless wlp3s0"
order += "ethernet enp6s0"
wireless wlp3s0 {
ethernet enp6s0 {
Note: wlp3s0 and enp6s0 are only used as examples. Enter your own network interface names here. If you are using eth0 and wlan0 then you do not need to change them.

Temperature Status

If you would like to add your CPU temperature to the i3status bar simply add these lines to ~/.i3status.conf

order += "cpu_temperature 0"
cpu_temperature 0 {
        format = "T: %degrees °C"
    max_threshold = 65
        path = "/sys/devices/platform/coretemp.0/temp1_input"
}

If the temperature column complains that it cannot get the temperature value then change the path line to:

path = "/sys/class/thermal/thermal_zone0/temp"

Volume Manager

To enable easy management of your system volume, you can install a volume manager applet such as pa-applet-gitAUR from the AUR. This should also allow you to use your keyboards volume up, volume down, and mute keys as well as using the applet directly to manage your volume. Once it is installed add the following line to your ~/.i3/config to auto start the applet:

exec /usr/bin/pa-applet

Network Manager

If you would like to use network-manager-applet to manage your network connections, follow the instructions in NetworkManager.

Then add the the following line to your ~/.i3/config to automatically start the Network Manager applet in your system tray

exec /usr/bin/nm-applet

Workspace Names

Although it is not required, many people prefer naming frequently used workspaces. First you need to determine which monitor you want the workspace to open to. Simply type xrandr into a terminal and it will show you the available display ports. Some common ones are LVDS1 for laptops or VGA1, HDMI1, HDMI2, etc for external monitors. If you are using Xinerama instead use the outputs xinerama-0, xinerama-1, etc. Add your workspace names to ~/.i3/config You also need to modify the corresponding lines to switch to your workspaces as well as moving focused containers to those workspaces.

# Workspace names
workspace "1:Web" output LVDS1
workspace "2:Mail" output LVDS1
workspace "3:Irc" output LVDS1
workspace "4:Shell" output LVDS1
# switch to workspace
bindsym $mod+1 workspace 1:Web
bindsym $mod+2 workspace 2:Mail
bindsym $mod+3 workspace 3:Irc
bindsym $mod+4 workspace 4:Shell
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace 1:Web
bindsym $mod+Shift+2 move container to workspace 2:Mail
bindsym $mod+Shift+3 move container to workspace 3:Irc
bindsym $mod+Shift+4 move container to workspace 4:Shell

Launching programs on specific workspaces

To maximize efficiency you can setup certain programs to automatically launch to a specific workspace. This can be accomplished one of two ways. You could use the assign command so when you manually launch a program it is directed to a the workspace you assigned. An example would be:

# Assign URxvt terminals to workspace 2
assign [class="URxvt"] 2

Or if you have renamed the workspaces like the above examples then you must set the new workspace name instead of the number:

# Assign URxvt terminals to workspace 4:Shell
assign [class="URxvt"] 4:Shell
Note: To be able to determine the class, title, instance, etc of an open window you can use the tool xprop by installing the package xorg-xprop from the Extra repository.

Alternatively you can change to your target workspace with i3-msg then have your frequently used programs start automatically with the exec command:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox' 
exec --no-startup-id i3-msg 'workspace 2:Mail; exec urxvt -name Mail -e /usr/bin/mutt'
exec --no-startup-id i3-msg 'workspace 3:Irc; exec /usr/bin/urxvt -name irssi -e /usr/bin/irssi'
exec --no-startup-id i3-msg 'workspace 4:Shell; exec /usr/bin/urxvt'

Desktop Wallpaper

To be able to manage the desktop wallpaper, you need a lightweight image viewer like Feh or Nitrogen. Install feh with the command # pacman -S feh. Then you can set your wallpaper with the following command:

$ feh --bg-scale /path/to/image.file

To have feh set your image to the Desktop Wallpaper add the following line to your ~/.i3/config

exec --no-startup-id sh ~/.fehbg

Terminal Emulator

By default when you press $mod+Return it launches the i3-sensible-terminal which is a script that invokes a terminal. It attempts to start one of these terminals in the following order: $TERMINAL urxvt rxvt terminator Eterm aterm xterm gnome-terminal roxterm xfce4-terminal. You can force it to launch your terminal of choice by modifying the line bindsym $mod+Return exec i3-sensible-terminal

Scratchpad

Having a scratchpad to jot down or paste notes quickly is very handy! i3 has a feature that allows you to move a window to a scratchpad workspace. Basically it will be hidden from view until you recall it with the scratchpad show command. To send a focused window to the scratchpad with $mod+Shift+minus or to recall it with $mod+minus enter these lines into your ~/.i3/config

# Make the currently focused window a scratchpad
bindsym $mod+Shift+minus move scratchpad

# Show the first scratchpad window
bindsym $mod+minus scratchpad show

You can start your favorite editor (ie Gedit, vim, nano, etc) on startup and have it automatically moved to the scratchpad workspace to quickly recall it when needed. The following example when placed in ~/.i3/config shows how you can start the urxvt terminal, have it launch the nano editor, and then move it to the scratchpad:

# starting a specially named term automatically 
exec --no-startup-id urxvt -name scratchpad -e /usr/bin/nano
# move this to scratchpad, if active
for_window [class="URxvt" instance="scratchpad"] move scratchpad

Shutdown, Reboot, Lock Screen

As there are no Shutdown, Reboot, or Lock Screen buttons, we can add some hotkey combinations to help us out. First we need to create this script and save it as i3exit. Remember to make it executable with chmod +x and to place it somewhere in your $PATH.

#!/bin/sh
lock() {
    i3lock
}

case "$1" in
    lock)
        lock
        ;;
    logout)
        i3-msg exit
        ;;
    suspend)
        lock && systemctl suspend
        ;;
    hibernate)
        lock && systemctl hibernate
        ;;
    reboot)
        systemctl reboot
        ;;
    shutdown)
        systemctl poweroff
        ;;
    *)
        echo "Usage: $0 {lock|logout|suspend|hibernate|reboot|shutdown}"
        exit 2
esac

exit 0

Now add the following lines to your ~/.i3/config Once completed you will be presented with a prompt whenever you press $mod+pause.

set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown
mode "$mode_system" {
    bindsym l exec --no-startup-id i3exit lock, mode "default"
    bindsym e exec --no-startup-id i3exit logout, mode "default"
    bindsym s exec --no-startup-id i3exit suspend, mode "default"
    bindsym h exec --no-startup-id i3exit hibernate, mode "default"
    bindsym r exec --no-startup-id i3exit reboot, mode "default"
    bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"  

    # back to normal: Enter or Escape
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+Pause mode "$mode_system"

Screensaver and Power Management

You can use DPMS to blank your screen or to suspend/poweroff your monitor. Adding the following line to your ~/.i3/config will suspend your monitor after 10 minutes.

exec --no-startup-id xset dpms 600

Suspending with i3lock

xss-lock (has also autolock)

xss-lockAUR manages a screen locker for the current x-session. It reacts to suspend, hibernate, lock-session events and the X screensaver. You need to run it in your desktop autostart like this:

xss-lock -- i3lock -i /path/to/background.image &

Usage

See the official documentation on this subject for more information: i3 User’s Guide

Application launcher

i3 currently uses dmenu as a application launcher, which is bound by default to Mod1+d.

By default i3-dmenu-desktop is used as a wrapper for dmenu. i3-dmenu-desktop creates a list of all installed applications via their .desktop files. There is a rewrite of this perl script called j4-dmenu-desktop-gitAUR, which is a near-drop-in replacement for the script shipped with i3, but much faster.

Clipboard (copy & paste issues)

By default, when you close a window, the buffer with the clipboard info will disappear. You have to use a clipboard manager like clipit to avoid that.

See also

Arch Linux Forums