Polybar: The highly customizable status bar for Linux

Introducción a Polybar

Polybar se ha convertido en una de las opciones más populares entre los usuarios de Linux que buscan una barra de estado ligera, altamente configurable y visualmente atractiva. A diferencia de otras soluciones más simples, Polybar permite crear múltiples barras, colocar módulos en cualquier posición y adaptar el aspecto mediante archivos de configuración escritos en un lenguaje sencillo pero poderoso. En este artículo exploraremos desde la instalación básica hasta la personalización avanzada, mostrando ejemplos prácticos que te ayudarán a obtener el máximo provecho de esta herramienta.

¿Qué es Polybar y por qué usarla?

Polybar es una barra de estado escrita en C y diseñada para funcionar con los gestores de ventanas más comunes, como i3, Sway, bspwm, OpenBox y muchos otros. Su principal ventaja radica en la separación entre lógica y presentación: los módulos que muestran información (reloj, uso de CPU, red, volumen, etc.) son independientes del diseño, lo que permite cambiar colores, fuentes, espaciados y animaciones sin tocar el código subyacente. Además, Polybar soporta múltiples monitores, barra vertical u horizontal, y puede lanzar scripts personalizados para mostrar cualquier dato que se te ocurra.

Instalación en las distribuciones más usadas

Antes de comenzar con la configuración, es necesario instalar Polybar. Afortunadamente, la mayoría de las distribuciones principales lo incluyen en sus repositorios oficiales.

  • Ubuntu y Debian: sudo apt install polybar
  • Arch Linux: sudo pacman -S polybar
  • Fedora: sudo dnf install polybar
  • openSUSE: sudo zypper install polybar

Si prefieres compilar desde el código fuente para obtener la última versión, el repositorio oficial en GitHub proporciona instrucciones claras y un script de compilación que depende de paquetes como cmake, pkg-config, libxcb, xproto, xcb-util, xcb-util-image, xcb-util-wm, xcb-util-xrm, i3-wm (opcional) y libmpdclient.

Estructura básica del archivo de configuración

El archivo de configuración principal se encuentra en ~/.config/polybar/config (o ~/.config/polybar/config.ini en algunas versiones). Este archivo está dividido en secciones que definen colores, fuentes, módulos y barras.

Sección [colors]

En esta sección se definen los colores que se usarán a lo largo de la barra. Por ejemplo:

[colors]background = #222222foreground = #ddddddprimary = #ff5555secondary = #55ffff

Los valores pueden expresarse en formato hexadecimal, RGB o utilizando nombres de colores reconocidos por X11.

Sección [bar/example]

Cada barra se define bajo una sección cuyo nombre comienza con bar/. Dentro de ella se especifican atributos como posición, tamaño, fuente y los módulos que se mostrarán a la izquierda, centro y derecha.

[bar/example]width = 100%height = 27offset-x = 0offset-y = 0radius = 0fixed-center = truebackground = ${colors.background}foreground = ${colors.foreground}font-0 = JetBrains Mono:size=10:antialias=true;0font-1 = Font Awesome 5 Free:size=10:antialias=true;0modules-left = xwindowmodules-center = date modules-right = cpu memory wlan volume battery tray-position = righttray-padding = 2

En este ejemplo, la barra ocupa el ancho completo de la pantalla, tiene una altura de 27 píxeles y muestra el nombre de la ventana activa a la izquierda, la fecha en el centro y varios indicadores de sistema a la derecha.

Módulos más útiles y cómo configurarlos

Polybar incluye una gran variedad de módulos integrados. Algunos de los más usados son:

  • xwindow: muestra el título de la ventana actualmente enfocada.
  • date: muestra la fecha y hora con formato personalizable.
  • cpu: muestra el uso de la CPU en porcentaje.
  • memory: muestra el consumo de RAM.
  • wlan: muestra el estado de la conexión inalámbrica y la intensidad de la señal.
  • volume: controla el volumen del sonido y muestra el nivel actual.
  • battery: muestra el nivel de carga de la batería (útil en portátiles).
  • mpd: integra el reproductor Music Player Daemon.
  • custom/script: permite ejecutar cualquier script y mostrar su salida.

Cada módulo tiene sus propias opciones de configuración. Por ejemplo, el módulo de fecha puede personalizarse así:

[module/date]type = internal/dateinterval = 5format-prefix = '📅 'format-prefix-foreground = ${colors.secondary}date-alt = ' %Y-%m-%d %H:%M:%S '

El módulo de CPU puede mostrarse con un gradiente de color según el uso:

[module/cpu]type = internal/cpuinterval = 2format-prefix = '💡 'format-prefix-foreground = ${colors.primary}label = %percentage%%label-background = ${colors.background}

Temas y estilos visuales

Una de las mayores fortalezas de Polybar es la facilidad para cambiar su apariencia mediante temas. Un tema no es más que un conjunto de valores para las secciones de colores, fuentes y espaciados. Muchos usuarios comparten sus temas en repositorios como polybar-themes en GitHub.

Para aplicar un tema, simplemente copia el contenido del archivo config.ini del tema elegido a tu propio ~/.config/polybar/config y reinicia Polybar. Algunos temas populares incluyen:

  • Forest: colores verdes y marrones que recuerdan a un bosque.
  • Nord: paleta fría inspirada en el tema Nord, ideal para entornos de desarrollo.
  • Material: basado en el diseño Material de Google, con sombras y acentos vivos.

Si prefieres crear tu propio tema, comienza definiendo una paleta de colores en la sección [colors], elige una fuente legible (por ejemplo, JetBrains Mono, Fira Code o Noto Sans) y ajusta el espacio entre módulos mediante los parámetros spacing y module-margin.

Configuración avanzada: múltiples monitores y Wayland

Polybar funciona tanto en X11 como en Wayland, aunque en Wayland se requiere el uso de un compositor compatible como Sway o Hyprland. Para especificar en qué monitor debe aparecer una barra, se utiliza la variable monitor dentro de la sección de la barra.

[bar/primary]monitor = HDMI-1width = 100%height = 28

En configuraciones con varios monitores, puedes crear una barra para cada output simplemente duplicando la sección bar/ y cambiando el valor de monitor. Además, Polybar admite la barra vertical estableciendo orientation = vertical y ajustando el ancho y la altura según sea necesario.

En Wayland, algunos módulos que dependen de X11 (como xwindow) pueden no estar disponibles; en su lugar, se pueden usar módulos específicos de Wayland como sway/workspace o hyprland/workspace según el compositor que utilices.

Comunicación mediante IPC y polybar-msg

Polybar incluye una interfaz de comunicación entre procesos (IPC) que permite enviar comandos a una instancia en ejecución sin necesidad de reiniciarla. El comando polybar-msg es la herramienta más común para ello.

Algunos ejemplos útiles:

  • Reiniciar una barra específica: polybar-msg cmd restart
  • Mostrar u ocultar la barra: polybar-msg cmd show o polybar-msg cmd hide
  • Actualizar un módulo en tiempo real: polybar-msg hook module-name 1 donde el número corresponde al identificador del hook definido en la configuración.
  • Obtener información sobre la instancia en ejecución: polybar-msg -p /tmp/polybar-mypid.ipc cmd version

Para habilitar el IPC, asegúrate de que la sección de la barra incluya enable-ipc = true. Luego, el socket se crea en la ruta temporal indicada por la variable de entorno XDG_RUNTIME_DIR o en /tmp.

Scripts personalizados y el módulo custom/script

Una de las formas más poderosas de extender Polybar es mediante el módulo custom/script. Este módulo ejecuta un comando o script en un intervalo definido y muestra su salida en la barra.

Ejemplo de un script que muestra la temperatura de la CPU:

[module/cpu-temp]type = custom/script
exec = sensors | awk '/Core 0/ {print $3}'
interval = 5
format-prefix = '🌡️ '
format-prefix-foreground = ${colors.primary}

Otro ejemplo útil es un script que indica si hay actualizaciones pendientes en un sistema basado en Arch:

[module/updates]type = custom/script
exec = checkupdates | wc -l
interval = 300
format-prefix = '📦 '
format-prefix-foreground = ${colors.secondary}
label = %output%

Recuerda que los scripts deben devolver solo texto; cualquier salida de error se ocultará a menos que redirijas explícitamente stderr a stdout. Además, puedes usar la variable click-left, click-right o click-middle para asociar acciones a los clics sobre el módulo.

Lanzamiento automático y gestión de instancias

Para que Polybar se inicie junto con tu sesión, puedes añadir una línea a tu archivo de autostart del gestor de ventanas o al archivo ~/.xinitrc.

En i3, por ejemplo, se agrega al archivo ~/.config/i3/config:

exec_always --no-startup-id polybar topbar
exec_always --no-startup-id polybar bottombar

En Sway, la sintaxis es similar:

exec_always --no-startup-id polybar topbar
exec_always --no-startup-id polybar bottombar

Si prefieres usar un script de lanzamiento que se encargue de cerrar instancias previas y lanzar nuevas, puedes crear un archivo ~/.config/polybar/launch.sh con el siguiente contenido:

#!/usr/bin/env bash
# Terminar barras ya en ejecución
killall -q polybar
# Esperar a que los procesos finalicen
while pgrep -u $UID -x polybar >/dev/null; do sleep 0.5; done
# Lanzar las barras deseadas
polybar topbar &
polybar bottombar &

Luego hazlo ejecutable con chmod +x ~/.config/polybar/launch.sh y añádelo a tu autostart.

Solución de problemas comunes

Si al iniciar Polybar ves errores en la terminal, revisa los siguientes puntos:

  • Fuente no encontrada: asegúrate de que el nombre de la fuente y su ruta estén correctos. Puedes listar las fuentes disponibles con fc-list.
  • Módulo no reconocido: verifica que el nombre del módulo coincida exactamente con los disponibles en la documentación (man polybar o la wiki oficial).
  • Colores que no se aplican: comprueba que no haya errores de sintaxis en la sección [colors] (por ejemplo, falta de punto y coma o uso de caracteres no permitidos).
  • Barra no aparece en el monitor correcto: usa la variable monitor dentro de la sección de la barra para especificar el nombre del output (obtenible con xrandr en X11 o wlr-randr en Wayland).
  • El módulo de script no muestra salida: verifica que el script devuelva texto estándar y que el path sea absoluto o relativo al directorio home. Añade exec = /ruta/al/script.sh y prueba el script manualmente en la terminal.

Conclusión

Polybar ofrece una combinación única de flexibilidad, bajo consumo de recursos y una estética que puede adaptarse a cualquier flujo de trabajo. Desde una simple barra con reloj y uso de CPU hasta un panel completo con múltiples módulos, scripts personalizados y temas elaborados, la herramienta se ajusta tanto a principiantes como a usuarios avanzados que desean tener el control total sobre su entorno de escritorio Linux. Te invitamos a experimentar con las configuraciones mostradas, a explorar los temas de la comunidad y a crear tu propia barra que refleje exactamente lo que necesitas ver en cada momento.