Tiling Window Manager: I3

Publicado: May 27, 2014 en Desktops
Etiquetas:,

Lo habitual, cuando usamos uni3 sistema operativo con entorno gráfico, es utilizar un escritorio completo, con un gestor de ventanas «flotante». En los sistemas GNU/Linux, disponemos de múltiples alternativas y una de ellas, es no utilizar un escritorio, sino  sólo un gestor de ventanas. Dentro de éstos, hay un tipo específico que son los Tiling Window Manager. Estos gestores de ventanas tienden a evitar el uso del ratón. Muestran las ventanas utilizando diferentes disposiciones y nos proporcionan diferentes combinaciones de teclas para su gestión. De esta manera, aunque su curva de aprendizaje sea más alta, permiten aumentar la productividad.

Tienden a ser altamente personalizables y, además, se podrían utilizar como gestor de ventanas alternativo al que utilice el escritorio que estemos usando. Dado que suelen consumir muy pocos recursos, nos van a permitir una mejor respuesta del equipo.

En esta ocasión, os voy a hablar de i3, un magnífico Tiling Window Manager, que nos va a permitir comprobar la potencia de estos gestores de ventanas.

Lo primero será instalarlo. Además del gestor de ventanas, instalaremos algunas herramientas, que nos vendrán bien, como un daemon para las notificaciones, una barra para la bandeja del sistema y algunos applets.

pacman -Syu i3 dunst

El grupo i3 contiene i3-wm, el gestor de ventanas, i3status, para personalizar la barra con applets e i3lock, para bloquear la pantalla. El daemon para notificaciones es dunst.

Necesitaremos un gestor de archivos. Uno muy socorrido y muy ligero es pcmanfm. Para que incorpore «la papelera» y automontaje de dispositivos, instaleremos gvfs.

pacman -Syu pcmanfm gvfs

Además, para disponer de un fondo, utilizaremos nitrogen. También podría usarse feh.

pacman -Syu nitrogen

Con esto, ya tenemos lo básico para empezar. Ahora, crearemos un archivo de configuración. Para ello, podemos utilizar dos ubicaciones: ~/.config/i3 o ~/.i3/. En este caso, utilizaremos la segunda opción. Vamos a crear un subdirectorio para alojar scripts.

mkdir -p ~/.i3/scripts

Si estamos utilizando GDM, LXDM o LightDM, la sesión debería aparecernos. Para KDM, bastará crear un enlace. En caso de no aparecer, reiniciamos el gestor de login que estemos utilizando. Por ejemplo, para KDM:

ln -s  /usr/share/xsessions/i3.desktop  /usr/share/apps/kdm/sessions/

systemctl restart kdm

Al iniciar la primera vez, se ejecutará un asistente para crear una configuración inicial. Le decimos que sí a todo, y creará el ~/.i3/config, con Mod4 (la tecla de windows) para su utilización en las combinaciones de teclas predefinidas.

Una vez iniciado, nos encontraremos un poco perdidos. No habrá fondo y no habrá un botón con menús. Vamos a empezar editando el archivo de configuración. Podemos ejecutar aplicaciones pulsando MOD+d. Nos aparecerá arriba dmenu, un lanzador de aplicaciones, en el que vamos tecleando y nos muestra una lista de opciones. Otra opción es lanzar una terminal, pulsando MOD+Enter. La terminal abierta será la primera encontrada, siguiendo este orden:

  • $TERMINAL
  • urxvt
  • rxvt
  • terminator
  • Eterm
  • aterm
  • xterm
  • gnome-terminal
  • roxterm
  • xfce4-terminal

Editamos el archivo ~/.i3/config y nos encontraremos, primero, con todas las definiciones de teclas. La primera que vamos a cambiar es MOD+d. El comando que lanza genera una lista con todos los .desktop que se encuentren en /usr/share/apps/, pero, si queremos que nos pida elevación de privilegios, tal como pasaría en gnome o KDE, por ejemplo, deberemos utilizar un wrapper. Bien i3-dmenu, bien j4-dmenu (disponible en el AUR). Dejaremos la línea así:

bindsym $mod+d exec --no-startup-id i3-dmenu-desktop

Hecho esto, nos vamos al final del archivo y añadimos dos keybindings nuevos. Son para habilitar el scratchpad. Esto es un escritorio virtual, donde la ventana está en modo flotante, y se encuentra «oculto». Enviaremos la ventana que queramos con SHIFT+MOD+-. Para mostrar/ocultar esta aplicación «oculta» en el scratchpad, MOD+-.

#scratchpad
# Mover ventana al scratchpad
bindsym $mod+Shift+minus move scratchpad
# Mostrar scratchpad
bindsym $mod+minus scratchpad show

Bien, ahora vamos a ejecutar el script que va a contener las aplicaciones y herramientas que queramos que se ejecuten automáticamente. Podríamos, simplemente, lanzarlas desde aquí, pero así tendremos todo mejor organizado:

exec --no-startup-id ~/.i3/scripts/autostart

La opción — es para que no nos salga el reloj dando vueltas y abra la aplicación en el escritorio en el que sea llamada, aunque cambiemos éste antes de abrirla.

Creamos, ahora, el archivo ~/.i3/scripts/autostart y empezamos a añadir las aplicaciones. No olviden dar permisos de ejecución al script. Aquí les dejo un ejemplo, activen aquellas que necesiten:

#!/usr/bin/bash

# Polkit - Solo activar uno
# paquete polkit-gnome
i3-msg 'exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1'

# paquete  polkit-kde
# i3-msg 'exec --no-startup-id /usr/lib/kde4/libexec/polkit-kde-authentication-agent-1'

# paquete lxpolkit
# i3-msg 'exec --no-startup-id /usr/lib/lxpolkit/lxpolkit'

# Composición - Instalar compton del AUR
# i3-msg 'exec --no-startup-id compton'

# wallpaper
nitrogen --restore

# Automontage - activar uno
# paquete udevil
# i3-msg 'exec --no-startup-id devmon'

# paquete pcmanfm
i3-msg 'exec --no-startup-id pcmanfm -d'

# Pulseaudio - Si usamos pulseaudio
#
# start-pulseaudio-x11

# Mixer - activar uno
# paquete volumeicon
# i3-msg 'exec --no-startup-id volumeicon'
# paquete pasystray
i3-msg 'exec --no-startup-id pasystray'

# Calendario
# paquete orage
# i3-msg 'exec --no-startup-id orage'

# Applet impresora
# paquete system-config-printer
# i3-msg 'exec --no-startup-id system-config-printer-applet'

# Portapapeles
# paquete parcellite
# i3-msg 'exec --no-startup-id parcellite

Para comunicarnos con i3, como habéis podido observar, utilizamos i3-msg, seguido del comando. En el ejemplo, exec, porque vamos a ejecutar comandos externos. También podríamos redimensionar ventanas, moverlas, renombrar escritorios, etc. Aquí están todos los comandos soportados.

Para personalizar el esquema de colores, podemos utilizar la herramienta j4-make-config, disponible en el AUR. Una vez instalada, editamos el archivo ~/.i3/config y le añadimos las siguientes líneas:

.....
bar {
# $i3-theme-bar
font pango:DejaVu Sans Mono, Icons 10
....
}
....
# $i3-theme-window

Para poder utilizar las fuentes Icons, hay que instalar el paquete ttf-font-icons del AUR.  Con estas fuentes, podemos añadir iconos a la barra, como haremos en el ejemplo posterior.

Las líneas # $i3-theme-bar y # $i3-theme-window, serán sustituidas por el esquema de colores elegido, después, por la herramienta, creando el archivo ~/.i3/config.

Lo copiamos con el nombre ~/.i3/config.base y ejecutamos j4-make-config. Con –help, nos nos muestra la lista de temas que incorpora, para cargar uno, ejecutamos:

j4-make-config nombre_tema

Para comprobar el resultado, reiniciamos i3, pulsando MOD+r, o bien, añadimos la opción -r antes del especificar el nombre del tema a aplicar.

Para seleccionar un fondo, ejecutamos nitrogen (MOD+d y buscamos nitrogen).

Ya tenemos una configuración inicial. Ahora, para la barra de estado, deberemos modificar su archivo de configuración, para adaptarlo a nuestro sistema. Los apliques se generan con i3status y, su archivo de configuración, deberemos copiarlo a nuestro home y editarlo ahí. Un ejemplo de ~/.i3status:

general {
 colors = true
 interval = 5
}

#order += "ipv6"
order += "disk /"
order += "disk /home"
#order += "run_watch DHCP"
#order += "run_watch VPN"
#order += "wireless wlan0"
order += "ethernet enp2s5"
#order += "battery 0"
#order += "load"
order += "cpu_usage"
order += "tztime local"

#wireless wlan0 {
# format_up = "W: (%quality at %essid) %ip"
# format_down = "W: down"
#}

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

#battery 0 {
# format = "%status %percentage %remaining"
#}

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

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

tztime local {
 #format = "%Y-%m-%d %H:%M:%S"
 format = "%d-%m-%Y  %H:%M"
}

#load {
# format = "%1min"
#}

disk "/" {
 format = " %avail"
 #format = "%percentage_used used, %percentage_free free, %percentage_avail avail"
}

disk "/home" {
 format = " %avail"
 #format = "%percentage_used used, %percentage_free free, %percentage_avail avail"
}

cpu_usage {
 format = "↺ %usage "
}

screenshot2014-05-27_003001_513617772

I3bar permite utilizar otras herramientas para estos apliques. Podríamos, en lugar de utilizar i3status, utilizar j4status (con plugins para NetworkManager, pulseaudio, mpd, ect.), i3pystatus,  o, incluso, conky (junto con dzen, para permitir eventos). Un screenshot con i3pystatus:

screenshot2014-05-27_003503_259320630

Las combinaciones de teclas predefinidas son las siguientes:

$mod + Enter Abrir termianal
$mod + A Foco al «padre»
$mod + S Disposición Stacked (Cascada)
$mod + W Disposición Tabbed
$mod + E Disposición por defecto
$mod + SpaceBar Cambio de foco tiling/floating
$mod + D dmenu
$mod + H Split Horizontal
$mod + V Split Vertical
$mod + J Foco izquierda
$mod + K Foco abajo
$mod + L Foco arriba
$mod + ñ Foco derecha
$mod + Shift + Q Cerrar ventana
$mod + Shift + E Salir de i3
$mod + Shift + C Recarcar configuración sin reiniciar
$mod + Shift + R Reiniciar i3
$mod + Shift + J Mover ventana a la izquierda
$mod + Shift + K Mover ventana abajo
$mod + Shift + L Mover ventana arriba
$mod + Shift + : Mover ventana a la derecha
$mod + Shift + SpaceBar Cambiar modo de ventana entre tiling/floating

Para mover ventanas o cambiar el foco, también puede usarse MOD+Cursores. El cambio entre espacios de trabajo, se hace con MOD+[1..0] (teclas del 1 al 0). Para mover las ventanas, pulsando además Shift.

A diferencia de otros Tiling Window Manager, solo disponemos de dos disposiciones: Tabbed y Stacked. El modo «flotante» es de la ventana y no del espacio de trabajo. Esto es porque este gestor se organiza mediante contenedores, de manera jerárquica (de ahí poder seleccionar al «padre»). Un espacio de trabajo, tiene un contenedor. Éste pude dividirse horizontal o verticalmente o estar en modo stacked. Cada división puede alojar una ventana u otro contenedor que, a su vez, podrá estar en alguna de las dos disposicones y con una o varias ventanas. Podemos alternar el modo «pantalla completa» pulsando MOD+f. Las divisiones las realizaremos con MOD+v (verticalmente) o MOD+h (horizontalmente).

Os recomiendo visitar la documentación del proyecto y la wiki de ArchLinux para personalizar más cosas, como dónde queremos que se ejecuten las aplicaciones por defecto o añadir un menú para apagar el sistema (Apagar, Reiniciar, Cerrar sesión, Suspender e Hibernar).

¡Espero que os animéis a probarlo!

comentarios
  1. JonaC2 dice:

    Muchas Gracias por compartir!!!! Tengo un duda(x2) !! Uso SLIM ¿Necesito cambiarlo para inicio de sesión por alguno de los que nombras en el post? ¿Algún conflicto por tener OpenBox y i3 instalados al mismo tiempo? #Gracia de Antemano!

  2. edu dice:

    Excelente artículo, deje Openbox para pasarme a i3 y me parece genial.
    Gracias.

  3. Javier dice:

    Genial tutorial ! Usaba Ratpoison hace un tiempo y se me complicaba un poco para sesiones de audio – música por el tamaño de cada ventana (que en ratposion es dicícil configurarlas por separado). Voy a probar el i3 !

    • Archuser dice:

      Gracias! Aquí puedes redimensionar con mod+botón izq del ratón, o con teclado, con mod+r entras en modo «resize» y usas los cursores. Con for_window también puedes usar el comando de redimensión y automatizar.

  4. dmacias dice:

    Este port se merece un video/captura para demostrar 😛
    La captura que has puesto me recuerda muy mucho a un irssi que tenia muy tuneado, como ya te digo por el otro lado, lo releere y quizas lo pruebe a ver que sale.

    Un saludo

    • Archuser dice:

      Pues estoy pensándolo, la verdad…

      En la captura está htop a la izquierda, debajo, pacmixer (mezclador para pulseaudio, aunque está de adorno más bien, tiene algunos bugs), ncmpcpp y, a la derecha, ranger, un gestor de archivos para consola.

      Anímate, que es fácil de manejar, se tarda un poquito en habituarse a los atajos, pero, luego, es muy cómodo.

  5. victorhck dice:

    Esto de los tilling siempre me ha parecido fascinante, pero muy lejos de lo que creo que podría usar yo… Es el summun del “Geekismo” XD

    • Archuser dice:

      Depende mucho de WM, éste es muy facilón y, una vez te acostumbras, cuesta volver a los grandes desktops… Muchas gracias!!

      • victorhck dice:

        Pues unos cuantos años después me decidí probarlo… y me gustó! 😉
        Echo de menos algunas cosillas de Plasma, pero en general bastante más sencillo de lo que suponía y efectivo!
        He escrito algunos tutoriales de aquello que he ido aprendiendo. Me gustó la barra inferior que muestras en la captura! Algún sitio con la config que tienes?

        Saludos!!!

        • Archuser dice:

          Me alegro que te guste! Yo aún lo uso, cuanto más lo usas, más cómodo estás..
          El theme es uno de los que viene con la utilidad j4-make-config. En Arch lo tienes en el AUR, es el j4-make-config-git.
          Saludos!!

  6. Claudio dice:

    Hola compañero! Ya que eres muy bueno en el tema, aprovecho para consultarte. Quiero instalar solo el gestor i3 en mi arch-linux, y ningún otro gestor. Me podrías guiar? Te comento que instalo el sistema base y luego como prosigo? Gracias!

  7. AnameSoul dice:

    Cuanto de ram me consume, por ejm la distro de Manjaro i3, tiene un peso de 1.1GB pero aun la pruebo, mi pc es reantigua un pentium4, con 1,450 de ram, sin tarjeta de video, que tal le ira¿? tengo entendido que el jwm consume 111 de ram

  8. Vctrsnts dice:

    Buenos dias.

    Buscando información sobre i3, he acabado en tu pagina web. Me parece estupenda, porque la explicación es facil y amena, pero tengo una duda, con respecto al fichero entero de configuración de i3 ( config ) que por lo que he visto, solo has puesto un trozo.

    Si no es molestia, podrias poder todo el fichero, si aun siguen usando i3.

    Gracias…

  9. Archuser dice:

    Hola, tengo la configuración dividida en varios ficheros, la subiré a github.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.