Aquí encontrará los tutoriales más comunes de mundosica.com
Construyendo Interfaces de Usuario en Terminal (TUIs) con Textual
Como parte de mi maestría, creé un pequeño proyecto: una aplicación CRUD para gestionar tareas usando MongoDB como backend y Textual para la interfaz en terminal. El repositorio está disponible en GitHub, y en este post, usaré este proyecto como ejemplo para tener mis apuntes, así también con la finalidad que le sea útil a quien desee desarrollar TUIs(Text User Interface) con Textual.
Este manual es lo suficientemente detallado para que paso a paso, desde cero. trataré de explicar los conceptos básicos; si ya lo conoces, verás una implementación real con validaciones, modales, tablas y más. ¡Vamos a ello!
Aplicaciones construidas con Textual
1. Posting
Cliente HTTP/API completo y usable desde la terminal — una suerte de “Postman en consola”. Ideal para desarrollar, probar APIs o explorar endpoints sin salir de la terminal.
URL: https://posting.sh/
2. Dolphie
Herramienta de monitoreo y administración para bases de datos MySQL/MariaDB/ProxySQL con interfaz TUI. Perfecto para administradores DB o desarrolladores que necesitan supervisar bases en tiempo real.
URL (GitHub): https://github.com/charles-001/dolphie
3. Elia
Cliente de terminal para interactuar con modelos de lenguaje (LLMs / ChatGPT / similares). Útil para quien trabaja en ciencia de datos, NLP, prototipado rápido de consultas a LLMs sin salir de la terminal.
URL (GitHub): https://github.com/darrenburns/elia
4. Harlequin
IDE de base de datos en la terminal: permite trabajar con bases SQL desde TUI, similar a herramientas gráficas pero en consola. Ideal para desarrolladores que prefieren trabajar sin salir del editor o terminal.
URL (GitHub): https://github.com/tconbeer/harlequin
5. Toolong
Visualizador/manipulador de archivos de log, JSONL y otros streams de texto desde terminal con interfaz interactiva. Muy útil para desarrolladores y operaciones (DevOps) que necesitan analizar logs rápidamente desde consola.
URL (GitHub): https://github.com/Textualize/toolong
6. gupshup
Cliente de chat en terminal hecho con Textual — puede servir para mensajería, chat bots, o integración con servicios de mensajería desde consola. Útil para desarrolladores que crean apps de chat o integraciones desde la terminal.
URL (GitHub): https://github.com/kraanzu/gupshup
7. kupo
Explorador de archivos en terminal, con interfaz amigable y navegación visual. Útil para quienes trabajan frecuentemente en terminal y quieren una interfaz mejor que ls/cd simples.
URL (GitHub): https://github.com/darrenburns/kupo
8. Net-Textorial
Herramienta TUI para ingenieros de redes que parsea datos de dispositivos de red comparando salida CLI cruda vs estructurada. Útil para automatización de redes.
URL: https://github.com/dannywade/net-textorial
9. Trogon
Genera interfaces terminales amigables automáticamente para aplicaciones CLI basadas en Click. Perfecto para desarrollo de herramientas de línea de comandos.
URL: https://github.com/Textualize/trogon
10. termtyper
Aplicación de práctica de mecanografía (typing test) en terminal, construida con Textual. Buena para demos, para ver cómo Textual maneja eventos de teclado, widgets dinámicos y actualización de UI en tiempo real. ([GitHub][5])
URL (GitHub): https://github.com/jenniferdewan/termtyper
¿Qué es Textual?
Textual es un framework de desarrollo rápido de aplicaciones (RAD) para Python, creado por Textualize.io. Te permite construir interfaces de usuario sofisticadas en la terminal (TUIs) usando una API simple y Pythonica. Además, soporta ejecución en navegadores web, lo que lo hace versátil.
Características Principales
- Apps: La clase principal que gestiona el ciclo de vida de la interfaz, como eventos y composición de elementos.
- Widgets: Componentes reutilizables como botones, tablas, inputs y selects para armar la UI.
- Screens: Permiten navegar entre vistas diferentes, como pantallas modales o formularios.
- Estilos con CSS: Usa reglas similares a CSS para personalizar layouts, colores y responsividad, haciendo que las TUIs se vean profesionales sin lidiar con complejidades de la terminal.
- Otras Ventajas: Bajo consumo de recursos, multiplataforma, integración con CLI, acceso remoto via SSH y licencia MIT open-source.
¿Por Qué Usar Textual para TUIs?
Las TUIs son ideales para herramientas CLI potentes pero amigables, como editores (Vim), gestores de paquetes o dashboards. Textual simplifica esto: en lugar de manejar manualmente escapes ANSI o bibliotecas como curses, usas Python puro. Es perfecto para devs que ya conocen Python, y permite crear apps interactivas rápidamente. En mi proyecto, usé Textual para una app CRUD intuitiva, con tablas, formularios y modales, todo en la terminal.
Ejemplos reales de apps con Textual incluyen clientes API, visores de logs, profilers de memoria y dashboards de analytics. Si buscas inspiración, ¡prueba a clonar repos como el mío y experimenta!
Configurando Tu Entorno
Antes de codificar, prepara tu setup.
Requisitos
- Python 3.8+ (yo usé 3.14 la versión π).
- MongoDB instalado y corriendo localmente (o usa un contenedor Docker:
docker run -d -p 27017:27017 mongo). - Un editor de código (VS Code con extensión Python funciona genial).
Instalando Dependencias
Crea un entorno virtual:
python -m venv venv
source venv/bin/activate # En Linux/Mac
# O en Windows: venv\Scripts\activate
Instala las dependencias del proyecto (del requirements.txt):
textual
pydantic
python-dotenv
pymongo
rich
pendulum
Usa pip install -r requirements.txt para instalar todo de una vez.
Crea un archivo .env para la conexión a MongoDB:
MONGO_URI=mongodb://localhost:27017
MONGO_DB=tareas
¡Listo! Ahora, veamos la arquitectura del proyecto.
Visión General del Proyecto: CRUD de Tareas con MongoDB
El app gestiona tareas con campos como título, descripción, status (pendiente, en progreso, completado), fecha e ID. Usa MongoDB como base NoSQL.
Estructura de archivos:
├ .env # Configuración de entorno
├ app.py # Punto de entrada principal
├ conky_config.conf # Configuración para widget Conky (opcional)
├ db.py # Conexión a MongoDB
├ TareaSchema.py # Modelo de validación con Pydantic
├ MainScreen.py # Pantalla principal con tabla
├ requirements.txt # Dependencias
├ style.css # Estilos CSS para Textual
├ TareaFormScreen.py # Formulario para crear/editar tareas
└ TareaService.py # Lógica CRUD
El flujo: La app inicia en app.py, muestra una tabla en MainScreen.py, usa TareaFormScreen.py para forms, valida con TareaSchema.py, opera en DB via TareaService.py y db.py. Estilos en style.css.
Hay un modo --conky para integrar con Conky (un widget de escritorio en Linux), pero nos enfocaremos en la TUI.
Paso 1: Conexión a la Base de Datos (db.py)
Comencemos por el backend. Textual no maneja datos directamente, así que usamos PyMongo para MongoDB.
En db.py, cargamos el .env, conectamos y creamos un índice único en «id».
Código clave:
import os
from dotenv import load_dotenv
from pymongo import MongoClient
from pymongo import ASCENDING
from pymongo.errors import ConnectionFailure, OperationFailure
from pymongo.database import Database
load_dotenv()
MONGO_URI = os.getenv("MONGO_URI")
MONGO_DB_NAME = os.getenv("MONGO_DB")
client: MongoClient | None = None
db: Database | None = None
if not MONGO_URI or not MONGO_DB_NAME:
print("FATAL: Faltan variables MONGO_URI o MONGO_DB en el archivo .env")
else:
try:
client = MongoClient(MONGO_URI, serverSelectionTimeoutMS=5000)
client.admin.command('serverStatus')
db = client[MONGO_DB_NAME]
db.tareas.create_index(
[("id", ASCENDING)],
unique=True,
background=True
)
except ConnectionFailure:
print(f"ERROR: No se pudo conectar a MongoDB en {MONGO_URI}.")
client = None
db = None
# ... (manejo de otros errores)
Explicación Paso a Paso:
- Carga variables de entorno con
dotenv. - Intenta conectar con timeout para no colgar.
- Verifica conexión con
serverStatus. - Crea DB y colección lazy (solo cuando se usa).
- Agrega índice único en «id» para evitar duplicados.
Tip: Siempre maneja errores; si DB falla, la app no crashea totalmente.
Paso 2: Modelos de Datos y Validación (TareaSchema.py)
Usamos Pydantic para validar datos. Esto asegura que las tareas cumplan reglas antes de guardar.
Código:
from pydantic import BaseModel, Field, validator
from datetime import date
from enum import Enum
class StatusEnum(str, Enum):
pendiente = "pendiente"
en_progreso = "en_progreso"
completado = "completado"
class TareaSchema(BaseModel):
titulo: str = Field(..., min_length=1)
descripcion: str = Field(..., min_length=1)
status: StatusEnum = Field(default=StatusEnum.pendiente)
fecha: date
id: int | None = None
# @validator("fecha")
def fecha_no_pasada(cls, v):
if v < date.today():
raise ValueError("La fecha no puede ser menor a la fecha actual.")
return v
Explicación:
StatusEnum: Limita status a valores válidos.TareaSchema: Define campos requeridos (...significa obligatorio).- Validación: Título y descripción no vacíos; fecha futura (comentada, pero puedes activarla).
- En forms, instanciamos
TareaSchema(**data)para validar.
Esto integra bien con Textual: Muestra notificaciones si falla.
Paso 3: Lógica CRUD (TareaService.py)
Esta clase encapsula operaciones DB usando aggregate para queries eficientes.
Código principal (extracto):
from db import db
from pymongo.collection import Collection
class TareaService:
_collection: Collection | None = db.tareas if db is not None else None
@classmethod
def list(cls) -> list[dict]:
if cls._collection is None:
return []
pipeline = [
{"$project": {"_id": 0}},
{"$sort": {"id": 1}},
]
return list(cls._collection.aggregate(pipeline))
@classmethod
def next_id(cls) -> int:
if cls._collection is None:
return 1
pipeline = [
{"$sort": {"id": -1}},
{"$limit": 1},
{"$project": {"id": 1}},
]
result = list(cls._collection.aggregate(pipeline))
max_id = result[0]["id"] if result else 0
return max_id + 1
# ... (insert, get, update, delete similares)
Explicación Paso a Paso:
- Usa
aggregatepara listar (proyecta sin _id, ordena). next_id: Encuentra max ID +1 (emula auto-incremento).insert: Agrega ID, inserta, retorna la nueva.get/update/delete: Match por ID, opera y verifica.
Integra con Textual: Llama estos métodos desde screens para refrescar UI.
Paso 4: Pantalla Principal (MainScreen.py)
Aquí entra Textual. MainScreen es una Screen con tabla y bindings.
Código extracto:
from textual.app import ComposeResult
from textual.screen import Screen, ModalScreen
from textual.widgets import Header, Footer, DataTable, Static, Button
from textual.containers import Container, Grid
from textual.binding import Binding
from TareaFormScreen import TareaFormScreen
from TareaService import TareaService
class TareaModal(ModalScreen):
# ... (modal para ver detalles)
class MainScreen(Screen):
BINDINGS = [
Binding("c", "create_task", "Create"),
# ... (r,u,d)
]
def compose(self) -> ComposeResult:
yield Header(name="Tareas Mongo CRUD")
self.table = DataTable(
id="task_table",
cursor_type="row",
zebra_stripes=True,
)
self.table.add_column("ID", key="id")
# ... (otras columnas)
yield self.table
yield Footer()
def on_mount(self):
self.refresh_table()
def refresh_table(self):
self.table.clear()
tareas = TareaService.list()
for tarea in tareas:
self.table.add_row(
str(tarea["id"]), tarea["titulo"], # ...
key=str(tarea["id"])
)
# ... (mover cursor)
# Acciones como action_create_task usando run_worker para async
Explicación Paso a Paso:
BINDINGS: Atajos (C para create, etc.).compose: Define UI con Header, DataTable, Footer.on_mount: Hook para refrescar al cargar.refresh_table: Limpia y carga datos de DB en tabla.- Acciones: Usan
push_screen_waitasync para modales;run_workermaneja concurrency. TareaModal: Modal reutilizable para ver/editar/borrar.
Textual maneja eventos automáticamente; tú solo defines métodos como action_*.
Paso 5: Formulario de Tareas (TareaFormScreen.py)
Otra ModalScreen para inputs.
Código extracto:
from textual.app import ComposeResult
from textual.screen import ModalScreen
from textual.widgets import Input, TextArea, Select, Button, Static
from textual.containers import Container, Grid
from datetime import date
import pendulum
from TareaSchema import TareaSchema
from pydantic import ValidationError
class TareaFormScreen(ModalScreen):
CSS_PATH = "style.css"
BINDINGS = [("escape", "cancel", "Cancelar")]
def __init__(self, mode: str = "create", tarea: dict | None = None, **kwargs):
self.mode = mode
self.tarea = tarea or {}
super().__init__(**kwargs)
def compose(self) -> ComposeResult:
# ... (inputs para titulo, desc, select status, inputs fecha)
yield Grid(
Input(...), TextArea(...),
Container(Select(...), Grid(Static("FECHA"), Input(year), # ...)),
Container(Button("Aceptar"), Button("Cancelar")),
id="form_grid",
)
def on_mount(self):
self._check_form_validity()
# Eventos on_input_changed, etc., llaman _check_form_validity para validar en real-time
def _check_form_validity(self):
# Verifica campos, habilita/desabilita botón
def on_button_pressed(self, event):
if event.button.id == "btn_accept":
self._submit_form()
def _submit_form(self):
data = { # recolecta valores }
try:
TareaSchema(**data)
except ValidationError as e:
# Notifica errores
return
self.dismiss({"ok": True, "data": data})
Explicación:
compose: Grid para layout de form.- Inicializa con valores si es «update».
- Validación real-time: Habilita botón solo si válido.
- Submit: Valida con Pydantic, dismiss con data si OK.
- Usa Pendulum para fechas fáciles.
Textual’s events (on_input_changed) hacen la UI reactiva.
Paso 6: Estilos y Diseño (style.css)
Textual usa CSS para estilos. Aplica a IDs/clases.
Código:
Screen {
layout: vertical;
background: $background;
color: $text;
}
#task_table {
width: 100%;
height: 1fr;
border: solid $accent;
margin: 1;
}
/* ... (estilos para header, rows, modal, buttons, form) */
Explicación:
- Variables como
$accentson themes de Textual. - Selectores: Por ID (#task_table), clase (.datatable–row-selected).
- Layout: Grid, align, padding.
- Hover: Cambios en botones.
Carga en app con CSS_PATH = "style.css".
Paso 7: Punto de Entrada (app.py)
La clase App une todo.
Código:
import sys
import argparse
from textual.app import App
from MainScreen import MainScreen
from TareaService import TareaService
class TareasApp(App):
CSS_PATH = "style.css"
BINDINGS = [("q", "app.quit", "Quit")]
def on_mount(self):
self.push_screen(MainScreen())
def show_conky():
# ... (imprime para Conky)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--conky', action='store_true')
args = parser.parse_args()
if args.conky:
show_conky()
else:
try:
TareasApp().run()
except Exception as e:
print(f"\nFATAL: {e}")
sys.exit(1)
Explicación:
App: Carga CSS, bindings globales.on_mount: Empuja MainScreen.- Parser: Modo normal o Conky (imprime tareas para widget).
- Manejo errores: Mensaje amigable si falla.
Ejecuta: python app.py
Integración Opcional: Conky (conky_config.conf)
Para Linux, integra como widget de escritorio.
Config:
conky.config = {
alignment = 'top',
gap_x = -580,
gap_y = 300,
# ... (otras settings)
}
conky.text = [[ ${execpi 2 ./app.py --conky} ]]
Ejecuta conky -c conky_config.conf para mostrar tareas en desktop.
Ejecutando y Probando la App
- Asegura MongoDB corre.
python app.py- Usa teclas: C (crear), R (leer), U (update), D (delete), Q (quit).
- En form, llena campos; valida automáticamente.
Prueba errores: Fecha inválida muestra notif.
Conclusión y Tips Avanzados
¡Felicidades! Has aprendido a construir una TUI completa con Textual. Este proyecto demuestra cómo integrar DB, validación y UI reactiva. Clona el repo, modifícalo: Agrega filtros, exporta a CSV o integra Rust para perf.
Tips:
- Usa
run_workerpara ops async sin bloquear UI. - Modales para feedback.
- CSS para themes (light/dark).
- Explora docs de Textual: textual.textualize.io.
¿Preguntas? Comenta abajo o conéctate en LinkedIn. ¡Sigue codificando!
#Textual #Python #TUI #MongoDB #OpenSource
Reenviar correos a otras cuentas desde webmail
Usted desea que los email que le llegan a su cuenta corporativa sean enviados automáticamente a otra cuanta de email que ya administra? Solo debe seguir el siguiente tutorial:
Configuración—>Reenvio de correos—>Configurar Reenvios —> escribir la cuenta a donde llegan correos (ejemplo: hola@gmail.com)
Personalizar la apariancia de Linux Mint 21 Cinammon
En este breve tutorial podrás realizar tres cambios a la apariencia de tu Linux Mint 21 Cinammont:
-
Cambiar el logotipo de inicio de Linux Mint 21 Cinammon.
-
Cambiar el ícono del menú inicio de Linux Mint.
-
Remplazar el logotipo de Linux Mint del inicio.
Las instrucciones están separadas con la finalidad de organizarlas y puedas aplicar las que tu prefieras o aplicarlas todas, así que comencemos:
Cambiar el logotipo de inicio de Linux Mint 21 Cinammon
¿Te gustaría cambiar el logotipo de inicio de Linux Mint? Solo debes seguir los siguientes pasos:
Primero: Localiza el directorio : /usr/share/plymouth/themes/mint-logo/
Lo que observarás son los logotipos de Linux Mint con una mínima diferencia entre uno y otro, esto es por que al reproducirse generan la animación que se visualiza en el arranque, por tanto, deberás realizar cada uno de los archivos que van del throbber-0001.png al throbber-0030.png con diseño de tu preferencia pero procurando que tenga una mínima diferencia entre uno y otro para que se pueda observar la animación a tu gusto.
NOTA: Cada imagen tiene 100px de ancho por 100px de alto y debe guardarse en formato .png con transparencia.
Segundo: Teniendo las 30 imagenes a tu gusto y con las anteriores especificaciones solo debes remplazar las originales por las nuevas. Para ello deberás tener permisos root , yo lo hago navegando hasta el directorio y con el botón derecho del mouse elijo la opción Abrir con permisos administrativos.
Tercero: Después de remplazar las imágenes solo debes ir a la consola y ejecutar el siguiente comando que permitirá actualizar: sudo update-initramfs -u
Cuarto: Eso es todo, así de rápido, económico y audaz. Ahora solo debes reiniciar tu computadora para ver la animación que realizaste.
Bonus: A continuación dejo un zip con los íconos de mundosica.com con los que puedes probar.
Cambiar el ícono del menú inicio de Linux Mint.
¿Te gustaría cambiar el ícono del menú de inicio ?
Primero: Solo debes ir al menú que se encuentra en la esquina inferior izquierda y con el botón derecho del mouse elije la opción Configurar.
Segundo: En las opciones del menú debes verificar que tengas habilitada la opción Usar un ícono y una etiqueta personalizada.
Tercero: Debes dar clic en la opción Ícono, justo sobre el ícono de linux Min, de esta manera se ejecutará una ventana donde podrás elegir el ícono de tu preferencia o en las opciones de la izquierda podrás elegir la opción Lugares, de esta manera podrás navegar entre tus archivos para elegir el ícono que más te guste
NOTA: Te recomiendo tener un archivo en formato .svg o .png con 100px de ancho por 100px de alto. Ten en cuenta que por defecto el color del panel es negro así que busca o diseña un ícono que tenga contraste.
Eso es todo, ahora solo debes ir al menú inferior izquierdo y confirmar que el cambio fue aplicado.
Remplazar el logotipo de Linux Mint del inicio.
También puedes cambiar la imagen del splash que se visualiza justo cuando aparece el login, para remplazar dicha imagen solo debes:
Primero: Ir a Configuración del sistema—>Ventana de inicio de sesión (Necesitarás permisos root)
Segundo: En la opción Apariencia–>Fondo encontrarás la imagen de Linux Mint, solo debes dar clic sobre ella y podrás navegar para encontrar la imagen que más te guste, procura conocer cual es la resolución de tu monitor para tener preparada una imagen que cubra toda la resolución.
NOTA: recomiendo que el archivo a alegir sea un .svg
Ahí mismo en Color de fondo podrás cambiar el color por el de tu preferencia.
Eso es todo, siguiendo estos sencillos pasos puedes personalizar la apariencia de tu computadora sin instalar nada adicional. Ojalá sea de tu utilidad y si tienes una mejor opción para hacer estos cambios házmelo saber para compartir con la comunidad. Saludos y Byte.
Conocer información de hardware de nuestra computadora con GNU Linux
Hola, en la presente entrada encontrarás los comandos básicos para saber más de los componentes o hardware que tiene una computadora con GNU Linux, estos comandos te servirán para distribuciones basadas en Debian como Linux Mint o Ubuntu entre otras.
¿Que hago para conocer la información del procesador?
Solo ve a tu consola, copia y pega el siguiente comando:
cat /proc/cpuinfo
¿Que hago para conocer la información del procesador, arquitectura, Numero de procesadores?
Solo ve a tu consola, copia y pega el siguiente comando:
lscpu
¿Cuanta memoria libre tengo?
Ya sabes, solo ve a la todopoderosa consola y mete el siguiente comando:
free -h
No se cuanta memoria tengo ¿quien podrá ayudarme?
De vuelta a la consula , copia y pega:
cat /proc/meminfo
Quiero saber el tamaño de mi disco duro y sus particiones, si, ya se, voy a la consola y meto el siguiente comando:
sudo lsblk -fm
Ahora, quiero conocer la información de disco duro especificando numero de cabezas, sectores y pistas.
Fácil, vamos a la consola y metemos el siguiente comando:
sudo fdisk -l
Qué ¿así de fácil?
Si, así de fácil.
Programar correos en Gmail
Te ha pasado que necesitas enviar correos electrónicos con una fecha y hora diferente a la que lo redactas? Con el presente tutorial podrás programar correos en Gmail
Primero debes acceder a gmail.com con tu correo y contraseña ya sea en computadora de escritorio o teléfono móvil con la aplicación oficial de gmail versión 2019.03.31243845549.release
Ve a la opción redactar como lo haces de forma cotidiana, en la parte inferior encontrarás el botón Enviar con una flecha, al dar click se activará la opción Programar envío
Al dar click en el botón Programar envío se activará la opción por defecto:
Puedes editar la fecha y hora de envío dando click en la opción Elegir fecha y hora
Para finalizar solo debes guardar los cambios haciendo click en el botón Programar envío
Si usted necesita suspender el envío de un correo programado o editar un correo programado solo debe buscar en el menú lateral izquierdo la opción Programados:
Ahora solo resta redactar y programar sus correos electrónicos, saludos y sea feliz.
Crear nueva cuenta de e-mail
En el presente tutorial usted aprenderá a crear una nueva cuenta de e-mail.
Primero deberá ingresar a su panel de administración usuando su usuario y contraseña
Deberá buscar la opción CORREO ELECTRÓNICO —> Cuenta de correo electrónico
Usted sólo deberá requisitar el formulario especificando:
Cuenta de e-mail (ejemplo@mundosica.com)
Dominio (En caso de tener enlazado más de un dominio en su cuenta de hosting)
Contraseña (Deberá elegir una contraseña alfa numérica con Mayúsculas, minúsculas, número y símbolos)
Seguridad (El índice de seguridad se verifica y muestra la barra en color verde especificando que su contraseña es segura)
Generador de contraseña (Puede usar esta herramienta para crear una contraseña segura)
Cuota de buzón de correo (Es la cantidad de mb con los que contará su cuenta de email )
Finalmente deberá dar click en CREAR CUENTA.
Configuración de preferencias de usuario de email roundcube
En el presente tutorial usted aprenderá a configurar las características básicas de su cuenta de email usando roundcube.
Primero deberá acceder a su cuenta de email eligiendo la opción roundcube como se muestra en la siguiente imagen
1.- Al acceder se mostrará su bandeja de entrada de emails, usted deberá ir a la esquina superior derecha eligiendo la opción Configuración.
2.- Al cargar la pantalla de Configuración se mostrará la imagen anterior, en la columna lateral izquierda deberá elegir la opción Preferencias.
3.- Ahora, en la columna central deberá elegir la opción Interfaz de usuario
4.- Se cargarán las Opciones Principales donde usted deberá elegir las opciones:
- Elegir el idioma de su preferencia, por defecto está Inglés
- Seleccionar la Zona horaria
- Elegir su formato de hora
- Podrá optar por el formato de fecha de su elección
- Elegir el rango de tiempo para cargar correos nuevos
5.- Usted podrá elegir cualquiera de los dos diseños en la opción Apariencia de Interfaz.
6.- Finalmente deberá dar clik en Guardar para actualizar los cambios en sus preferencias de email
Añadir firma de correo en roundcube
En el presente manual usted aprenderá a establecer una firma que se presentará en cada correo que usted redacte.
Primero usted debe ingresar a su bandeja de e-mail visitando el nombre de su página seguido de /webmail EJEMPLO: hagamosweb.com/webmail
Al ingresar usted deberá elegir la opción: Roundcube Open source webmail software
1.- Después de elegir Roundcube cargará su bandeja de correos, ahora en la esquina superior derecha elegir Configuración y esperar que cargue la pantalla como se muestra en la imagen.
2.- En la columna lateral izquierda elegir la opción Identidades
3.- En la columna central usted encontrará las identidades, por defecto aparecerá su cuenta de e-mail, deberá elegirla o crear una nueva en el símbolo de más (+) en la parte inferior de la misma columna.
4.- En la columna lateral derecha deberá configurar los datos que se le solicitan
5.- Recomendamos habilitar la opción Establecer como predeterminada, de esta forma los datos cargarán automáticamente en cada correo que usted redacte.
6.- Antes de continuar con la firma recomendamos habilitar la opción Firma HTML, quizá le aparezca un mensaje advirtiendo que podría perder los datos hasta el momento ingresados, no hay problema, usted puede dar aceptar sin problemas.
7.- En el área Firma usted puede establecer los datos y mensaje que desea
8.- Finalmente deberá dar clik en Guardar y eso es todo.











