I’m toying with a new Window Manager named i3. It’s unusual, and only runs on X11.
NOTE: There is a Wayland version of i3 named Sway.
Setup
sudo apt install i3
Now logout and select i3
as the Window Manager.
Hotkeys
The MOD
key is a key you configure after initial setup. Typically this is either the WINDOWS key or the ALT key.
MOD+Enter
: Open TerminalMOD+D
: Open DMenu, i.e. the application launcherMOD+1
toMOD+0
: Switch WorkspaceMOD+Shift+r
: Reload i3 configurationMOD+F
: Fullscreen the active windowMOD+Shift+Space
: Float the active window
Configuring
The configuration file is here ~/.config/i3/config
.
To list the available MOD
keys, use xmodmap
.
To lookup an application’s class, use xprop
and click on the application.
Adding ALT+F4, ALT+Tab
# Alt+F4
bindsym Mod1+F4 kill
# Alt+Tab and Alt+Shift+Tab
bindsym Mod1+Tab focus right
bindsym Mod1+Shift+Tab focus left
Adding Screenshot keys
# NOTE: Alt+Print is actually Mod1+Sys_Req
# gnome-screenshot
bindsym Print exec gnome-screenshot
bindsym --release Shift+Print exec gnome-screenshot -a
bindsym Mod1+Sys_Req exec gnome-screenshot -w
# xfce4-screenshooter
bindsym Print exec xfce4-screenshooter -f
bindsym --release Shift+Print exec xfce4-screenshooter -r
bindsym Mod1+Sys_Req exec xfce4-screenshooter -w
One might want to use xfce4-screenshooter
as gnome-screenshot
may lose the save-as dialog (I did in Ubuntu 17.10). Hopefully it returns in 18.04.
Adding Media Keys
# Media player controls
bindsym --release XF86AudioPlay exec playerctl play-pause
bindsym --release XF86AudioNext exec playerctl next
bindsym --release XF86AudioPrev exec playerctl previous
#bindsym --release XF86AudioPlay exec playerctl play
#bindsym --release XF86AudioPause exec playerctl pause
My laptop has a single key (Play) that should be treated as a toggle.
Adding Icons (via fonts)
sudo apt install fonts-font-awesome
See the Cheat Sheet for unicode values.
Disable Edge Borders
Edge Borders are a line along the left or bottom edge of a window that show which way new creates will go. It’s helpful, but it wastes pixels.
hide_edge_borders both
Assigning Applications to Workspaces
# Edit, Terminal, Chrome, Firefox, .., Streaming, Media, Chat
set $ws1 "1: "
set $ws2 "2: "
set $ws3 "3: "
set $ws4 "4: "
set $ws8 "8: "
set $ws9 "9: "
set $ws10 "10: "
# switch to workspace
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace $ws8
bindsym $mod+9 workspace $ws9
bindsym $mod+0 workspace $ws10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace $ws8
bindsym $mod+Shift+9 move container to workspace $ws9
bindsym $mod+Shift+0 move container to workspace $ws10
# Assignments
assign [class="Uex"] $ws1
assign [class="krita"] $ws1
assign [class="Inkscape"] $ws1
assign [class="Blender"] $ws1
assign [class="Gnome-terminal"] $ws2
assign [class="Google-chrome"] $ws3
assign [class="Firefox"] $ws4
assign [class="obs"] $ws8
assign [class="vlc"] $ws9
for_window [title="Google Hangouts" window_role="pop-up"] move container to workspace $ws10
for_window [title="^Gitter$"] move container to workspace $ws10
assign [class="Slack"] $ws10
Customizing the Bar with i3Blocks
sudo apt install i3blocks
# copy sample configuration
cp /etc/i3blocks.conf ~/.config/i3/
Change ~/.config/i3/config
's bar section from i3status
to i3blocks
.
bar {
status_command i3blocks -c ~/.config/i3/i3blocks.conf
}
Now you can edit ~/.config/i3/i3blocks.conf
to change what’s shown.
Audio Volume
To install:
cd ~/.config/i3/plugins/
curl https://raw.githubusercontent.com/vivien/i3blocks-contrib/master/volume-pulseaudio/volume-pulseaudio >volume-pulseaudio
chmod +x volume-pulseaudio
Edit i3blocks.conf
:
[volume]
signal=1
interval=once
command=~/.config/i3/plugins/volume-pulseaudio -F 3
Edit conf
:
# change volume or toggle mute
bindsym XF86AudioRaiseVolume exec amixer -q -D pulse sset Master 5%+ && pkill -RTMIN+1 i3blocks
bindsym XF86AudioLowerVolume exec amixer -q -D pulse sset Master 5%- && pkill -RTMIN+1 i3blocks
bindsym XF86AudioMute exec amixer -q -D pulse sset Master toggle && pkill -RTMIN+1 i3blocks
When i3blocks gets a Signal 1
(-RTMIN+1
), it triggers a refresh of i3blocks.
WiFi Status
Edit i3blocks.conf
:
[wifi]
label=
markup=pango
interval=2
pango
stops the unicode symbol from inserting garbage after it.
CPU Usage
Edit i3blocks.conf
:
[cpu_usage]
label=CPU
interval=2
#min_width=CPU:·100.00%
#separator=false
I don’t like excess space, so I’ve disabled min_width
. Also I don’t like how much gaps separators add, but included above for reference.
CPU Temperature
To Install:
cd ~/.config/i3/plugins/
curl https://raw.githubusercontent.com/vivien/i3blocks-contrib/master/temperature/temperature >temperature
chmod +x temperature
Edit i3blocks.conf
:
[cpu_temp]
interval=5
command=~/.config/i3/plugins/temperature
System Load
Edit i3blocks.conf
:
[load_average]
label=
markup=pango
interval=3
Battery Meter
To Install:
cd ~/.config/i3/plugins/
curl https://raw.githubusercontent.com/vivien/i3blocks-contrib/master/battery2/battery2 >battery2
chmod +x battery2
Edit i3blocks.conf
:
[battery]
markup=pango
interval=3
command=~/.config/i3/plugins/battery2
Date+Time
Edit i3blocks.conf
:
[time]
interval=1
command=date·'+%A·%b·%d,·%r'
Hardware
/sys/class/power_supply/
: AC Power (AC
) and Batteries (BAT0
, …)