Inhaltsverzeichnis

Den letzten (2013) Workshop zu i3 habe ich (Gereon) gehalten. Hier habe ich meine Konfiguration von i3 verewigt, zum einen um eine Idee zu geben was man da alles machen kann, zum anderen um ein paar Ideen für Erweiterungen zu zeigen.

Config

Diese config unter ~/.i3/config ablegen. Besonderheiten gegenüber der Standard-Config:

Eine Warnung vorweg: Ein paar Sachen funktionieren vielleicht nicht sofort mit den Standard-Paketen, insbesondere der andere Programm-Launcher i3-dmenu-desktop ist erst ab Version 4.4 dabei.

# i3 config file (v4)

# default modifier
set $mod Mod4
# second modifier
set $mod2 Mod1

# font for window titles. ISO 10646 = Unicode
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1

# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod

##########
# coloring				border	backgr	text indicator
client.focused			#333333 #333333 #aaaaaa #333333
client.focused_inactive	#111111 #111111 #aaaaaa #111111
client.unfocused		#111111 #111111 #999999 #111111
client.urgent			#aa2222 #aa2222 #000000 #aa2222

# background
exec xsetroot -solid "#000000"

# start a terminal
bindsym $mod+Return exec uxterm

# kill focused window
bindsym $mod+Shift+Q kill

##########
# program & action menu

set $dmenuopts -i -nb "#000000" -nf "#999999" -sb "#999999" -sf "#111111"
#bindsym $mod+d exec dmenu_run $dmenuopts
bindsym $mod+d exec i3-dmenu-desktop --dmenu="dmenu $dmenuopts"
bindsym $mod+a exec ~/.i3/actions/`ls ~/.i3/actions/ | dmenu $dmenuopts`

##########
# some custom key bindings
bindsym Print exec ~/.i3/actions/screenshot
bindsym XF86ScreenSaver exec ~/.i3/actions/lock
#bindsym XF86WakeUp+XF86Switch_VT_12 exec ~/.i3/actions/hibernate
bindsym XF86Launch1 exec todo

bindsym XF86AudioMute exec amixer sset Master toggle
bindsym XF86AudioLowerVolume exec amixer sset Master "2%-"
bindsym XF86AudioRaiseVolume exec amixer sset Master "2%+"

##########
# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+odiaeresis focus right

# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

##########
# move focused window
bindsym $mod+Shift+J move left
bindsym $mod+Shift+K move down
bindsym $mod+Shift+L move up
bindsym $mod+Shift+Odiaeresis move right

# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

##########
# split in horizontal orientation
bindsym $mod+h split h

# split in vertical orientation
bindsym $mod+v split v

# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen

# change container layout (stacked, tabbed, default)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout default

# toggle tiling / floating
bindsym $mod+Shift+space floating toggle

# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle

# focus the parent container
#bindsym $mod+a focus parent

# focus the child container
#bindcode $mod+d focus child

##########
# workspaces

# switch to last used workspace
workspace_auto_back_and_forth yes

bindsym $mod+Tab workspace back_and_forth
bindsym $mod2+Tab workspace next

bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10

# move focused container to workspace
bindsym $mod+Shift+1 move workspace 1
bindsym $mod+Shift+2 move workspace 2
bindsym $mod+Shift+3 move workspace 3
bindsym $mod+Shift+4 move workspace 4
bindsym $mod+Shift+5 move workspace 5
bindsym $mod+Shift+6 move workspace 6
bindsym $mod+Shift+7 move workspace 7
bindsym $mod+Shift+8 move workspace 8
bindsym $mod+Shift+9 move workspace 9
bindsym $mod+Shift+0 move workspace 10

# resize window (you can also use the mouse for that)
mode "resize"
{

	bindsym j resize shrink left 10 px or 10 ppt
	bindsym Shift+J resize grow   left 10 px or 10 ppt

	bindsym k resize shrink down 10 px or 10 ppt
	bindsym Shift+K resize grow   down 10 px or 10 ppt

	bindsym l resize shrink up 10 px or 10 ppt
	bindsym Shift+L resize grow   up 10 px or 10 ppt

	bindsym odiaeresis resize shrink right 10 px or 10 ppt
	bindsym Shift+Odiaeresis resize grow   right 10 px or 10 ppt

	# same bindings, but for the arrow keys
	bindsym Left resize shrink left 10 px or 10 ppt
	bindsym Shift+Left resize grow   left 10 px or 10 ppt

	bindsym Down resize shrink down 10 px or 10 ppt
	bindsym Shift+Down resize grow   down 10 px or 10 ppt

	bindsym Up resize shrink up 10 px or 10 ppt
	bindsym Shift+Up resize grow   up 10 px or 10 ppt

	bindsym Right resize shrink right 10 px or 10 ppt
	bindsym Shift+Right resize grow   right 10 px or 10 ppt

	# back to normal: Enter or Escape
	bindsym Return mode "default"
	bindsym Escape mode "default"
}

bindsym $mod+r mode "resize"

##########
# status bar
bar 
{
	# show tray on laptop
	tray_output primary
	
	# customized i3status	
	#status_command ~/.i3/i3status -c ~/.i3/i3status.conf
	
	# official i3status
	status_command i3status -c ~/.i3/i3status.conf
	
	font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1

	colors
	{
		background #000000
		statusline #aaaaaa
		
		# class				border	backgr	text
		focused_workspace	#999999	#999999	#000000
		active_workspace	#aaaaaa #aaaaaa #111111
		inactive_workspace	#222222	#222222	#999999
		urgent_workspace	#aa2222	#aa2222	#000000
	}
}

##########
# organize...

# Pidgin & Thunderbird -> Workspace 1
assign [class="^Pidgin$" window_role="^buddy_list$"] 1
assign [class="^Pidgin$" window_role="^preferences$"] 1
assign [class="^Thunderbird$"] 1

# Pidgin Conversations -> Workspace 2
assign [class="^Pidgin$" window_role="^conversation$"] 2

# Browser -> Workspace 3
assign [class="^Opera$"] 3
assign [class="^Firefox$" instance="^Navigator$"] 3
assign [class="^Chromium-browser$" window_role="^browser$"] 3

# RSS Reader -> Workspace 9
assign [class="^Liferea$"] 9

for_window [class="^Key-mon$"] floating enable

##########
# autostart
#exec nm-applet
#exec liferea

Config für Status bar

Die Statusbar wird in ~/.i3/i3status.conf konfiguriert. Hier meine Config:

general {
	colors = true
	color_good = "#00FF00"
	color_degraded = "#FFFF00"
	color_bad = "#FF0000"
	
	interval = 5
	output_format = i3bar
}

order += "disk /"
order += "wireless wlan0"
order += "ethernet eth0"
order += "ethernet usb0"
order += "battery 0"
order += "cpu_temperature 0"
order += "volume master"
order += "time"

wireless wlan0 {
	format_up = " %essid (%ip, %quality) "
	format_down = " wlan0 "
}

ethernet eth0 {
	# if you use %speed, i3status requires root privileges
	format_up = " %ip (%speed) "
	format_down = " eth0 "
}

ethernet usb0 {
	# if you use %speed, i3status requires root privileges
	format_up = " usb0 up "
	format_down = " usb0 "
}

battery 0 {
	last_full_capacity = true
	format = " %status %percentage %remaining "
	low_threshold = 15
	threshold_type = "percentage"
}

run_watch DHCP {
	pidfile = "/var/run/dhclient*.pid"
}

run_watch VPN {
	pidfile = "/var/run/vpnc/pid"
}

time {
	format = " %a %d.%m.%Y %T"
}

load {
	format = "%1min"
}

# processor temperature
cpu_temperature 0 {
	format = " %degrees °C "
	path = "/sys/devices/platform/coretemp.0/temp1_input"
}
# system temperature
cpu_temperature 1 {
	format = " %degrees °C "
	path = "/sys/devices/virtual/thermal/thermal_zone0/temp"
}

disk "/" {
	format = "/ %percentage_used "
}

volume master {
	format = " vol %volume "
	device = "default"
	mixer = "Master"
	mixer_idx = 0
}

Skripte unter .i3/actions/

Die Skripte enthalten Befehle, die ich oft benutze. Einige davon benötigen root-Rechte. Meine Lösung für den Fall ist, dass ich meinem Account erlaube diese Befehle mit sudo ausführen darf ohne ein Passwort einzugeben. Das sieht für user user und den Befehl command dann in der /etc/sudoers so aus:

user ALL = NOPASSWD:command

Wichtig: der command muss mit vollständigen Pfad angegeben werden, also beispielsweise /sbin/shutdown statt shutdown. Diesen Pfad findet man im Zweifel mit whereis (oder which).

Ein paar Beispiele, was ich alles als actions habe:

Suspend-to-disk: hibernate

#!/bin/sh
i3lock -c "#000000" && sudo pm-hibernate

Bildschirm sperren: lock

#!/bin/sh
i3lock -c "#000000"

Ausloggen: quit

#!/bin/sh
i3-msg "exit"

Neustarten: reboot

#!/bin/sh
sudo shutdown -r now

i3 Config neu laden (Session inklusive aller Fenster bleibt erhalten, Statusbar bleibt wie sie ist): reload

#!/bin/sh
i3-msg "reload"

i3 neu starten (Session inklusive aller Fenster bleibt erhalten, Statusbar wird neugestartet): restart

#!/bin/sh
i3-msg "restart"

Bildschirm auf VGA spiegeln: vgamirror

#!/bin/sh

xrandr –output VGA1 –auto –same-as LVDS