Blog personal donde guardo mis notas sobre tecnología

Mi configuración de i3wm

Carlos M.

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


- $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 #

set $mod Mod4

Variables para las teclas de movimiento #

set $up l
set $down k
set $left j
set $right semicolon

Pantalla #

Cambiar de espacio de trabajo (escritorio virtual)

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

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

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

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

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

    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

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

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


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

bindsym $mod+Shift+c reload

Reiniciar manteniendo estado de la sesión #

Podemos usar esta opción para actualizar i3 por ejemplo

bindsym $mod+Shift+r restart

Parar una aplicación #

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

bindsym $mod+Shift+q kill

Movimiento alrededor de i3 #

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

floating_modifier $mod

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

bindsym $mod+Shift+space floating toggle

Cambiar el foco entre ventanas

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

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

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

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

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

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

default_orientation horizontal

Ventanas horizontalmente

bindsym $mod+h split h

Ventanas verticalmente

bindsym $mod+v split v

Ventana que tiene el foco a pantalla completa

bindsym $mod+f fullscreen toggle

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

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

Cambiar el foco entre ventanas apiladas o flotante

bindsym $mod+space focus mode_toggle

Contenedor padre coge el foco

bindsym $mod+a focus parent

Contenedor hijo coge el foco

#bindsym $mod+d focus child

Cambio de tamaño de la ventana #

También podemos utilizar el ratón

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

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

# 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

# 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

#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

# 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 #

# 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.

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

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)

for_window [class="Termite"] focus
for_window [class="Terminator"] focus

Preferencias de audio #

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

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.

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

Incluso cambiar el estilo

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

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

bindsym $mod+b bar mode toggle

Control de ventanas popups #

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

popup_during_fullscreen smart

Ajustes para i3 gaps-next #

Estilo de bordes, distancia, etc.

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

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.


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. 🐧