Mi configuración de i3wm

13 minutos de lectura

Introducción

En este otro articulo expliqué como instalar i3-gaps en Arch Linux, como gestor de ventanas, en este articulo voy realizar una pequeña explicación mi fichero de configuración de i3-gaps, prácticamente se puede utilizar igualmente como fichero de configuración para i3wm, salvo la parte que he marcado para i3-gaps

Recordarte que i3-gaps es un fork de i3wm pero con algunos extras como por ejemplo el espaciado entre ventanas.

Definiciones de Teclas

Antes de empezar, esta es la descripción que he hecho para el teclado

 1
 2- $Mod = tecla WINDOWS
 3
 4- Mod1 = tecla ALT
 5
 6- Control = tecla CTRL
 7
 8- Shift = tecla SHIFT
 9
10- Escape = tecla ESCAPE
11
12- Return = tecla ENTER
13
14- KP_Enter = Tecla Enter teclado numerico
15
16- Pause = tecla PAUSE
17
18- Print = tecla PRINT
19
20- Tab = tecla TAB

Asignación de la tecla Windows para la variable $mod

1set $mod Mod4

Variables para las teclas de movimiento

1
2set $up l
3set $down k
4set $left j
5set $right semicolon

Pantalla

Cambiar de espacio de trabajo (escritorio virtual)

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

Mover la ventana que tiene el foco (activa) a otro espacio de trabajo

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

3 Menús

  • Iniciar dmenu

    1bindsym $mod+d exec --no-startup-id dmenu_run
    
  • Lanzar aplicaciones mediante gmrun

    1bindsym mod1+F2 exec --no-startup-id gmrun
    
  • Iniciar rofi a pantalla completa

    1
    2bindsym $mod+F11 exec --no-startup-id rofi -show run -fullscreen -font "Noto Sans 13"
    
  • Iniciar/ rofi/ en una ventana pequeña con iconos

    1bindsym $mod+F12 exec --no-startup-id rofi -modi run -show drun -show-icons -font "Noto Sans 13"
    

Utilizar la combinación de teclas TAB + q para abrir rofi en una ventana con las aplicaciones que se están ejecutando

1bindsym $mod+q exec rofi -show window -show-icons

Como salir, logoff, suspender…..

Para bloquear la sesión de trabajo llamo al script i3lock.sh, el cual realiza una captura de pantalla y aplica un filtro de desenfoque mediante imagemagick

Para el resto de opciones (suspender, apagar, hibernar y salir de la sesión) utilizo otro script llamado i3exit.sh

1bindsym $mod+Shift+e exec --no-startup-id "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"

Al pulsar $mod (tecla windows) + x ejecuta el script i3exit.sh y muestra el la barra de estado varias opciones para bloquear o salir de la sesión, suspender, hibernar, reiniciar o apagar el equipo

 1
 2bindsym $mod+X mode "$mode_system"
 3bindsym control+mod1+Delete mode "$mode_system"
 4
 5set $mode_system System (k) lock, (l) logout, (u) suspend, (h) hibernate, (r) reboot, (s) shutdown
 6mode "$mode_system" {
 7    bindsym k exec --no-startup-id ~/.config/i3/scripts/i3lock.sh lock, mode "default"
 8    bindsym l exec --no-startup-id ~/.config/i3/scripts/i3exit.sh logout, mode "default"
 9    bindsym u exec --no-startup-id ~/.config/i3/scripts/i3exit.sh suspend, mode "default"
10    bindsym h exec --no-startup-id ~/.config/i3/scripts/i3exit.sh hibernate, mode "default"
11    bindsym r exec --no-startup-id ~/.config/i3/scripts/i3exit.sh reboot, mode "default"
12    bindsym s exec --no-startup-id ~/.config/i3/scripts/i3exit.sh shutdown, mode "default"
13
14    # back to normal: Enter or Escape
15    bindsym Return mode "default"
16    bindsym Escape mode "default"
17}

Volver a cargar la configuración

Si hemos modificado el archivo de configuración de i3, no es necesario salir de la sesión o reiniciar el equipo, podemos volver a cargar la configuración con una combinación de teclas

1bindsym $mod+Shift+c reload

Reiniciar manteniendo estado de la sesión

Podemos usar esta opción para actualizar i3 por ejemplo

1bindsym $mod+Shift+r restart

Parar una aplicación

Podemos “matar” la aplicación que tiene el foco (activa)

1bindsym $mod+Shift+q kill

Movimiento alrededor de i3

Uso el ratón+$mod para arrastrar una ventana flotante a otra posición

1floating_modifier $mod

Cambia el modo de presentacion de las ventanas ente mosaico / flotante

1bindsym $mod+Shift+space floating toggle

Cambiar el foco entre ventanas

1
2bindsym $mod+$left focus left
3bindsym $mod+$down focus down
4bindsym $mod+$up focus up
5bindsym $mod+$right focus right

Alternativamente podemos usar las teclas del cursor

1
2bindsym $mod+Left focus left
3bindsym $mod+Down focus down
4bindsym $mod+Up focus up
5bindsym $mod+Right focus right

Mover la ventana que tiene el foco

1
2bindsym $mod+Shift+$left move left
3bindsym $mod+Shift+$down move down
4bindsym $mod+Shift+$up move up
5bindsym $mod+Shift+$right move right

Alternativamente podemos usar las teclas del cursor

1
2bindsym $mod+Shift+Left move left
3bindsym $mod+Shift+Down move down
4bindsym $mod+Shift+Up move up
5bindsym $mod+Shift+Right move right

Movimiento por los espacios de trabajo

Próximo / previo espacio de trabajo

1bindsym Mod1+Tab workspace next
2bindsym Mod1+Shift+Tab workspace prev
3bindsym $mod+Tab workspace back_and_forth

Navegar al siguiente / previo espacio de trabajo

1bindsym Mod1+Ctrl+Right workspace next
2bindsym Mod1+Ctrl+Left workspace prev

Parámetros de configuración tiling (Mosaico)

Orientación de las ventanas para nuevos espacios de trabajo

1default_orientation horizontal

Ventanas horizontalmente

1bindsym $mod+h split h

Ventanas verticalmente

1bindsym $mod+v split v

Ventana que tiene el foco a pantalla completa

1bindsym $mod+f fullscreen toggle

Cambiar la forma de mostrar las ventanas (apiladas, tabulador, suelta)

1
2bindsym $mod+s layout stacking
3bindsym $mod+z layout tabbed
4bindsym $mod+e layout toggle split

Cambiar el foco entre ventanas apiladas o flotante

1bindsym $mod+space focus mode_toggle

Contenedor padre coge el foco

1bindsym $mod+a focus parent

Contenedor hijo coge el foco

1#bindsym $mod+d focus child

Cambio de tamaño de la ventana

También podemos utilizar el ratón

 1
 2bindsym $mod+r mode "resize"
 3
 4mode "resize" {
 5        # These bindings trigger as soon as you enter the resize mode
 6
 7        # Pressing left will shrink the window’s width.
 8        # Pressing right will grow the window’s width.
 9        # Pressing up will shrink the window’s height.
10        # Pressing down will grow the window’s height.
11        bindsym $left       resize shrink width 10 px or 10 ppt
12        bindsym $down       resize grow height 10 px or 10 ppt
13        bindsym $up         resize shrink height 10 px or 10 ppt
14        bindsym $right      resize grow width 10 px or 10 ppt
15
16        # same bindings, but for the arrow keys
17        bindsym Left        resize shrink width 10 px or 10 ppt
18        bindsym Down        resize grow height 10 px or 10 ppt
19        bindsym Up          resize shrink height 10 px or 10 ppt
20        bindsym Right       resize grow width 10 px or 10 ppt
21
22        # back to normal: Enter or Escape
23        bindsym Return mode "default"
24        bindsym Escape mode "default"
25}

Fuentes

Fuente para el tamaño de los títulos de las ventanas. También se usará esta fuente para la barra a menos que utilicemos un fuente diferente cuando la configuremos

1font pango:Noto Mono Regular 8

Asignando espacios de trabajo a las aplicaciones

Pomo demos elegir que una aplic0acción se ejecute en un espacio de trabajo determinado, podemos averiguar su clase (class) con el comando xprop para la configuración

 1# Workspace 1 text editor related and meld
 2assign [class="Emacs|Meld|Mousepad"]                               → 1
 3
 4# Workspace 2 browser related
 5assign [class="Firefox|Chromium"]                                  → 2
 6
 7# Workspace 3 file managers
 8assign [class="Pcmanfm"]                                           → 3
 9
10# Workspace 4 Telegram
11assign [class="TelegramDesktop"]                                   → 4
12
13# Workspace 5 Images
14assign [class="Gpicview|Nitrogen"]                                 → 5
15
16# Workspace 6 all video related software
17assign [class="Vlc|vlc"]                                           → 6
18
19# Workspace 7 Gestor de Paquetes
20assign [class="pamac-manager|Pamac-Manager"]                       → 7
21
22# Workspace 9 email clients
23#assign [class="Geary|Evolution"]                                  → 9
24
25# Workspace 10 music related
26assign [class="Spotify|spotify"]                                   → 10
27# fix for spotify not moving to workspace 10
28for_window [class="Spotify"] move to workspace 10

Arrancar aplicaciones al iniciar sesión

También podemos seleccionar que aplicaciones se inicien cuando iniciamos nuestra sesión

 1
 2# Navegador
 3exec --no-startup-id firefox
 4for_window [class="Firefox"] focus
 5
 6# Editores de texto
 7exec --no-startup-id emacs
 8#exec --no-startup-id atom
 9
10# Social
11exec --no-startup-id telegram-desktop

Si instalamos xautolock podemos configurar para que pasado un tiempo sin actividad en el ordenador la pantalla se bloquee, mira la sección logout para entender el script i3lock,sh

1#xautolock
2exec --no-startup-id xautolock -time 10 -locker "~/.config/i3/scripts/i3lock.sh"

Aplicaciones que se inician en la barra

Al igual que en el apartado anterior, también podemos iniciar aplicaciones en la barra, evidentemente tendremos que tener estas aplicaciones instaladas en el sistema

 1
 2# Authentication dialog
 3exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
 4
 5# Updater
 6exec --no-startup-id pamac-tray
 7
 8# bluetooth
 9exec --no-startup-id blueberry-tray
10
11# network
12exec --no-startup-id nm-applet
13
14# num lock activated
15exec_always --no-startup-id numlockx on
16
17# nitrogen
18exec --no-startup-id "nitrogen --restore"

Combinación de teclas para iniciar aplicaciones

 1
 2# Aplicaciones que no tienen un espacio de trabajo asignado
 3
 4# terminal
 5bindsym $mod+Return exec --no-startup-id termite;focus
 6bindsym $mod+KP_Enter exec --no-startup-id termite;focus
 7
 8# keepassxc
 9bindsym control+$mod+k exec --no-startup-id keepassxc;focus
10
11# catfish
12bindsym control+$mod+c exec --no-startup-id catfish;focus
13
14# pamac-manager
15bindsym control+$mod+p exec --no-startup-id pamac-manager
16
17#xkill
18bindsym --release $mod+Escape exec xkill
19
20
21# Aplicaciones con un espacio de trabajo asignado
22
23# workspace 1 related
24bindsym $mod+F1 exec --no-startup-id emacs;focus
25
26# workspace 2 related
27bindsym $mod+F2 exec --no-startup-id firefox;focus
28
29# qwerty/azerty conflict with w
30bindsym control+$mod+g exec --no-startup-id chromium;focus
31
32# workspace 3 related
33bindsym $mod+F3 exec --no-startup-id pcmanfm;focus
34
35# workspace 4 related
36bindsym $mod+F5 exec --no-startup-id meld;focus
37bindsym control+mod1+i exec --no-startup-id nitrogen;focus
38
39# workspace 5 related
40bindsym $mod+F4 exec --no-startup-id gimp;focus
41
42# workspace 6 related
43bindsym $mod+F6 exec --no-startup-id vlc;focus
44
45# workspace 10 related
46bindsym $mod+F10 exec --no-startup-id spotify;focus
47bindsym control+mod1+s exec --no-startup-id spotify;focus

Captura de pantalla

Personalmente me gusta mucho flameshot, aunque tu puedes usar el que mas te agrade.

1
2bindsym Print exec --no-startup-id flameshot full -p ~/imagenes/capturas
3bindsym Control+Print exec --no-startup-id flameshot gui

Ventana en mosaico o flotante

Podemos elegir si la ventana de una determianda aplicacion se inicia en modo flotante o en mosaico, podemos averiguar su clase con el programa xprop

 1
 2for_window [class="Blueberry.py"] floating enable
 3for_window [class="mate-calculator"] floating enable
 4for_window [class="^Gpick$"] floating enable
 5for_window [class="Imagewriter"] floating enable
 6for_window [class="Font-manager"] floating enable
 7for_window [class="qt5ct|Lxappearance"] floating enable
 8for_window [class="Nitrogen"] floating enable
 9for_window [class="Pavucontrol"] floating enable
10for_window [class="^Spotify$"] floating enable
11for_window [class="System-config-printer.py"] floating enable
12for_window [class="etcher-electron"] floating enable
13for_window [class="^Vlc$"] floating enable
14for_window [class="TelegramDesktop"] floating enable
15
16#for_window [instance="gimp"] floating disable
17for_window [instance="script-fu"] border normal
18
19for_window [title="Copying"] floating enable
20for_window [title="Deleting"] floating enable
21for_window [title="Moving"] floating enable
22for_window [title="^Terminator Preferences$"] floating enable
23
24
25#for_window [window_role="^gimp-toolbox-color-dialog$"] floating enable
26for_window [window_role="pop-up"] floating enable
27for_window [window_role="^Preferences$"] floating enable
28for_window [window_role="setup"] floating enable

Dar el foco a las aplicaciones (ventana activa)

Podemos elegir que cuando lanzamos una aplicación tome el foco (activa)

1
2for_window [class="Termite"] focus
3for_window [class="Terminator"] focus

Preferencias de audio

Configuramos con que valor se incrementará o disminuirá el volumen

1
2bindsym XF86AudioRaiseVolume exec --no-startup-id "amixer -D pulse sset Master '5%+'"
3bindsym XF86AudioLowerVolume exec --no-startup-id "amixer -D pulse sset Master '5%-'"
4bindsym XF86AudioMute exec --no-startup-id "amixer -D pulse set Master toggle"

Control del borde de las ventanas

i3 también permite controlar el borde las ventanas, mostrar, esconder, etc.

1
2hide_edge_borders both
3bindsym $mod+shift+b exec --no-startup-id i3-msg border toggle

Incluso cambiar el estilo

 1bindsym $mod+t border normal
 2bindsym $mod+y border 1pixel
 3bindsym $mod+u border none
 4
 5
 6#new_window pixel 1
 7new_window normal
 8#new_window none
 9
10#new_float pixel 1
11new_float normal
12#new_float none

Control del brillo de la pantalla

El control del brillo de la pantalla lo haremos a través de xbacklight y con un valor de +/- 10% de subida o bajada

1
2bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 10 # increase screen brightness
3XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 10 # decrease screen brightness

Esconder o mostrar la barra de estado

Podemos mostrar o esconder la barra con una simple combinación de teclas

1bindsym $mod+b bar mode toggle

Control de ventanas popups

Tamaño de las popups mientras estamos en el modo de pantalla completa

1popup_during_fullscreen smart

Ajustes para i3 gaps-next

Estilo de bordes, distancia, etc.

1
2for_window [class="^.*"] border pixel 2
3gaps inner 5
4gaps outer 5
5#smart_gaps on
6#smart_borders on

Configuración i3 gaps

No puedo explicar mucho sobre los ajustes, simplemente me limité a copiar y pegar la configuración de ejemplo

 1set $mode_gaps Gaps: (o) outer, (i) inner
 2set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
 3set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
 4bindsym $mod+Shift+g mode "$mode_gaps"
 5
 6mode "$mode_gaps" {
 7        bindsym o      mode "$mode_gaps_outer"
 8        bindsym i      mode "$mode_gaps_inner"
 9        bindsym Return mode "default"
10        bindsym Escape mode "default"
11}
12
13mode "$mode_gaps_inner" {
14        bindsym plus  gaps inner current plus 5
15        bindsym minus gaps inner current minus 5
16        bindsym 0     gaps inner current set 0
17
18        bindsym Shift+plus  gaps inner all plus 5
19        bindsym Shift+minus gaps inner all minus 5
20        bindsym Shift+0     gaps inner all set 0
21
22        bindsym Return mode "default"
23        bindsym Escape mode "default"
24}
25mode "$mode_gaps_outer" {
26        bindsym plus  gaps outer current plus 5
27        bindsym minus gaps outer current minus 5
28        bindsym 0     gaps outer current set 0
29
30        bindsym Shift+plus  gaps outer all plus 5
31        bindsym Shift+minus gaps outer all minus 5
32        bindsym Shift+0     gaps outer all set 0
33
34        bindsym Return mode "default"
35        bindsym Escape mode "default"
36}

Apariencia de la barra

Podemos personalizar la barra cambiando fuentes, colores, posicion, etc.

 1
 2set $bg-color            #2f343f
 3set $inactive-bg-color   #2f343f
 4set $text-color          #f3f4f5
 5set $inactive-text-color #676e7d
 6set $urgent-bg-color     #e53935
 7set $indicator-color     #a0a0a0
 8
 9# set window colors
10#                       border             background         text                 indicator
11client.focused          $bg-color          $bg-color          $text-color          $indicator-color
12client.unfocused        $inactive-bg-color $inactive-bg-color $inactive-text-color $indicator-color
13client.focused_inactive $inactive-bg-color $inactive-bg-color $inactive-text-color $indicator-color
14client.urgent           $urgent-bg-color   $urgent-bg-color   $text-color          $indicator-color
15
16
17# Start i3bar to display a workspace bar (plus the system information i3status
18# finds out, if available)
19bar {
20    status_command i3status
21    font pango:monospace 9
22    position top
23
24      colors {
25        background $bg-color
26        separator #757575
27        #                  border             background         text
28        focused_workspace  $bg-color          $bg-color          $text-color
29        inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color
30        urgent_workspace   $urgent-bg-color   $urgent-bg-color   $text-color
31    }
32}

En lineas generales esta es mi configuración de i3wm, y como escribía al principio del articulo, quitando la parte para gaps, es totalmente compatible con i3wm, de todas formas puedes descargarte mi fichero de configuración y personalizarlo a tu gusto,

Espero que te haya gustado, pasa un buen día.