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
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
- $Mod = tecla WINDOWS

- Mod1 = tecla ALT

- Control = tecla CTRL

- Shift = tecla SHIFT

- Escape = tecla ESCAPE

- Return = tecla ENTER

- KP_Enter = Tecla Enter teclado numerico

- Pause = tecla PAUSE

- Print = tecla PRINT

- Tab = tecla TAB

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

1
set $mod Mod4

Variables para las teclas de movimiento

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

Pantalla

Cambiar de espacio de trabajo (escritorio virtual)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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

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

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

3 Menús

  • Iniciar dmenu

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

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

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

    1
    
    bindsym $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

1
bindsym $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

1
bindsym $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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
bindsym $mod+X mode "$mode_system"
bindsym control+mod1+Delete mode "$mode_system"

set $mode_system System (k) lock, (l) logout, (u) suspend, (h) hibernate, (r) reboot, (s) shutdown
mode "$mode_system" {
    bindsym k exec --no-startup-id ~/.config/i3/scripts/i3lock.sh lock, mode "default"
    bindsym l exec --no-startup-id ~/.config/i3/scripts/i3exit.sh logout, mode "default"
    bindsym u exec --no-startup-id ~/.config/i3/scripts/i3exit.sh suspend, mode "default"
    bindsym h exec --no-startup-id ~/.config/i3/scripts/i3exit.sh hibernate, mode "default"
    bindsym r exec --no-startup-id ~/.config/i3/scripts/i3exit.sh reboot, mode "default"
    bindsym s exec --no-startup-id ~/.config/i3/scripts/i3exit.sh shutdown, mode "default"

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

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

1
bindsym $mod+Shift+c reload

Reiniciar manteniendo estado de la sesión

Podemos usar esta opción para actualizar i3 por ejemplo

1
bindsym $mod+Shift+r restart

Parar una aplicación

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

1
bindsym $mod+Shift+q kill

Movimiento alrededor de i3

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

1
floating_modifier $mod

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

1
bindsym $mod+Shift+space floating toggle

Cambiar el foco entre ventanas

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

Alternativamente podemos usar las teclas del cursor

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

Mover la ventana que tiene el foco

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

Alternativamente podemos usar las teclas del cursor

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

Movimiento por los espacios de trabajo

Próximo / previo espacio de trabajo

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

Navegar al siguiente / previo espacio de trabajo

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

Parámetros de configuración tiling (Mosaico)

Orientación de las ventanas para nuevos espacios de trabajo

1
default_orientation horizontal

Ventanas horizontalmente

1
bindsym $mod+h split h

Ventanas verticalmente

1
bindsym $mod+v split v

Ventana que tiene el foco a pantalla completa

1
bindsym $mod+f fullscreen toggle

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

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

Cambiar el foco entre ventanas apiladas o flotante

1
bindsym $mod+space focus mode_toggle

Contenedor padre coge el foco

1
bindsym $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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
bindsym $mod+r mode "resize"

mode "resize" {
        # These bindings trigger as soon as you enter the resize mode

        # Pressing left will shrink the window’s width.
        # Pressing right will grow the window’s width.
        # Pressing up will shrink the window’s height.
        # Pressing down will grow the window’s height.
        bindsym $left       resize shrink width 10 px or 10 ppt
        bindsym $down       resize grow height 10 px or 10 ppt
        bindsym $up         resize shrink height 10 px or 10 ppt
        bindsym $right      resize grow width 10 px or 10 ppt

        # same bindings, but for the arrow keys
        bindsym Left        resize shrink width 10 px or 10 ppt
        bindsym Down        resize grow height 10 px or 10 ppt
        bindsym Up          resize shrink height 10 px or 10 ppt
        bindsym Right       resize grow width 10 px or 10 ppt

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

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

1
font 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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Workspace 1 text editor related and meld
assign [class="Emacs|Meld|Mousepad"]                               → 1

# Workspace 2 browser related
assign [class="Firefox|Chromium"]                                  → 2

# Workspace 3 file managers
assign [class="Pcmanfm"]                                           → 3

# Workspace 4 Telegram
assign [class="TelegramDesktop"]                                   → 4

# Workspace 5 Images
assign [class="Gpicview|Nitrogen"]                                 → 5

# Workspace 6 all video related software
assign [class="Vlc|vlc"]                                           → 6

# Workspace 7 Gestor de Paquetes
assign [class="pamac-manager|Pamac-Manager"]                       → 7

# Workspace 9 email clients
#assign [class="Geary|Evolution"]                                  → 9

# Workspace 10 music related
assign [class="Spotify|spotify"]                                   → 10
# fix for spotify not moving to workspace 10
for_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
 3
 4
 5
 6
 7
 8
 9
10
# Navegador
exec --no-startup-id firefox
for_window [class="Firefox"] focus

# Editores de texto
exec --no-startup-id emacs
#exec --no-startup-id atom

# Social
exec --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
2
#xautolock
exec --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
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Authentication dialog
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &

# Updater
exec --no-startup-id pamac-tray

# bluetooth
exec --no-startup-id blueberry-tray

# network
exec --no-startup-id nm-applet

# num lock activated
exec_always --no-startup-id numlockx on

# nitrogen
exec --no-startup-id "nitrogen --restore"

Combinación de teclas para iniciar aplicaciones

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Aplicaciones que no tienen un espacio de trabajo asignado

# terminal
bindsym $mod+Return exec --no-startup-id termite;focus
bindsym $mod+KP_Enter exec --no-startup-id termite;focus

# keepassxc
bindsym control+$mod+k exec --no-startup-id keepassxc;focus

# catfish
bindsym control+$mod+c exec --no-startup-id catfish;focus

# pamac-manager
bindsym control+$mod+p exec --no-startup-id pamac-manager

#xkill
bindsym --release $mod+Escape exec xkill


# Aplicaciones con un espacio de trabajo asignado

# workspace 1 related
bindsym $mod+F1 exec --no-startup-id emacs;focus

# workspace 2 related
bindsym $mod+F2 exec --no-startup-id firefox;focus

# qwerty/azerty conflict with w
bindsym control+$mod+g exec --no-startup-id chromium;focus

# workspace 3 related
bindsym $mod+F3 exec --no-startup-id pcmanfm;focus

# workspace 4 related
bindsym $mod+F5 exec --no-startup-id meld;focus
bindsym control+mod1+i exec --no-startup-id nitrogen;focus

# workspace 5 related
bindsym $mod+F4 exec --no-startup-id gimp;focus

# workspace 6 related
bindsym $mod+F6 exec --no-startup-id vlc;focus

# workspace 10 related
bindsym $mod+F10 exec --no-startup-id spotify;focus
bindsym 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
2
bindsym Print exec --no-startup-id flameshot full -p ~/imagenes/capturas
bindsym 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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
for_window [class="Blueberry.py"] floating enable
for_window [class="mate-calculator"] floating enable
for_window [class="^Gpick$"] floating enable
for_window [class="Imagewriter"] floating enable
for_window [class="Font-manager"] floating enable
for_window [class="qt5ct|Lxappearance"] floating enable
for_window [class="Nitrogen"] floating enable
for_window [class="Pavucontrol"] floating enable
for_window [class="^Spotify$"] floating enable
for_window [class="System-config-printer.py"] floating enable
for_window [class="etcher-electron"] floating enable
for_window [class="^Vlc$"] floating enable
for_window [class="TelegramDesktop"] floating enable

#for_window [instance="gimp"] floating disable
for_window [instance="script-fu"] border normal

for_window [title="Copying"] floating enable
for_window [title="Deleting"] floating enable
for_window [title="Moving"] floating enable
for_window [title="^Terminator Preferences$"] floating enable


#for_window [window_role="^gimp-toolbox-color-dialog$"] floating enable
for_window [window_role="pop-up"] floating enable
for_window [window_role="^Preferences$"] floating enable
for_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
2
for_window [class="Termite"] focus
for_window [class="Terminator"] focus

Preferencias de audio

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

1
2
3
bindsym XF86AudioRaiseVolume exec --no-startup-id "amixer -D pulse sset Master '5%+'"
bindsym XF86AudioLowerVolume exec --no-startup-id "amixer -D pulse sset Master '5%-'"
bindsym 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
2
hide_edge_borders both
bindsym $mod+shift+b exec --no-startup-id i3-msg border toggle

Incluso cambiar el estilo

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


#new_window pixel 1
new_window normal
#new_window none

#new_float pixel 1
new_float normal
#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
2
bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 10 # increase screen brightness
XF86MonBrightnessDown 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

1
bindsym $mod+b bar mode toggle

Control de ventanas popups

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

1
popup_during_fullscreen smart

Ajustes para i3 gaps-next

Estilo de bordes, distancia, etc.

1
2
3
4
5
for_window [class="^.*"] border pixel 2
gaps inner 5
gaps outer 5
#smart_gaps on
#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

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

mode "$mode_gaps" {
        bindsym o      mode "$mode_gaps_outer"
        bindsym i      mode "$mode_gaps_inner"
        bindsym Return mode "default"
        bindsym Escape mode "default"
}

mode "$mode_gaps_inner" {
        bindsym plus  gaps inner current plus 5
        bindsym minus gaps inner current minus 5
        bindsym 0     gaps inner current set 0

        bindsym Shift+plus  gaps inner all plus 5
        bindsym Shift+minus gaps inner all minus 5
        bindsym Shift+0     gaps inner all set 0

        bindsym Return mode "default"
        bindsym Escape mode "default"
}
mode "$mode_gaps_outer" {
        bindsym plus  gaps outer current plus 5
        bindsym minus gaps outer current minus 5
        bindsym 0     gaps outer current set 0

        bindsym Shift+plus  gaps outer all plus 5
        bindsym Shift+minus gaps outer all minus 5
        bindsym Shift+0     gaps outer all set 0

        bindsym Return mode "default"
        bindsym Escape mode "default"
}

Apariencia de la barra

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
set $bg-color            #2f343f
set $inactive-bg-color   #2f343f
set $text-color          #f3f4f5
set $inactive-text-color #676e7d
set $urgent-bg-color     #e53935
set $indicator-color     #a0a0a0

# set window colors
#                       border             background         text                 indicator
client.focused          $bg-color          $bg-color          $text-color          $indicator-color
client.unfocused        $inactive-bg-color $inactive-bg-color $inactive-text-color $indicator-color
client.focused_inactive $inactive-bg-color $inactive-bg-color $inactive-text-color $indicator-color
client.urgent           $urgent-bg-color   $urgent-bg-color   $text-color          $indicator-color


# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
    status_command i3status
    font pango:monospace 9
    position top

      colors {
        background $bg-color
        separator #757575
        #                  border             background         text
        focused_workspace  $bg-color          $bg-color          $text-color
        inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color
        urgent_workspace   $urgent-bg-color   $urgent-bg-color   $text-color
    }
}

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.