Instalando Debian Trixie y Sway
Llevo algún tiempo pensando en el sistema operativo que quiero para uso diario. He trabajado con sistemas que van desde Windows 3.1 a HPUX, pasando por OS9, OSX, Slackware y Ubuntu.
Cuando me inicié, disfrutaba de teclear comandos en DOS y de aplicaciones como alpine para leer el correo. Ese mundo simple donde aprendí y me desarrollé… y que ahora añoro.
Estoy cansado de las decenas de notificaciones que recibo diariamente y que solo me desconcentran de la tarea del momento. Cansado de los efectos de transparencia de OSX que no fueron pensados para mejorar la productividad. Cansado de ver como los sistemas cargan tantos programas inútiles que consumen la mayor parte de la memoria de mi ordenador haciéndome desear tener más… es justo lo que motiva ese círculo vicioso en el que vivimos, siempre deseando tener una computadora más nueva.
Y estoy muy contento de haberlo logrado. De hecho, este artículo lo escribo desde la terminal TTY1 usando Helix.
Eligiendo mi sistema
Un buen sistema para mí debe tener las siguientes características:
- Debe ser simple, fácil de usar y de configurar;
- No debe cargar un ambiente gráfico al momento del arranque, aunque quiero tener la opción de usar uno cuando lo necesite;
- No debe tener notificaciones;
- No debe tener anuncios - Windows, aún no entiendo en que momento llegamos a esto;
- Debe utilizar instaladores simples, como
apt,rpm,pkg, etc.; - Debe tener Wayland con Sway;
- No quiero un ambiente de escritorio completo que incluya programas que no usaré;
- No quiero un sistema autónomo que ejecute tareas que no le pida hacer.
El proceso de elección
Me gusta mucho FreeBSD. Y, honestamente, pienso que brilla más en algunos aspectos que Linux, por ejemplo: el sistema de ficheros, donde todo se encuentra en el lugar que le corresponde; la documentación del sistema es muy amplia y organizada; y el servicio de administración rc, el cual está basado en ficheros de texto simples, filtrabales, ordenables, modificables, ejecutables, etc. que da gusto trabajar con él.
Sin embargo, he leído en múltiples foros sobre problemas existentes con tarjetas gráficas Nvidia y el deseo de varios usuarios de continuar usando X11, que podría significar una adopción más lenta de Wayland y Sway - a pesar de que existen capítulos completos sobre estos temas en el manual oficial - pero no he querido arriesgarme a pasar varias tardes buscando soluciones a estos problemas (inexistentes para mí, por el momento).
Fedora y Ubuntu fueron opciones que consideré, pero no quiero lidiar con flatpak o snap. No digo que sean malos, solamente no quiero un sistema con ese tipo de administradores.
Por otro lado, Debian es simple y tiene una vibra similar a FreeBSD. Cuenta con buena documentación y un soporte para hardware más amplio. Aunque dudé por systemd, hasta que entendí que se ha convertido en el estándar en Linux y no podré librarme de él. Hace años pasé por decisión similar que me llevó a usar CentOS por algún tiempo. Pero ahora tengo una mentalidad abierta a aprenderlo.
Así, después de una larga investigación, decidí probar Debian con Sway. Y sigo encantado. En resumen, Debian me ofrece:
- Una instalación mínima que puedo personalizar.
- Un administrador de paquetes sencillo y muy utilizado:
apt. - Amplia documentación y múltiples foros de usuarios.
- Buen soporte de hardware.
- Versiones estables con actualizaciones controladas.
Instalando el sistema
Debian
- Descargar la versión Network install del sitio de Debian y crear una memoria USB de arranque. En mi caso, he elegido el instalador para procesador amd64. El proceso para transferirlo a la memoria USB se describe a continuación:
# Identificar el nombre del dispositivo USB, en mi caso: sda.
# No usar sda1, sda2, etc. debemos elegir el nombre base.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 15.1G 0 disk
├─sda1 8:1 1 2.5G 0 part
└─sda2 8:2 1 30M 0 part
...
# Desmontar la memoria, si es que el sistema la monta automáticamente.
$ umount /dev/sda
umount: /dev/sda: not mounted.
# Usar el comando dd para escribir el fichero iso a la memoria.
# Este comando debe ser ejecutado con el usuario root y su
# ejecución puede tardar varios minutos.
$ dd if=debian-13.4.0-amd64-netinst.iso of=/dev/sda bs=4M status=progress
# Usar sync para asegurarnos que no queden datos pendientes de
# escribir en la memoria temporal.
$ sync
# Retirar la memoria del ordenador.
- Iniciar el ordenador con la memoria USB.
- Seleccionar Install (no confundir con Graphical install).
- En la pantalla Partition disks, seleccionar Guided - use entire disk.
- Un poco más adelante, pero aún en la sección Partition disks, elegir All files in one partition (recommended for new users).
- Aceptar los cambios y continuar con el proceso.
- En la pantalla Software selection, dejar marcadas únicamente las opciones que se muestran:
[ ] Debian desktop environment
[ ] GNOME
[ ] Xfce
[ ] GNOME Flashback
[ ] KDE Plasma
[ ] Cinnamon
[ ] MATE
[ ] LXDE
[ ] LXQt
[ ] web server
[x] SSH server
[x] Standard system utilities
[ ] Choose a Debian blend for installation
- Terminar el proceso y reiniciar el ordenador.
Programas base
Iniciemos instalando sudo:
Nota: Aparentemente, si dejamos en blanco la contraseña para el usuario root durante la instalación, Debian instalará sudo y configurará automáticamente nuestro usuario para usarlo. Aunque no lo he confirmado.
su -
apt update
apt install sudo
# Agregamos nuestro usuario al grupo sudo
usermod -aG sudo <mi_usuario>
Nota: Es importante reiniciar la sesión para ver los cambios.
Utilicemos los siguientes comandos para verificar que nuestro usuario puede usar sudo:
groups
sudo whoami
Nota: Para aprender más de sudo, visita la página de sudo en el sitio de Debian.
A continuación intalaremos los programas base:
sudo apt update
sudo apt install intel-microcode # porque mi procesador es intel
sudo apt install build-essential
sudo apt install hx btop tmux
sudo apt install sway alacritty firefox-esr
sway
Nota: El paquete sway instala el controlador de gráficos Nouveau, por lo que no es necesario instalar los controladores de nvidia.
Nota: De hecho, el proceso de instalación de nvidia falló y me dejó sin poder utilizar el ambiente gráfico. Me quedaré con Nouveau porque funciona muy bien. Referencia: Debian’s Nvidia page.
Importante: Recién encontré que sway no funciona con los controladores oficiales de nvidia de acuerdo a la documentación de debian. - Actualizado al 15 de marzo de 2026.
Con el siguiente comando podemos verificar que estemos usando el controlador de gráficos Nouveau:
$ lsmod | grep nouveau
nouveau 3055616 17
mxm_wmi 12288 1 nouveau
drm_gpuvm 45056 1 nouveau
drm_exec 12288 2 drm_gpuvm,nouveau
gpu_sched 65536 1 nouveau
drm_display_helper 274432 1 nouveau
drm_ttm_helper 16384 2 nouveau
ttm 106496 2 drm_ttm_helper,nouveau
drm_kms_helper 253952 3 drm_display_helper,drm_ttm_helper,nouveau
i2c_algo_bit 16384 1 nouveau
video 81920 1 nouveau
button 24576 1 nouveau
drm 774144 17 gpu_sched,drm_kms_helper,drm_exec,drm_gpuvm,drm_display_helper,drm_ttm_helper,ttm,nouveau
wmi 28672 6 video,intel_wmi_thunderbolt,wmi_bmof,think_lmi,mxm_wmi,nouveau
Configuración de Sway
Sway puede mostrarse con una fuente tipográfica muy pequeña en monitores de alta resolución (HiDPI), pero podemos utilizar el siguiente procedimiento para incrementarla. Iniciemos por encontrar el nombre del monitor en uso:
$ swaymsg -t get_outputs
Output DP-2 'Samsung Electric Company U32J59x HCHNB01726' (focused)
Current mode: 3840x2160 @ 59.997 Hz
Power: on
Position: 0,0
Scale factor: 1.000000
Scale filter: nearest
Subpixel hinting: unknown
Transform: normal
Workspace: 1
Max render time: off
Adaptive sync: disabled
Allow tearing: no
Available modes:
3840x2160 @ 59.997 Hz
3840x2160 @ 30.000 Hz
3840x2160 @ 29.970 Hz
2560x1440 @ 59.951 Hz
1920x1080 @ 60.000 Hz
1920x1080 @ 59.940 Hz
1680x1050 @ 59.954 Hz
1600x900 @ 60.000 Hz
1280x1024 @ 75.025 Hz
1280x1024 @ 60.020 Hz
1440x900 @ 59.887 Hz
1280x800 @ 59.810 Hz
1152x864 @ 75.000 Hz
1280x720 @ 60.000 Hz
1280x720 @ 59.940 Hz
1024x768 @ 75.029 Hz
1024x768 @ 70.069 Hz
1024x768 @ 60.004 Hz
832x624 @ 74.551 Hz
800x600 @ 75.000 Hz
800x600 @ 72.188 Hz
800x600 @ 60.317 Hz
800x600 @ 56.250 Hz
640x480 @ 75.000 Hz
640x480 @ 72.809 Hz
640x480 @ 66.667 Hz
640x480 @ 60.000 Hz
640x480 @ 59.940 Hz
720x400 @ 70.082 Hz
De la salida anterior, utilizaremos DP-2 para probar diferentes valores de escalada:
# Probando al doble del tamaño
swaymsg output DP-2 scale 2
# Probando una escala de 2.5
swaymsg output DP-2 scale 2.5
Nota: La documentación de sway recomienda utilizar valores enteros, pues los valores con decimales pueden causar pérdida de nitidez en las aplicaciones, especialmente las compatibles con Xwayland.
Apliquemos los valores a ~/.config/sway/config para que el cambio sea permanente:
# Crear el directorio de configuración sway
mkdir -p ~/.config/sway
# Copiar la configuración base, si es que no contamos con una
cp /etc/sway/config ~/.config/sway
# Abrir el fichero para modificarlo
hx ~/.config/sway/config
Agregar la siguiente línea:
output DP-2 scale 2
En ese mismo fichero, cambiemos el programa de terminal predeterminado a alacritty:
set $term alacritty
Configurando una IP fija
Un sistema Linux es comúnmente utilizado como servidor, por lo tanto, es recomendable usar una dirección IP fija para acceder a los servicios que provee. Para hacerlo, necesitamos editar el fichero /etc/network/interfaces de la siguiente manera:
auto eno1
iface eno1 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
Nota: He utilizado el comando
ip addresspara obtener el nombre de mi interfaz de red, en este caso:eno1.
Ahora, editemos el fichero de configuración de DNS, /etc/resolv.conf:
nameserver 8.8.8.8
nameserver 8.8.4.4
Y, finalmente, reiniciamos el servicio de red para aplicar los cambios:
sudo systemctl restart networking
Nerd Fonts y Emoticones
El sitio web de Nerd Fonts ofrece una amplia variedad de fuentes tipográficas que se pueden utilitilizar en alacritty. Los siguientes comandos describen como instalar JetBrains Mono:
# Instalamos unzip
sudo apt install unzip
# Creamos el directorio donde residirán las fuentes
$ mkdir -p ~/.local/share/fonts
$ unzip JetBrainsMono.zip
$ rm JetBrainsMono.zip
$ mv * ~/.local/share/fonts # movemos los ficheros al directorio de fuentes
$ fc-cache -f -v # regeneramos la memoria caché de fuentes disponibles
$ fc-list | grep -i 'jetbrains' # confirmamos que la fuente ha sido identificada
Para terminar, actualizamos el fichero de configuración de alacritty ($HOME/.config/alacritty/alacritty.toml):
[font.normal]
family = 'JetBrainsMono NF'
style = 'Regular'
[font.bold]
family = 'JetBrainsMono NF'
style = 'Bold'
[font.italic]
family = 'JetBrainsMono NF'
style = 'Italic'
[font.bold_italic]
family = 'JetBrainsMono NF'
style = 'Bold Italic'
Para los emoticones o emojis:
sudo apt install fonts-noto-color-emoji
fc-cache -f -v
Otros programas
Los siguientes son programas que utilizo con frecuencia:
apt install clang # no es necesario, pues contamos con gcc y g++, pero me gusta usarlo para pruebas
apt install clangd # servidor de lenguaje para desarrollo en C++
apt install nlohmann-json3-dev
apt install cmake git tree gnupg curl
apt install hugo nodejs npm
apt install oathtool
systemctl reboot # importante para oathtool
Otro de mis favoritos es cmus. En este momento estoy usando mi propia copia esperando a que el repositorio oficial publique la última versión. Para compilarlo:
$ ./configure --prefix="/home/andres/.local"
$ make
$ make install
Nota: Más adelante se describe como configurar el audio.
Y finalmente, otros programas que me son muy útiles cuando trabajo con proyectos grandes:
sudo apt install lf fzf fd-find ripgrep bat
fzf cuenta con integración con bash configurable desde .bashrc:
eval "$(fzf --bash)"
Referencias
Tamaño de la fuente tipográfica de la terminal TTY
Cuando nos conectamos a una terminal TTY en un monitor de alta resolución (HiDPI) es común ver que el texto se muestra con una fuente tipográfica muy pequeña, que lo hace difícil de leer. Para configurar el tamaño y el tipo de la fuente podemos utilizar los siguientes comandos:
# Usando el usuario root
$ sudo dpkg-reconfigure console-setup
$ sudo systemctl reboot # reiniciar
Nota: A pesar de la recomendación de múltiples sitios de utilizar la fuente Terminus, he elegido la fuente DejaVU 24x43. Terminus es ilegible en mi monitor.
Colores de la terminal TTY
El programa setvtrgb se utiliza para cambiar los colores de la terminal TTY. La terminal cuenta con 16 colores y para personalizarlos debemos de crear un fichero con 16 líneas, cada una representando un color, por ejemplo:
$ cat 'themes/Iceberg\ Dark.hex'
#161821
#e27878
#b4be82
#e2a478
#84a0c6
#a093c7
#89b8c2
#c6c8d1
#6b7089
#e98989
#c0ca8e
#e9b189
#91acd1
#ada0d3
#95c4ce
#d2d4de
Después, para utilizarlos:
setvtrgb 'themes/Iceberg\ Dark.hex'
clear # para visualizar los cambios en toda la pantalla
He creado un repositorio en github que contiene un directorio con múltiples ficheros hex listos para probar, así como una herramienta para convertir ficheros de iTerm a formato hex.
Nota: Para utilizar Helix en la terminal TTY, recomiendo utilizar el tema
base16_terminal.
Reiniciando y apagando el ordenador
He utilizado por mucho tiempo el comando shutdown, pero esta es la forma recomendada con systemd:
sudo systemctl poweroff # apagar
sudo systemctl reboot # reiniciar
Audio
Pipewire es la opción recomendada para audio en Debian 13 Trixie y para instalarlo se sugiere el paquete pipewire-audio. Ver Debian’s PipeWire para información adicional.
Primero verifiquemos que el sistema identifica la tarjeta de audio:
$ cat /proc/asound/cards
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDAudio-Lenovo-DualCodecs
1 [NVidia ]: HDA-Intel - HDA NVidia
HDA NVidia at 0xe0080000 irq 57
Instalemos pipewire-audio:
# Con el usuario root
$ sudo apt install pipewire-audio
$ sudo systemctl reboot # importante
Nota: Antes de instalar
pipewire-audio, parecía que los paquetes ya estaban instalados, sin embargo, no funcionaba. He tenido que instalar y reiniciar como se muestra en el bloque de código anterior.
Podemos utilizar wpctl para ajustar el volumen. Esta herramienta es parte del paquete wireplumber, que es instalado junto con pipewire-audio.
# Subir el volumen 5%
$ wpctl set-volume @DEFAULT_SINK@ 5%+
# Bajar el volumen 5%
$ wpctl set-volume @DEFAULT_SINK@ 5%-
# Poner el volumen a 0.75, 0.90, 1.0, etc.
$ wpctl set-volume @DEFAULT_SINK@ 0.75
# Obtener el valor actual
$ wpctl get-volume @DEFAULT_SINK@
# Silenciar o activar el volumen
$ wpctl set-mute @DEFAULT_SINK@ toggle
También podemos usarlo para cambiar el dispositivo de salida predeterminado, por ejemplo:
# Muestra el estado del sistema de audio
$ wpctl status
# Buscamos bajo Audio > Sinks el número de dispositivo que queremos utilizar, por ejemplo:
# Audio
# ├─ Devices:
# │ ...
# ├─ Sinks:
# │ * 35. Audio Adapter (Unitek Y-247A) Analog Stereo [vol: 1.00]
# │ 44. Ryzen HD Audio Controller Analog Stereo [vol: 1.00]
# │ 57. Radeon High Definition Audio Controller Digital Stereo (HDMI 2) [vol: 0.40]
# Y utilizamos el número de dispositivo para cambiarlo, 57 en este caso
$ wpctl set-default 57
Nota: Podemos usar alsamixer para controlar el volumen, aunque no lo he probado -
sudo apt install alsa-utils.
Nota: Si estamos en la terminal TTY, podemos desactivar el pitido del altavoz de forma temporal con
setterm -blength 0.
Nota: Para desactivarlo de forma permanente, debemos editar
/etc/inputrcy remover la marca de comentario deset bell-style none.
Nota: Si necesitamos reiniciar el servicio de audio, por ejemplo si éste deja de sonar, podemos usar el siguiente comando:
systemctl --user restart pipewire pipewire-pulse wireplumber
Helix
Helix necesita de un paso adicional para habilitar el resaltado de la sintaxis. Los siguientes comandos deben de ejecutarse con nuestro usuario normal:
hx --grammar fetch
hx --grammar build
Nota: Visita la página de configuración de lenguajes de Helix para conocer más detalles.
Impresión
Nota: CUPS es el sistema de impresión predeterminado de Debian, pero la bilbioteca de Berkeley, LPR, también se encuentra disponible. Debian Printing.
Nota: Para información adicional sobre el sistema de impresión, visita Debian’s SystemPrinting.
El proceso de instalación solo require de cups:
# install cups
$ sudo apt install cups
# Verifica que el servicio funcione utilizando un usuario normal
$ lpstat -r
scheduler is running
Visitemos la página http://localhost:631 en el navegador para agregar una nueva impresora.
Nota: Si la página de administración solicita usuario y contraseña, utilizar las credenciales de root.
Pinchemos en Printers para iniciar. Es posible que nuestra impresora sea automáticamente detectada y añadida al sistema. Sino, pinchemos en Administration y contestemos a las preguntas que muestra. He agregado una impresora de tipo ipp, la cual no necesita controladores adicionales; después he seleccionado HP LaserJet Pro M404-M405 (driverless). Para el URL de conexión, he usado ipp://192.168.1.162. Continuemos hasta concluir el proceso.
Para concluir, debemos marcar la impresora como predeterminada. Pinchemos en Printers nuevamente, y seleccionemos la nueva impresora. Ahora, en la menú desplegable, llamado Administration, seleccionamos la opción Set as Server Default.
Si todo ha ido bien, podremos utilizar el siguiente comando desde la terminal:
echo "¡Hola Mundo!" | lp
Podemos utilizar el siguiente comando para obtener la lista de impresoras disponibles y verificar la predeterminada:
lpstat -p -d
Podemos utilizar los siguientes argumentos con lp para imprimir documentos:
lp -o fit-to-page imagen.jpg
lp -o scaling=50 imagen.jpg
# podemos combinarlos
lp -o media=a4 -o fit-to-page -o landscape imagen.jpg
El manual the lp, man lp, contiene más opciones bajo el apartado COMMON JOB OPTIONS.
Por alguna razón desconocida tuve problemas para imprimir imágenes desde la terminal, pero los solucioné instalando img2pdf, convirtiendo mi imagen a pdf, e imprimiendo el documento resultante:
sudo apt install img2pdf
img2pdf imagen.jpg imagen.pdf
lp imagen.pdf
Configuración del teclado
Para configurar un teclado en español, tenemos que realizar los siguientes pasos:
- Configurar el teclado para funcionar con la terminal. Este paso se puede omitir si hemos elegido el teclado correcto durante el proceso de instalación del sistema. Yo no lo hice, así que debo de ejecutar los siguiente comandos:
# con el usuario root
sudo dpkg-reconfigure keyboard-configuration
# reiniciar para que el sistema tome los cambios
sudo systemctl reboot
- Configurar el teclado para funcionar con sway. El paso anterior nos permite utilizar un teclado en español en la terminal (TTY), pero el teclado aún necesita ser configurado en sway. Para cambiarlo, debemos actualizar el fichero de configuración de sway (
.config/sway/config) de la siguiente manera:
input "type:keyboard" {
xkb_layout: es
}
Debemos reiniciar sway para aplicar los cambios.
Referencias
Teclas de función para teclados Apple
Los teclados Apple permiten acceder a funciones especiales con las teclas de función F1, F2, etc., que permiten controlar cosas como el brillo de la pantalla o el volumen de los altavoces. En mi caso, no necesito de esta funcionalidad extra y prefiero desactivarla. Para hacerlo:
# Usando el usuario root
echo 0 > /sys/module/hid_apple/parameters/fnmode
update-initramfs -u -k all # para hacer el cambio permanente
fnmode permite configurar distintos valores, donde:
- 0, deshabilita la tecla
fn: es lo mismo presionarF8ofn+F8; - 1, reduce la prioridad de las teclas de función: presionar
F8activa la función especial, mientras quefn+F8funcionará comoF8; - 2, da prioridad a las techas de función: presionar
F8activaF8, mientras quefn+F8activa la función especial.
Referencias
Capturas de pantalla en Sway
Necesitamos tres paquetes para poder hacer pantallazos:
- grim, el programa que captura la pantalla;
- slurp, el programa que nos permite seleccionar una región de la pantalla;
- wl-clipboard, el programa que envía datos al portapapeles de Sway.
sudo apt install wl-clipboard grim slurp
Una vez instalados, podemos combinarlos para hacer capturas de la siguiente manera:
# Captura pantalla completa y envíala al portapapeles
grim - | wl-copy
# Captura una región y envíala al portapapeles
grim -g "$(slurp)" - | wl-copy
# Captura toda la pantalla y guárdala en un fichero
grim fichero.png
El repositorio de grim contiene ejemplos adicionales.
Correo electrónico
Nota: Ambos procedimientos descritos requieren de obtener una contraseña de aplicación generada por Google. Leer cómo generarla.
En esta sección describo dos opciones para leer y manipular el correo electrónico:
- Conectarse a un servidor IMAP remoto utilizando neomutt;
- Usar postfix como servicio local para recibir y enviar correo.
Opción 1: Conexión a un servidor remoto
Esta es la forma más sencilla de leer correo electrónico si contamos con un servicio que ofrece acceso IMAP, como GMail. Debemos de instalar un cliente como neomutt, que nos permitirá conectarnos a GMail vía el protocolo IMAP.
sudo apt install neomutt
A continuación creamos los directorios donde neomutt almacenará una copia de los correos del servidor:
mkdir -p ~/.cache/neomutt/headers ~/.cache/neomutt/messages
neomutt necesita un fichero de configuración. El mío se muestra a continuación. Nótese que contiene múltiples secciones, entre ellas:
- Configuración general;
- Configuración del servicio IMAP;
- Configuración de cache local;
- Configuración de colores del programa.
Editemos el texto siguiente y guardémoslo en ~/.config/neomutt/neomuttrc:
set realname = "Nombre Completo"
set from = "correo@dominio.com"
# Dirección de correo electrónico
set imap_user = "correo@dominio.com"
# Generar una contraseña de aplicación de GMail
set imap_pass = "contraseña de aplicación"
# Es correcto, dos arrobas en la siguiente cadena de conexión
set smtp_url = "smtps://correo@dominio.com@smtp.gmail.com:465"
set smtp_pass = $imap_pass
set ssl_force_tls = yes
# Directorios IMAP
set folder = "imaps://imap.gmail.com"
set spoolfile = "+INBOX"
set postponed = "+[Gmail]/Drafts"
set record = "+[Gmail]/Sent Mail"
set trash = "+[Gmail]/Trash"
# Cache local
set header_cache = "~/.cache/neomutt/headers"
set message_cachedir = "~/.cache/neomutt/messages"
# Editor
set editor = hx
# Frecuencia de revisión de correo
set mail_check = "10"
# -------------------------------------
# Visualizador de correos HTML
# -------------------------------------
# Usar auto-view para neomutt 2026
auto_view text/html
# Usar alternative-order para neomutt 2026
alternative_order text/plain text/html
# -------------------------------------
# Colores del programa
# -------------------------------------
color normal default default
color index default default
color hdrdefault default default
color tilde default default
color indicator black cyan
color status black cyan
color search black cyan
color index brightcyan default "~N"
color index brightyellow default "~F"
color index brightblack default "~R"
color header cyan default "^(From|To|Cc|Subject|Date):"
color attachment yellow default
color signature blue default
color quoted0 blue default
color quoted1 cyan default
color quoted2 green default
color quoted3 yellow default
color error brightred default
color warning yellow default
color message cyan default
color prompt green default
color markers brightblack default
color tree green default
La opción auto_view nos ayudará a visualizar el correo HTML recibido en un formato de fácil lectura. Presento dos opciones aquí: la primera hace uso de pandoc para convertir el contenido HTML en formato markdown; la segunda utiliza w3m para visualizar el contenido HTML sin convertirlo. Para cualquiera de ellas, neomutt requiere una entrada en el fichero ~/.mailcap marcada como copiousoutput para que auto_view/auto-view funcione. Según la opción elegida, instalemos el programa requerido y editemos o creemos el fichero ~/.mailcap con el siguiente contenido:
pandoc:
# Instalamos pandoc
$ sudo apt install pandoc
# Verificamos o creamos el contenido de .mailcap
$ cat ~/.mailcap
text/html; pandoc -f html -t markdown --wrap=none %s; copiousoutput
w3m:
# Instalamos w3m
$ sudo apt install w3m
# Verificamos o creamos el contenido de .mailcap
$ cat ~/.mailcap
text/html; w3m -dump -T text/html -no-cookie -o auto_image=FALSE %s; copiousoutput
Yo utilicé pandoc por unos meses, pero algunos de los correos que recibo contienen HTML con tablas anidadas que resultan en markdown ilegible. Al día de hoy uso w3m.
Opción 2: Usando el servicio local de correo
Este punto es interesante porque mucha gente está bien con los servicios en línea ofrecidos por empresas como Google o Microsoft. Yo prefiero un buzón de correo local que me permita correr procesos adicionales en caso de quererlo. Esto conlleva algunas responsabilidades adicionales, como hacerme cargo de mis propios respaldos.
He elegido fetchmail, postfix y alpine para esta tarea. Fetchmail será el programa a cargo de descargar los correos de Google y pasarlos vía postfix a mi buzón local. Postfix también tendrá la tarea de enviar correos. Por último, alpine será el programa que usaré para leer mi correo electrónico. ¿Por qué estas herramientas? Porque he trabajado anteriormente con ellas y, desde mi punto de vista, son muy sencillas de configurar y usar.
Es importante hacer énfasis que este método, a diferencia del anterior, borra el correo descargado del servidor remoto dejando solo la copia del servidor local.
El proceso inicia con la instalación de los paquetes necesarios.
sudo apt install fetchmail postfix ca-certificates libsasl2-modules alpine
Nota: Libsas2-modules es una biblioteca necesaria para ejecutar los procesos de inicio de sesión con los proveedores de correo electrónico.
Instalación y configuración de Postfix
Nota: Utilizar root para configurar postfix.
Postfix, durante el proceso de instalación, preguntará el tipo de configuración de servidor de correo que queremos utilizar. He seleccionado Internet with smarthost, que significa que el ordenador recibirá y enviará correo a través de servicios adicionales, en este caso fetchmail y Google.
Para la configuración del nombre de dominio del sistema he utilizado nombre-del-ordenador.mi-dominio.com y smtp.gmail.com para la configuración del servidor de envío. El proceso crea un fichero de configuración en /etc/postfix/main.cf e inicia el servicio automáticamente. Utilizamos los siguiente comandos para verificar que funciona como esperamos:
# Verificamos que el servicio esté funcionando
$ postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 21349
# Verificamos que el servicio está utilizando el puerto 25
$ lsof -i :25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 21349 root 13u IPv4 23045 0t0 TCP *:smtp (LISTEN)
master 21349 root 14u IPv6 23046 0t0 TCP *:smtp (LISTEN)
El siguiente comando también puede ayudarnos a verificar:
# imprime la configuración actual
postconf -d
En caso de necesitar actualizar la configuración, podemos releerla con:
postfix reload
Instalación y configuración de Fetchmail
Nota: Utilizar nuestro usuario normal para configurar fetchmail.
Fetchmail se encargará de leer el correo electrónico desde Google y entregarlo al servicio de postfix local. Para realizarlo, necesitará el fichero de configuración $HOME/.fetchmailrc con el siguiente contenido:
# Reemplazar "local_user" con el nombre de usuario local
set logfile "/home/local_user/.local/var/fetchmail.log"
poll imap.gmail.com proto IMAP
# Utilizar la contraseña de aplicación generada por Google;
# no es la contraseña del correo electrónico
user "gmail-user@gmail.com"
pass "gmail-app-password"
# Reemplazar "local_user" con el nombre de usuario local
is "local_user"
# Utilizar conexión segura al descargar los correos
ssl
# Mantener una copia del correo en el servidor
keep
# Carpeta de Google de donde se descargará el correo
folder "INBOX"
# Número de correos a descargar
fetchlimit 10
# Descargar correos nuevos cada N segundos.
# Mantener esta línea comentada para desactivar el servicio recurrente de verificación.
# set daemon 300
Es importante cambiar los niveles de seguridad del fichero de configuración para que funcione y crear el fichero para la bitácora:
chmod 600 $HOME/.fetchmailrc
mkdir -p $HOME/.local/var
touch $HOME/.local/var/fetchmail.log
Importante: Antes de continuar, es necesario que postfix esté funcionando, de lo contrario, fetchmail perderá los correos que descargue.
Y ahora, el momento de probarlo. Utilizaremos fetchmail de manera manual, pidiendo descargar solo un correo:
$ fetchmail -v --fetchlimit 1
...
fetchmail: IMAP< A0008 OK Success
...
Si todo ha salido bien, tendremos un mensaje de éxito entre las líneas que el programa imprime. En caso contrario, debemos de revisar la salida para entender que ha ido mal.
El correo debe ser visible desde alpine:
alpine
# adicionalmente, podemos revisar que exista el siguiente fichero:
ls -l /var/mail/local_user
Finalmente, podemos quitar la marca de comentario de $HOME/.fetchmailrc y ejecutar fetchmail sin parámetros para descargar los correos de modo recurrente.
Configuración del envío de correo
El último paso es configurar postfix para enviar correo a través del servidor de Google. Para hacerlo, debemos de configurar postfix para utilizar gmail. Los siguientes comandos agregarán los parámetros a /etc/postfix/main.cf.
Nota: Ejecutar los siguientes comandos con el usuario root
$ postconf -e 'relayhost = [smtp.gmail.com]:587'
$ postconf -e 'smtp_use_tls = yes'
$ postconf -e 'smtp_tls_security_level = encrypt'
$ postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
$ postconf -e 'smtp_sasl_auth_enable = yes'
$ postconf -e 'smtp_sasl_security_options = noanonymous'
$ postconf -e 'smtp_sasl_tls_security_options = noanonymous'
$ postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
Ahora debemos de crear un fichero con los datos de acceso a Google. Los datos a utilizar son los mismos que utilizamos para el fichero de $HOME/.fetchmailrc.
# Crear `/etc/postfix/sasl_passwd` con el siguiente contenido:
# [smtp.gmail.com]:587 usuario@gmail.com:gmail_app_password
$ hx /etc/postfix/sasl_passwd
# Restringir la seguridad
$ chmod 600 /etc/postfix/sasl_passwd
# Cifrar la contraseña
$ postmap /etc/postfix/sasl_passwd
# Restringir la seguridad
$ chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
# Activar los cambios
$ postfix reload
/usr/sbin/postconf: warning: /etc/postfix/main.cf: support for parameter "smtp_use_tls" will be removed; instead, specify "smtp_tls_security_level"
postfix/postfix-script: refreshing the Postfix mail system
Nota: Continuar con el usuario normal a partir de este punto.
Ahora, antes de enviar un correo, debemos de configurar alpine para que la dirección de envío coincida con la que usamos en Google. Para ello, desde alpine, iremos a Setup > Configuration y modificaremos los campos Personal Name y User Domain. Una vez actualizados, es momento de probar enviar un correo.
Cliente de Github
Nota: Ver “Cómo instalar git y conectarlo a github” para crear un juego de llaves y agregarlos a GitHub.
OpenSSH trae consigo un servicio llamado ssh-agent que guarda las llaves privadas en memoria e interatúa con git cuando es necesario, manteniendo las llaves seguras. El algoritmo funciona así:
- git le pide a ssh conectarse a GitHub;
- ssh necesita iniciar sesión;
- ssh le pide a ssh-agent que firme la solicitud de inicio de sesión;
- ssh-agent firma la solicitud usando la llave privada;
- GitHub verifica la solicitud usando la llave pública.
Para agregar una llave privada a ssh-agent usamos ssh-add; éste último se comunuica con ssh-agent a través de un socket disponible vía SSH_AUTH_SOCK.
Este proceso puede llevarse a cabo con las siguientes líneas:
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/github
Sin embargo, el servicio ssh-agent solo se encontrará disponible para la terminal actual y tendremos que ejecutarlo cada vez que se inicie una nueva terminal.
Para ejecutar el servicio cuando el usuario inicia sesión debemos de seguir los siguientes pasos:
- Activamos el servicio ssh-agent:
# activamos ssh-agent
systemctl --user enable --now ssh-agent.socket
# verificamos su estado
systemctl --user status ssh-agent.socket
- Exportamos
SSH_AUTH_SOCK, agregando la siguiente línea a~/.bashrc
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/openssh_agent"
- Creamos un servicio para cargar la llave automáticamente
mkdir -p ~/.config/systemd/user
hx ~/.config/systemd/user/ssh-add.service
con el siguiente contenido:
[Unit]
Description=Add github SSH key to ssh-agent
Wants=ssh-agent.socket
After=ssh-agent.socket
[Service]
Type=oneshot
Environment=SSH_AUTH_SOCK=%t/openssh_agent
ExecStart=/usr/bin/ssh-add %h/.ssh/github
[Install]
WantedBy=default.target
- Activamos el servicio
source ~/.bashrc
systemctl --user daemon-reload
systemctl --user enable ssh-add.service
systemctl --user status ssh-add.service
- Verificamos los directorios y que la llave privada sea agregada
echo "$SSH_AUTH_SOCK"
ls -l "$SSH_AUTH_SOCK"
ssh-add -l
Conclusión
Estoy actualizando continuamente esta publicación, agregando nuevas cosas según vaya requiriendo.
Se feliz, no te apegues a lo innecesario y no dejes que nadie te quite la paz mental.
