Dmenu: El lanzador rápido y minimalista para Linux

Introducción

En el ecosistema de Linux, la velocidad y la eficiencia son valores fundamentales para muchos usuarios, especialmente aquellos que pasan gran parte de su tiempo en la terminal. Dmenu se presenta como una solución ligera y extremadamente flexible que permite lanzar aplicaciones, ejecutar comandos o seleccionar elementos de una lista con apenas unas pulsaciones de teclado. Su diseño minimalista no sacrifica potencia; al contrario, al estar basado en la entrada estándar y la salida estándar, se integra sin fricción con cualquier entorno de escritorio o gestor de ventanas.

¿Qué es Dmenu?

Dmenu es un menú dinámico para X que lee una lista de elementos desde la entrada estándar y muestra aquellos que coinciden con el patrón escrito por el usuario. Originalmente creado como parte del conjunto de herramientas suckless, su filosofía sigue el principio de “hacer una cosa y hacerla bien”. No depende de bibliotecas pesadas, sino de Xlib y de una configuración sencilla mediante recursos X o archivos de cabecera. Esto lo convierte en una opción ideal para sistemas donde se valora el bajo consumo de recursos y la capacidad de personalización profunda.

Instalación

La instalación de Dmenu es sencilla en la mayoría de distribuciones Linux. En sistemas basados en Debian o Ubuntu, basta con ejecutar:

sudo apt update && sudo apt install dmenu

En Arch Linux y sus derivados, el paquete se encuentra en los repositorios oficiales:

sudo pacman -S dmenu

Para Fedora, el comando es:

sudo dnf install dmenu

Si se prefiere compilar desde el código fuente para obtener la última versión o aplicar parches personalizados, el proceso es típico de los proyectos suckless:

git clone https://git.suckless.org/dmenu
cd dmenu
make clean
make
sudo make install

Tras la instalación, el comando dmenu estará disponible en el PATH y podrá ser invocado desde cualquier terminal o mediante atajos de teclado configurados en el gestor de ventanas.

Uso básico

El funcionamiento más simple de Dmenu consiste en tuberizar una lista de opciones y dejar que el usuario filtre y seleccione una de ellas. Por ejemplo, para lanzar una aplicación presente en $PATH, se puede usar el script dmenu_run que viene incluido:

dmenu_run

Este comando genera una lista de todos los ejecutables encontrados en las rutas definidas en $PATH, muestra el menú y, al pulsar Enter sobre una opción, la ejecuta. Otra forma frecuente es usar Dmenu para seleccionar un archivo de un directorio:

ls | dmenu

Tras elegir el archivo, su nombre se devuelve a la salida estándar, lo que permite encadenarlo con otros comandos, como abrirlo con un editor:

ls | dmenu | xargs -r vim

La flexibilidad de leer desde stdin y escribir a stdout hace que Dmenu sea un componente altamente reutilizable en scripts y tuberías.

Personalización

Aunque Dmenu tiene un aspecto agradable por defecto, su verdadera fuerza reside en la capacidad de adaptarlo a los gustos y necesidades de cada usuario. La personalización se realiza principalmente a través de los recursos X, que pueden definirse en el archivo ~/.Xresources o ~/.Xdefaults. Algunas de las propiedades más habituales son:

  • dmenu.font: -misc-fixed-medium-r-normal--12-120-75-75-c-60-iso10646-1
  • dmenu.normbgcolor: #222222
  • dmenu.normfgcolor: #eeeeee
  • dmenu.selbgcolor: #005577
  • dmenu.selfgcolor: #ffffff

Tras modificar el archivo de recursos, es necesario recargarlos con xrdb -merge ~/.Xresources para que los cambios tengan efecto en la siguiente ejecución de Dmenu. Además, si se compila desde el código fuente, es posible ajustar constantes directamente en el archivo config.h antes de compilar, lo que permite cambiar el alto del menú, el ancho máximo, el comportamiento de sensibilidad a mayúsculas/minúsculas y otros detalles de bajo nivel.

Integración con scripts

Una de las ventajas más poderosas de Dmenu es su facilidad para ser llamado desde scripts de shell, lo que permite crear lanzadores personalizados, menús de contexto o herramientas de administración rápida. Por ejemplo, un script sencillo para conectarse a servidores SSH mediante una lista previamente definida podría ser:

#!/bin/sh
HOSTS="servidor1.example.com servidor2.example.com servidor3.example.com"
CHOICE=$(echo "$HOSTS" | tr ' ' '\n' | dmenu -p "SSH:")
[ -n "$CHOICE" ] && ssh "$CHOICE"

De forma similar, se puede crear un menú para montar unidades, cambiar perfiles de audio o incluso ejecutar tareas de mantenimiento del sistema. La clave está en generar la lista de opciones mediante cualquier comando (como find, grep o systemctl list-units) y pasar esa lista a Dmenu mediante una tubería.

Trucos avanzados

Los usuarios más experimentados pueden llevar Dmenu más allá de su uso básico combinándolo con otras herramientas del ecosistema suckless o con extensiones propias. Algunos trucos populares incluyen:

  • Historial de comandos: Utilizar dmenu_run -i -l 5 para mostrar un número limitado de líneas y hacer coincidencia insensible a mayúsculas/minúsculas, mientras se guarda el historial en un archivo y se lee cada vez para ofrecer las opciones más usadas.
  • Integración con i3: En el gestor de ventanas i3, se puede vincular una tecla a exec_always --no-startup-id dmenu_run para lanzar aplicaciones rápidamente sin salir del teclado.
  • Selección de archivos con vista previa: Combinar Dmenu con fzf o vim para obtener una vista previa del contenido antes de decidir abrirlo.
  • Menús dinámicos basados en el contexto: Detectar el directorio actual o el estado de un servicio y adaptar la lista de opciones mostrada por Dmenu en tiempo real.

Estas técnicas demuestran que, aunque Dmenu es sencillo en su concepto, su arquitectura basada en flujos de texto lo convierte en una pieza versátil para construir flujos de trabajo altamente personalizados y eficientes.

Conclusión

Dmenu representa la esencia de la filosofía Unix: hacer una tarea específica de manera excelente y permitir que otras herramientas lo potencien mediante composición. Su bajo consumo de recursos, su facilidad de instalación y su capacidad de adaptación lo hacen indispensable tanto para usuarios novatos que buscan un lanzador rápido como para administradores avanzados que desean crear menús contextuais y scripts de automatización. Si aún no lo ha probado, incorporar Dmenu a su flujo de trabajo diario puede transformar la forma en que interactúa con su sistema Linux, ahorrando tiempo y reduciendo la dependencia de interfaces gráficas pesadas.